🇰🇷 한글 설명
PHP 5.2.0의 필터 확장에서 FILTER_SANITIZE_STRING과 FILTER_FLAG_STRIP_LOW 플래그 사용 시, 특정 공백 문자가 포함된 HTML 태그를 제대로 제거하지 못합니다. 공격자는 %0b 같은 특수 문자를 이용해 필터를 우회하고 XSS 공격을 수행할 수 있습니다.
💡 쉬운 설명
PHP의 문자열 정제 함수가 일부 특수 공백 문자를 포함한 HTML 태그를 검증하지 못해 악의적인 스크립트가 웹 페이지에 주입될 수 있습니다. 공격자는 이를 이용해 사용자의 데이터를 훔치거나 악성 행동을 수행하도록 할 수 있습니다.
🇺🇸 원문 (English)
ext/filter in PHP 5.2.0, when FILTER_SANITIZE_STRING is used with the FILTER_FLAG_STRIP_LOW flag, does not properly strip HTML tags, which allows remote attackers to conduct cross-site scripting (XSS) attacks via HTML with a '<' character followed by certain whitespace characters, which passes one filter but is collapsed into a valid tag, as demonstrated using %0b.
⚔️ 공격 벡터
HTML with '<' followed by whitespace characters (e.g., %0b, %0c, %0d) that bypass FILTER_SANITIZE_STRING filter
🛡️ 대응 방법
PHP를 5.2.1 이상으로 업그레이드하고, htmlspecialchars() 또는 HTML entity encoding을 추가로 구현
🔧 검증 코드
PHP 버전이 5.2.1 미만이면 'Vulnerable' 출력됨. 5.2.1 이상이면 패치되었음을 의미합니다.
php -v | grep -oP 'PHP \K[0-9]+\.[0-9]+\.[0-9]+' | awk '{if ($1 < "5.2.1") print "Vulnerable"}'