Kant's IT/Vulnerability
PHP XXE 취약점으로 인한 설정파일 및 비공개 키 유출 위협
Kant Jo
2025. 4. 15. 15:00
PHP XXE Injection Vulnerability Allows Attackers to Access Config Files & Private Keys
PHP XXE Injection Vulnerability Allows Attackers to Access Config Files & Private Keys
A newly uncovered XML External Entity (XXE) injection vulnerability in PHP has demonstrated how attackers can bypass multiple security mechanisms.
gbhackers.com
- 취약점 개요
- PHP XML 파싱 처리 중 발생하는 XXE(XML External Entity) 취약점이 공개됨
- PHP의
libxml
확장과php://filter
등 래퍼(wrapper)를 조합하여 기존 보안 플래그 우회를 통해 민감 정보 접근 가능 LIBXML_NONET
,LIBXML_DTDLOAD
등 비활성화 플래그가 우회되며 실질적인 보안 효과가 무력화됨
- 공격 기법
DOMDocument
클래스에서 외부 엔티티 로딩 제한을 우회하기 위해 악성 DTD 파일 삽입php://filter/resource=
와 같은 래퍼 사용을 통해 http:// 요청 대신 필터링된 자원 접근으로 변환%name;
형식의 파라미터 엔티티 활용하여 XML 구조 내부에 악성 코드 삽입zlib.deflate
및 base64 인코딩으로 페이로드 압축 후 GET 쿼리 파라미터 내 삽입 가능- TCP 아웃바운드 제한 환경에서는 DNS 서브도메인을 통한 데이터 유출 경로 확보 가능
- 실제 사례
- SimpleSAMLphp에서 발생한 XXE 취약점(CVE-2024-52596)을 통해 인증되지 않은 사용자가 설정 파일 및 개인 키 접근 가능
- 해당 취약점은 인증 위조 및 인증 시스템 완전 우회로 이어질 수 있음
- Identity Provider로 설정된 환경에서 심각한 인증 보안 위협 발생 가능성 입증
- 보안 권고
libxml
파서 사용 시LIBXML_DTDLOAD
,LIBXML_NOENT
등의 플래그를 완전 비활성화할 것- PHP 8.4 이상에서 제공되는
LIBXML_NO_XXE
옵션 활성화 권장 - 사용자 입력 기반 XML 처리는 철저한 유효성 검증 및 화이트리스트 기반 접근 제어 필요
- 외부 엔티티 사용을 금지하고 필요한 경우 별도 로직으로 안전한 파싱 구현 필요
- 보안 테스트 도구를 통해 XML 기반 입력에 대한 동적 분석 및 fuzzing 수행 필요