- Windows 서버 대상 PHP 원격 코드 실행 취약점(CVE-2024-4577) 악용 사례 급증 - 공격에 성공할 경우 시스템 전체가 장악될 위험이 있어 기업 및 기관의 신속한 대응이 요구
내용
- CVE-2024-4577 > Windows 환경에서 PHP의 CGI 구현이 문자 인코딩 변환을 적절히 처리하지 못해 발생 > 윈도우 코드 페이지의 ‘Best-Fit’ 기능이 특정 유니코드 문자를 PHP 명령줄 옵션으로 잘못 해석해 명령 실행 가능 > 공격자는 일반 대시(-, 0x2D)가 아닌 소프트 하이폰(-, 0xAD)를 사용 > PHP-CGI 8.3.8 이전 버전, 8.2.20 이전 버전, 8.1.29 이전 버전에 영향 > PHP-CGI 8.3.8, 8.2.20, 8.1.29 버전에서 취약점을 수정
- 25.01 한 달 동안 전 세계 허니팟에서 해당 취약점을 노리는 1,089개의 고유 IP 주소가 탐지 > 공격자들은 취약점을 악용해 시스템 침투 및 자격 증명 탈취, 지속적인 접근 권한 확보 시도 > 단순한 데이터 탈취를 넘어 권한을 상승시켜 "TaoWu" Cobalt Strike 킷과 같은 고급 공격 도구를 활용하는 등 적극적인 공격을 전개 > Gh0st RAT, XMRig를 설치하거나, 랜섬웨어 공격자들은 웹쉘을 배포하고 시스템을 암호화
- 취약점 완화를 위해 신속한 패치 적용 권고 > 웹 서버에서 PHP 실행 파일이 외부에서 접근할 수 있는 디렉터리에 노출되지 않도록 설정 변경 필요 > 윈도우 환경에서 XAMPP를 사용하는 경우 PHP 실행 파일이 기본적으로 노출되는 문제가 있어, 추가적인 보안 조치가 필요 > 불필요한 서비스와 프로토콜을 비활성화 > 최소 권한 원칙 적용 > 네트워크 모니터링을 강화 > 악성코드 감염 여부를 지속적으로 점검
기타
보안 패치의 중요성이 다시 한번 강조된 사례 > 공격자들은 지속적으로 자동화된 스캔을 수행하며 패치되지 않은 시스템을 탐색하기 때문
- 해당 취약점은 "sapi/cgi/cgi_main.c"에서 적절한 검증 없이 PHP-CGI로 값을 전달하여 발생
> 1793줄 if(): CGI 사용 여부 확인
> 1805줄 while(): CGI 옵션 검증(c, n, d, b, s) 후 옵션 전달
구분
옵션
설명
자주 사용되는 Exploit 옵션
-n
php.ini 파일을 사용하지 않음
-s
소스코드를 하이라이트로 보여줌
-d
php.ini 정의된 설정 내용을 사용자가 설정 할 수 있음 > allow_url_fopen=1: 외부 URL로부터 파일 호출 > allow_url_include=1: 외부 파일 include 허용 > auto_prepend_file=php://input: Http Request Body로부터 데이터를 가져와 실행 > auto_prepend_file=value: value를 먼저 실행 후 POST뒤의 원래 페이지를 실행 > auto_append_file=value: 요청된 페이지를 먼저 실행하고 php://input(BODY)를 실행
[사진 3] PHP 5.4.1 sapi/cgi/cgi_main.c
[사진 3] bee-box 취약점
- 공개된 PoC에서는 -d 옵션을 사용해 php.ini 파일의 내용을 수정 및 Exploit [6]