CVE-2026-45034
PhpSpreadsheet: File::prohibitWrappers 우회
- 게시됨
- 2026. 6. 22.
- 업데이트됨
- 2026. 6. 23.
- CNA 할당 중
- GitHub_M
- 증거 관찰됨
- 2026. 8. 14.
기본 CVSS
nvd · CVSS 4.0
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X낮음 · 다음 30일
- 백분위수
- 39.2%
- 모델 날짜
- 2026. 9. 21.
EPSS는 통계적 추정치이지 확실성이나 영향의 척도가 아닙니다. 이를 CVSS, KEV 상태, 노출 및 환경과 결합하세요.
요약
PhpSpreadsheet는 스프레드시트 파일을 읽고 쓰기 위한 순수 PHP 라이브러리입니다. 1.30.5 이전 버전에서 CVE-2026-34084는 헬퍼 함수 File::prohibitWrappers에 의해 패치되었습니다. 이 헬퍼는 parse_url($filename, PHP_URL_SCHEME)을 호출한 다음 is_string($scheme) && strlen($scheme) > 1을 확인하여 phar://, php://, data:// 또는 expect://와 같은 스트림 래퍼를 거부합니다. 이 확인은 "경로에 래퍼가 포함되어 있는지"와 동일하지 않습니다. 입력이 스킴 뒤에 슬래시가 세 개 이상 있는 phar:///path/file.phar/inner 형태일 때, parse_url은 스킴 문자열을 반환하는 대신 boolean false를 반환합니다. 따라서 is_string($scheme) 분기는 건너뛰어지고, 헬퍼는 예외를 던지지 않고 반환하며, 호출자는 계속 진행합니다. 그러나 PHP의 스트림 계층은 여전히 phar:///...을 유효한 phar 래퍼로 취급하고 기본 phar 파일을 엽니다. 그 결과 IOFactory::load($attackerPath)가 패치를 우회하여 여전히 phar 래퍼에 접근하게 됩니다. PHP 7.x에서는 is_file을 통해 phar 래퍼에 도달하는 것만으로도 PHP가 phar 메타데이터를 자동으로 역직렬화하며, 이로 인해 공격자가 제어하는 객체의 매직 메서드 __wakeup과 __destruct가 호출되어 완전한 RCE가 발생합니다. PHP 8.x에서는 일반 파일 작업에 대한 자동 메타데이터 역직렬화가 제거되었으므로, PhpSpreadsheet 계층의 공격 체인은 phar 래퍼 파일 읽기 프리미티브로 축소되며, RCE는 다운스트림 소비자가 Phar::getMetadata를 호출하는 경우에만 다시 발생합니다. 이 취약점은 1.30.5에서 수정되었습니다.
소스
1PHPSpreadsheet의 phar:// 역직렬화 취약점에 대한 PoC 익스플로잇으로, prohibitWrappers를 우회하여 취약한 PHP 애플리케이션에서 원격 코드 실행(RCE)을 달성합니다.
책임 있는 사용
귀하가 소유하고 있거나 테스트할 권한이 있는 시스템에 대해서만 취약점 정보를 사용하십시오. Kitploit은 공개 연구 메타데이터에 연결되며 익스플로잇 코드나 악성 페이로드를 저장하지 않습니다.