Guidelines

보안 구성 오류 - XXE 세부 정보

'XML 외부 엔티티' (XXE) 취약성 클래스는 XML 파서와 관련된 잘못된 보안 구성입니다.

XML 표준에는 파일 및 URL과 같은 “엔티티”를 참조하는 방법이 포함됩니다.파서가 외부 엔티티를 완전히 확인하는 것이 기본값인 경우가 많습니다. 즉, XML 문서로 인해 잠재적 공격자에게 파일 및 기타 민감한 정보가 공개될 수 있습니다.

간단한 예시

외부 엔티티를 사용하는 XML 문서의 예를 조금 살펴 보겠습니다.

xml
<?xml 버전="1.0"?>
<!문서 유형 외부 요소 [
<!] >
<outerElement>&외부 엔티티;</outerElement>

먼저 문서 내에 존재할 수 있고 파서가 처리할 수 있는 구조/요소 유형을 정의하는 새로운 'doctype'을 선언합니다.

그 안에 '외부 엔티티'라는 시스템 유형 엔티티를 지정합니다.이 엔티티는 '/etc/passwd' 파일을 가리킵니다.

'doctype' 정의에 따라 실제 XML 데이터를 얻을 수 있습니다.'OuterElement'를 정의한 다음 'ExternalEntity' 엔티티에 참조 ('&'로 표시됨) 를 추가합니다.

이때 인터프리터는 엔티티 정의를 찾아 정의된 URL을 확인하고 '&ExternalEntity;' 대신 사용합니다.

파싱 과정이 끝나면 다음과 같은 문서가 생성됩니다.

xml
<?xml 버전="1.0"?>
<outerElement>
루트:x: 0:0:루트: /루트: /usr/bin/zsh
데몬:x: 1:1:데몬: /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; '로 비활성화)
  • XML 텍스트 리더 ('XMLTextReader.금지DTD = true; '로 비활성화)
  • XPath Navigator

태그라인

Secure coding made practical

Explore secure coding guidelines to understand and mitigate software vulnerabilities like the OWASP Top 10, and dive into guided training Missions to practices in real-world app simulations.

more guidelines
book a demo