
Ktor XXE 인젝션 개념 증명 (CVE-2023-45612)
영향: 외부 엔티티(XXE) 참조가 포함된 조작된 XML DTD를 통한 임의 파일 접근.
근본 원인: 안전하지 않은 XML 문서 파서.
이 저장소에는 외부 엔티티를 허용하도록 구성된 취약한 Ktor 2.3.4 앱이 포함되어 있어 XXE 효과를 확인할 수 있습니다.
XML 외부 엔티티 주입(CVE-2023-45612) 개념 증명을 위한 취약한 Ktor(v2.3.4) 애플리케이션입니다.
CVE-2023-45612는 XML이 활성화된 2.3.5 이전 버전의 Ktor ContentNegotiation에서 발생하는 XXE(XML 외부 엔티티) 버그입니다.
이 취약점은 CWE-611: XML 외부 엔티티 참조의 부적절한 제한에 매핑됩니다.
XXE는 OWASP Top 10 A05:2021-보안 오구성 위험 범주에 속하지만, 원인이 제한적이지 않은 XML 파서이므로 안전하지 않은 설계 문제이기도 합니다.
Ulf Karlsson이 보고함 — Jetbrains 보안 노트 참조.
2.3.5보다 오래된 Ktor 버전
문제를 재현하기 위해 사용한 제 설정은 다음과 같습니다:
XML 문서에는 선택적으로 DTD(문서 형식 정의)가 포함될 수 있으며, 이 DTD를 통해 다른 기능 중에서도 XML 엔티티를 정의할 수 있습니다. URI 형태의 대체 문자열을 제공하여 엔티티를 정의하는 것이 가능합니다. XML 파서는 이 URI의 내용에 접근하여 해당 내용을 XML 문서에 다시 삽입해 추가 처리할 수 있습니다.
file:// URI로 외부 엔티티를 정의하는 XML 파일을 제출함으로써, 공격자는 처리 중인 애플리케이션이 로컬 파일의 내용을 읽도록 만들 수 있습니다.
예를 들어, "file:///c:/winnt/win.ini"와 같은 URI는 (Windows에서) C:\Winnt\win.ini 파일을 지정하고, file:///etc/passwd는 Unix 계열 시스템의 암호 파일을 지정합니다.
(https://cwe.mitre.org/data/definitions/611.html)
POST 요청이 http://localhost:8080/xml 엔드포인트로 전송됩니다.
요청은 외부 엔티티가 참조되는 <!DOCTYPE> 요소를 포함하는 XML 파일 exploit/payloads/xxe-demo-file.xml을 보내며, 이 경우에는 exploit/etc/secret.txt입니다.
이는 프로세스가 접근할 수 있는 시스템의 다른 파일일 수도 있습니다.
xxe-demo-file.xml
<!DOCTYPE Mail [ <!ENTITY xxe SYSTEM "exploit/etc/secret.txt"> ]>
<Mail><title>&xxe;</title></Mail>
XML 파서(DTD 허용으로 구성됨)는 이 요소를 해석하고 리소스 데이터를 검색합니다.
외부 참조는 SSRF 엔드포인트에 대한 경로일 수도 있고, 시스템 리소스를 점유하기 위한 대용량 파일을 가리킬 수도 있습니다 (DoS).
./gradlew run
Responding at http://127.0.0.1:8080
curl -i http://localhost:8080/xml -H "Content-Type: application/xml" --data-binary @exploit/payloads/xxe-demo-file.xml
예상 결과 (취약한 경우):
콘솔 출력:
Received: <external entity data>
예상 결과 (안전한 경우):
400 Bad Request또는 이와 유사한 응답 (XML 파서가 DTD(문서 형식 정의)를 차단함)
실행 명령:

cURL로 XXE 페이로드를 전송하고, 주입된 파일 내용이 표시된 결과:

심각도는 높음/치명적입니다. 잠재적인 로컬 파일 검색, SSRF 공격, DoS 공격 또는 기타 시스템 영향이 발생할 수 있습니다.
NVD 기본 점수: 9.8 CRITICAL (CVSS v3) (https://nvd.nist.gov/vuln/detail/CVE-2023-45612)