🇰🇷 한글 설명
Windows에서 PHP의 파일시스템 및 스트림 API가 경로의 구성요소로 CON, PRN, AUX, NUL, COM1~COM9, LPT1~LPT9, CONIN$, CONOUT$ 같은 예약된 장치 이름을 거부하지 않습니다. 공격자가 제어하는 파일명이 CreateFileW()에 전달되어 애플리케이션이 기대한 일반 파일 대신 장치가 열리며, 이로 인해 요청이 차단되거나 멈추고 워커 프로세스가 고갈될 수 있습니다.
💡 쉬운 설명
Windows에서는 CON, NUL 같은 이름이 특수 장치를 가리키는데, PHP가 이를 걸러내지 않습니다. 공격자가 이런 이름을 파일명으로 넣으면 서버가 엉뚱한 장치를 열어 응답이 멈추고 서버 자원이 고갈됩니다.
🇺🇸 원문 (English)
On Windows, PHP's filesystem and stream APIs do not reject reserved device names such as CON, PRN, AUX, NUL, COM1 to COM9, LPT1 to LPT9, CONIN$ and CONOUT$ when they appear as a component of a path. An attacker-controlled filename therefore reaches CreateFileW() and opens a device instead of the regular file the application expected, which can block or hang the request and exhaust worker processes.
📍 영향받는 시스템
Windows에서 실행되는 PHP (영향 버전은 PHP 공식 보안 공지 확인 필요)
⚔️ 공격 벡터
사용자 입력이 파일명/경로로 쓰이는 기능에 CON, NUL 등 예약 장치 이름을 전달하여 장치를 열고 요청을 중단시킴
🛡️ 대응 방법
PHP를 패치된 최신 버전으로 업데이트하고, 파일명 입력값에서 예약된 장치 이름을 애플리케이션 단에서도 검증하여 차단
🔧 검증 코드
출력된 PHP 버전이 CVE-2026-17545 수정 버전 이상인지 PHP 공식 보안 공지와 비교하며, 미만이면 취약한 것으로 판단
php -v 2>/dev/null | head -n 1