본문 바로가기 ← 메인

💉 XML 삽입 (XML Injection) - 실습 시뮬레이터

CWE-91: XML Injection (aka Blind XPath Injection)

✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ XML 구조 조작 위험 식별
  • ⬜ 5대 특수문자 이스케이프
✏️ Java 코드 에디터 취약한 코드
XmlService.java 💡 입력값의 특수문자를 replace하여 XML 구조 훼손을 방지하세요.
public String makeXml(String userInput) {
    // [취약한 코드] 입력값을 검증 없이 XML 문자열 생성에 사용
    // 공격자가 XML 태그를 포함한 문자열을 입력하면 구조가 변경될 수 있음
    String xml = "<user><name>" + userInput + "</name></user>";
    return xml;
}
💡 수정 가이드 (KISA 가이드 기준)
1. 특수문자 이스케이프

XML에서 의미를 가지는 문자(&, <, >, ", ')를 안전한 형태로 변환합니다.

userInput = userInput.replaceAll("&", "&") .replaceAll("<", "<") .replaceAll(">", ">") .replaceAll("\"", """) .replaceAll("'", "'"); String xml = "<user><name>" + userInput + "</name></user>";
📊 분석 결과 및 설명
🎯 목표

XML 데이터를 동적으로 생성할 때, 사용자 입력값에 포함된 메타문자에 의해 XML 구조가 변형되지 않도록 해야 합니다.

⚠️ 현재 취약점

XML Injection

입력값을 그대로 연결하면 공격자가 새로운 태그를 주입하거나 기존 구조를 닫아버리는 등의 조작이 가능합니다.

✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 취약점 식별
  • ⬜ escape 함수 사용
🐍 Python 코드 에디터 취약한 코드
xml_gen.py 💡 saxutils.escape()를 사용하세요
def create_xml(user_input):
    # [취약한 코드] 문자열 포맷팅으로 XML 생성
    # user_input에 true 등을 입력 시 구조 조작 가능
    return "<user><name>%s</name></user>" % user_input
💡 수정 가이드 (Python 가이드 기준)
1. saxutils.escape 사용

xml.sax.saxutils 모듈의 escape 함수를 사용하여 특수문자를 처리합니다.

from xml.sax.saxutils import escape return "<user><name>%s</name></user>" % escape(user_input)
📊 분석 결과 및 설명
🎯 목표

Python에서 XML을 다룰 때도 문자열 연결보다는 XML 처리 라이브러리나 이스케이프 함수를 사용해야 합니다.

⚠️ 현재 취약점

XML Injection

단순 문자열 치환은 XML의 정합성을 해치고 구조를 변조할 수 있는 위험이 있습니다.

📰 실제 사고사례 & 표준 매핑
XML 인젝션으로 질의·문서 구조가 변조돼 데이터 노출·우회가 발생했습니다.
🏷️ CWE-91 OWASP A03 Injection
※ 공개적으로 알려진 사례 기반 교육용 요약 · CWE/OWASP는 공개 표준 분류