🇰🇷 한글 설명
PHP 5.3.4 이전 버전에서 파일 경로에 null byte(\0) 문자를 삽입하여 의도된 접근 제한을 우회할 수 있는 취약점입니다. .php\0.jpg처럼 null byte 뒤에 안전한 확장자를 붙이면 file_exists() 등의 함수가 실제 파일명은 .php로 처리하도록 속일 수 있습니다.
💡 쉬운 설명
PHP 프로그램이 파일 이름을 검증할 때 특수 문자(\0)를 제대로 처리하지 못해, 공격자가 위험한 파일을 업로드하거나 접근할 수 있게 하는 문제입니다. 파일명 뒤에 몰래 명령을 숨길 수 있다고 생각하면 됩니다.
🇺🇸 원문 (English)
PHP before 5.3.4 accepts the \0 character in a pathname, which might allow context-dependent attackers to bypass intended access restrictions by placing a safe file extension after this character, as demonstrated by .php\0.jpg at the end of the argument to the file_exists function.
📍 영향받는 시스템
PHP 5.3.4 이전 모든 버전
⚔️ 공격 벡터
파일 업로드 폼, file_exists() 함수 검증, 파일 접근 제한을 우회하기 위해 null byte 삽입
🛡️ 대응 방법
PHP를 5.3.4 이상으로 업그레이드하거나, 파일명 검증 로직에서 null byte 및 특수문자 필터링 추가
🔧 검증 코드
PHP 버전이 5.3.4 이상이면 안전합니다. 5.3.3 이하 버전이 표시되면 즉시 업그레이드 필요
php -v | grep -oP 'PHP \K[0-9.]+'