보안 구성 오류 - XXE 상세 정보
"XML 외부 엔티티"(XXE) 취약점 클래스는 XML 파서와 관련된 보안 구성 오류입니다.
XML 표준에는 파일 및 URL과 같은 '엔티티'를 참조하는 방법이 포함되어 있습니다. 파서가 외부 엔티티를 완전히 해석하는 것이 기본값인 경우가 많기 때문에 XML 문서가 잠재적인 공격자에게 파일 및 기타 민감한 정보를 노출할 수 있습니다.
간단한 예
외부 엔티티를 사용하는 XML 문서의 예를 살펴보겠습니다:
xml
<?xml version="1.0" ?>
<!DOCTYPE outerElement [
<!ENTITY externalEntity SYSTEM "file:///etc/passwd" > ]>
<outerElement>&externalEntity;</outerElement>
먼저 문서 내에 존재할 수 있고 구문 분석기가 처리할 수 있는 구조/요소 유형을 정의하는 새로운 'doctype'을 선언합니다.
그 안에 'externalEntity'라는 시스템 유형 엔티티를 지정합니다. 이 엔티티는 '/etc/passwd' 파일을 가리킵니다.
'doctype' 정의에 이어 실제 XML 데이터가 있습니다. '외부 요소'를 정의한 다음 '외부 요소' 엔티티에 대한 참조('&'로 표시)를 추가합니다.
이 시점에서 인터프리터는 엔티티 정의를 조회하고 정의된 URL을 확인하여 '&externalEntity;' 대신에 넣습니다.
구문 분석 프로세스가 끝나면 다음과 같은 문서가 생성됩니다:
xml
<?xml version="1.0" ?>
<outerElement>
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
....
</outerElement>
완화
XXE로부터 완벽하게 보호하는 방법의 필요성과 세부 사항은 언어, 프레임워크 및 해당 버전에 따라 크게 달라집니다.
각 조합은 종종 파서의 일부 측면을 비활성화하여 파일은 확인하지 못하지만 HTTP 경로는 확인하지 못하게 할 수 있습니다. 또는 엔티티 확장은 여전히 허용할 수 있으며, 그 자체로 서비스 거부 취약점이 발생할 수 있습니다.
.NET
.NET 4.5.1 이하를 실행하는 경우 다음 클래스가 기본적으로 취약합니다:
- XmlDocument('xmlDocument.XmlResolver = null;'로 비활성화)
- XmlTextReader('xmlTextReader.ProhibitDtd = true;'로 비활성화)
- XPathNavigator