XML 외부 개체(XXE)

XML 외부 개체(XXE)

설명

XML 파서가 외부 엔터티나 외부 DTD를 로드하도록 설정되면 공격자가 로컬 파일이나 내부 네트워크 자원을 읽게 만들 수 있습니다.

잠재적 영향

  • 파일 노출, SSRF, 서비스 거부가 발생할 수 있습니다.

해결 방법

외부 엔터티 확장과 외부 DTD 로딩을 비활성화하세요. libxml2 2.13.0 이상에서는 XML_PARSE_NO_XXE로 외부 DTD와 엔터티 로딩을 차단할 수 있습니다. 사용자 정의 리소스 로더도 신뢰할 수 없는 외부 접근을 허용하지 않도록 설정하세요.

예시

변경 전

c
xmlReadMemory(buf, size, NULL, NULL, XML_PARSE_NOENT | XML_PARSE_DTDLOAD);

변경 후

c
xmlReadMemory(buf, size, NULL, NULL, XML_PARSE_NONET);

설명:

  • 변경 전: 외부 엔터티 확장과 DTD 로딩을 허용합니다.
  • 변경 후: XML_PARSE_NOENT와 XML_PARSE_DTDLOAD를 제거합니다. XML_PARSE_NONET만으로 로컬 파일 접근을 차단하지는 않으며, libxml2 2.15부터는 내장 네트워크 클라이언트가 없어 사용자 정의 로더가 이 옵션을 처리해야 합니다.

참조