XXE(XML External Entity) 취약점을 정리해줄게.
항상처럼 개념 → 공격 원리 → 공격 예시 → 공격 목표 → 대응 방법(WAF/개발) 순서로 설명할게.
🔥 1. XXE(XML External Entity)란?
정의:
XXE는 XML 파서가 외부 엔티티(External Entity)를 허용할 때, 공격자가 악의적인 엔티티를 삽입하여 서버 내부 파일을 읽거나, 내부망 요청을 보내거나, DoS를 일으키는 공격이야.
쉽게 말하면:
👉 XML 안에 몰래 “내부 파일 읽어!” 같은 명령을 넣어서 서버에게 시키는 공격
🔹 2. 공격 원리
서버가 다음과 같을 때 공격이 가능해짐:
- XML을 받아서 처리한다.
- XML Parser에서 **외부 엔티티(External Entity)**를 허용한다.
- 입력 검증이 없다.
구조:
서버가 이 XML을 파싱 → file:///etc/passwd 내용을 읽어서 XML에 넣음 → 유출!
🔹 3. 실무 공격 예시
✔ 1) 서버 내부 파일 읽기
→ 서버가 /etc/passwd 내용을 클라이언트에게 돌려줌.
✔ 2) SSRF 유발 (내부망 요청)
→ 내부 관리 페이지 접속 가능.
✔ 3) Windows 파일 읽기
✔ 4) OOB(Out-of-band) XXE
파일 내용이 서버에서 직접 리턴되지 않아도, 공격자 서버로 전송 가능.
공격자 DTD 파일:
→ 서버 내부 파일이 공격자 서버로 전송됨.
✔ 5) DoS 공격 (Billion Laughs Attack)
XML 엔티티를 폭발적으로 확장하게 하는 공격:
→ XML 파서가 메모리 폭주 → 서버 다운.
🔹 4. 공격자가 할 수 있는 일
- 내부 파일 읽기
- 내부망 스캐닝(SSRF)
- DB/관리자 페이지 접근
- 민감 정보 탈취
- 서버 메타데이터 접근
- DoS 공격
→ 웹 애플리케이션의 로컬 권한을 거의 그대로 사용할 수 있음
🔹 5. WAF / 보안관제 대응 포인트
✔ 1) XML 내부에 아래 패턴 탐지
- <!DOCTYPE
- <!ENTITY
- SYSTEM
- PUBLIC
- file://
- http://127.0.0.1
- php://filter 등
✔ 2) OOB XXE 탐지
서버가 갑자기 외부 IP로 XML 요청을 보내는 이상행위 모니터링.
✔ 3) 응답 패턴 분석
응답에 /etc/passwd, root:x:0:0: 등이 포함되면 고위험.
🔹 6. 개발 단계 방어
✔ 1) 외부 엔티티 사용 금지 (가장 중요)
XML Parser 설정에서 외부 엔티티 비활성화.
예: Java
Python (lxml)
✔ 2) DOCTYPE 선언 자체 차단
XML 입력에서 <!DOCTYPE 등장하면 에러 처리.
✔ 3) JSON으로 전환 (가능한 경우)
최근 API는 XML 대신 JSON 사용 → XXE 위험 감소.
✔ 4) 파일 접근 권한 최소화
웹 서버 계정이 민감 파일을 읽지 못하도록 chmod 제한.
🎯 한 문장 요약
XXE = XML 파서가 외부 엔티티를 허용할 때 발생하는 취약점으로, 내부 파일 읽기·내부망 접속·DoS까지 가능한 고위험 공격이다.
'2. 보안 > 2. 보안 관제' 카테고리의 다른 글
| [보안_GPT] Broken Access Control이란? (0) | 2025.11.14 |
|---|---|
| [보안_GPT] Broken Authentication이란? (0) | 2025.11.14 |
| [보안_GPT] SSRF(Server-Side Request Forgery)란? (0) | 2025.11.14 |
| [보안_GPT] RCE(Remote Code Execution) 란? (0) | 2025.11.14 |
| [보안_GPT] Directory Traversal 이란? (0) | 2025.11.14 |