🇰🇷 한글 설명
Symfony Expression Language의 파서가 노드 트리를 생성할 때 깊이 제한을 두지 않아 발생하는 취약점입니다. 수만 개의 중첩된 연산자가 포함된 표현식을 처리할 때 PHP 프로세스가 충돌하며 서비스 거부(DoS)가 발생할 수 있습니다.
💡 쉬운 설명
사용자가 입력한 복잡한 수식을 처리하는 과정에서 컴퓨터가 감당할 수 없는 깊이의 계산을 시도하여 프로그램이 멈추는 문제입니다. 악의적인 사용자가 아주 긴 수식을 보내면 서버를 마비시킬 수 있습니다.
🇺🇸 원문 (English)
In Symfony Expression Language versions prior to 5.4.54, 6.4.48, 7.4.21, and 8.1.9, the parser of the ExpressionLanguage component built its node tree with no bound on its depth. An expression made of tens of thousands of nested unary operators, array literals, binary operators or property accesses crashed the PHP process, while the tree was being freed.
#[Assert\ExpressionSyntax] passes the validated value to ExpressionLanguage::lint(), so an application validating expressions written by its users could be crashed by a single request, and so could any code parsing untrusted expressions.
This issue affects symfony/expression-language through v5.4.53, v6.0.0-BETA1 through v6.4.47, v7.0.0-BETA1 through v7.4.20, and v8.0.0-BETA1 through v8.1.8.
📍 영향받는 시스템
symfony/expression-language v5.4.53 이하, v6.4.47 이하, v7.4.20 이하, v8.1.8 이하 버전
⚔️ 공격 벡터
사용자로부터 입력받은 표현식을 검증하거나 파싱하는 기능에 수만 개의 중첩된 연산자를 포함한 악의적인 문자열을 전송
🛡️ 대응 방법
Symfony Expression Language를 최신 보안 패치 버전(5.4.54, 6.4.48, 7.4.21, 8.1.9 이상)으로 업데이트
🔧 검증 코드
출력된 버전이 취약한 버전 범위(5.4.53, 6.4.47, 7.4.20, 8.1.8 이하)에 포함되는지 확인
composer show symfony/expression-language | grep 'versions'