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 수행 필요