🇰🇷 한글 설명
PHP의 parse_str() 함수가 두 번째 파라미터 없이 호출될 때 원격 공격자가 전달된 문자열의 변수 이름과 값을 조작하여 임의의 변수를 덮어쓸 수 있는 취약점입니다. 전역 변수(슈퍼전역 변수)를 포함한 중요 변수들이 의도하지 않게 변조될 수 있습니다.
💡 쉬운 설명
PHP에서 문자열을 변수로 변환하는 parse_str 함수에서 공격자가 원하는 변수명을 넣으면 프로그램의 중요한 변수들을 몰래 바꿀 수 있는 문제입니다. 예를 들어 사용자 권한 변수나 인증 정보를 변조하는 데 악용될 수 있습니다.
🇺🇸 원문 (English)
The parse_str function in (1) PHP, (2) Hardened-PHP, and (3) Suhosin, when called without a second parameter, might allow remote attackers to overwrite arbitrary variables by specifying variable names and values in the string to be parsed. NOTE: it is not clear whether this is a design limitation of the function or a bug in PHP, although it is likely to be regarded as a bug in Hardened-PHP and Suhosin.
📍 영향받는 시스템
PHP, Hardened-PHP, Suhosin - 2007년 이전 버전 및 parse_str()을 두 번째 파라미터 없이 사용하는 모든 PHP 응용프로그램
⚔️ 공격 벡터
HTTP GET/POST 요청의 쿼리 문자열이나 요청 본문에서 parse_str()에 전달되는 데이터에 악의적인 변수명을 포함하여 전송
🛡️ 대응 방법
parse_str() 사용 시 항상 두 번째 파라미터를 사용하여 변수를 배열로 받기 (예: parse_str($input, $output)) 및 PHP 최신 버전으로 업그레이드
🔧 검증 코드
parse_str 함수의 register_globals 설정 및 PHP 버전 확인. PHP 버전이 7.2 이상이면 안전, 낮으면 파라미터 사용 여부 검증 필요
php -r "phpinfo();" | grep -i 'parse_str\|register_globals'