설명
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부터는 내장 네트워크 클라이언트가 없어 사용자 정의 로더가 이 옵션을 처리해야 합니다.