🇰🇷 한글 설명
PHP 8.2.31 이전, 8.3.31 이전, 8.4.21 이전, 8.5.6 이전 버전에서 metaphone() 함수가 2GB 이상의 문자열을 처리할 때 부호 있는 정수 오버플로우가 발생합니다. 이로 인해 범위 밖 메모리 읽기가 발생하여 프로세스 세그멘테이션 폴트 또는 비정상 종료를 야기할 수 있습니다.
💡 쉬운 설명
PHP의 음성 비교 기능이 매우 큰 텍스트(2GB 이상)를 받으면 내부 오류가 발생하여 서버가 비정상 종료됩니다. 공격자는 이 기능에 대량의 데이터를 전송하여 서비스를 중단시킬 수 있습니다.
🇺🇸 원문 (English)
In PHP versions 8.2.* before 8.2.31, 8.3.* before 8.3.31, 8.4.* before 8.4.21, and 8.5.* before 8.5.6, the metaphone() function in ext/standard/metaphone.c uses a signed int variable to track the current position within the input string. If a string longer than 2,147,483,647 bytes is passed, a signed integer overflow occurs, resulting in undefined behavior. This can lead to an out-of-bounds read, causing a segmentation fault or access to unrelated memory, and may affect the availability of the PHP process.
📍 영향받는 시스템
PHP 8.2.x (<8.2.31), 8.3.x (<8.3.31), 8.4.x (<8.4.21), 8.5.x (<8.5.6)
⚔️ 공격 벡터
2GB 이상의 입력값을 metaphone() 함수에 전달하여 정수 오버플로우 및 메모리 손상 유발
🛡️ 대응 방법
PHP를 8.2.31, 8.3.31, 8.4.21, 8.5.6 이상으로 즉시 업그레이드
🔧 검증 코드
출력된 PHP 버전이 8.2.31, 8.3.31, 8.4.21, 8.5.6 이상인지 각 메이저 버전별로 확인하여 패치 상태 판단
php -v 2>/dev/null | grep -oP 'PHP \K[0-9]+\.[0-9]+\.[0-9]+'