📄 부적절한 XML 외부개체 참조 (XXE) - 실습 시뮬레이터

CWE-611: Improper Restriction of XML External Entity Reference

✅ 학습 진행도
  • 진단 시작
  • XXE 취약점 식별
  • setFeature로 엔티티 비활성화
✏️ Java 코드 에디터 취약한 코드
XmlParser.java 💡 setFeature를 사용하여 외부 개체 참조를 비활성화하세요.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

// [취약한 코드] 외부 엔티티 참조 기능을 비활성화하지 않음
// 악성 XML 파일 파싱 시 내부 시스템 파일 유출 가능
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xmlString)));
💡 수정 가이드 (KISA 가이드 기준)
1. DOCTYPE 선언 및 외부 엔티티 비활성화

파서 설정(setFeature)을 통해 외부 개체 참조를 막습니다.

try { factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); factory.setFeature("http://xml.org/sax/features/external-general-entities", false); factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); factory.setXIncludeAware(false); factory.setExpandEntityReferences(false); DocumentBuilder builder = factory.newDocumentBuilder(); // ... Parsing Logic ... } catch (ParserConfigurationException e) { // ... Error Handling ... }
📊 분석 결과 및 설명
🎯 목표

XML 파서가 신뢰할 수 없는 외부 DTD나 외부 엔티티를 처리하지 않도록 설정하여 XXE 공격을 방어해야 합니다.

⚠️ 현재 취약점

XXE (XML External Entity)

악의적인 XML 입력이 서버의 로컬 파일을 참조하거나 내부 네트워크를 스캔할 수 있습니다.

✅ 학습 진행도
  • 진단 시작
  • 취약점 식별
  • resolve_entities=False 적용
🐍 Python 코드 에디터 취약한 코드
xml_util.py (lxml) 💡 resolve_entities 옵션을 False로 설정하세요
from lxml import etree

def parse_xml(xml_string):
    # [취약한 코드] 기본 XMLParser는 외부 엔티티 참조를 허용할 수 있음
    parser = etree.XMLParser() 
    tree = etree.fromstring(xml_string, parser=parser)
    return tree
💡 수정 가이드 (Python 가이드 기준)
1. 엔티티 해석 비활성화

lxml 파서 생성 시 `resolve_entities=False` 옵션을 사용합니다.

# resolve_entities=False 로 외부 엔티티 참조 차단 parser = etree.XMLParser(resolve_entities=False) tree = etree.fromstring(xml_string, parser=parser)
📊 분석 결과 및 설명
🎯 목표

Python의 lxml 라이브러리 사용 시, 외부 엔티티 해석 기능을 명시적으로 꺼야 안전합니다.

⚠️ 현재 취약점

Insecure XML Parser Config

기본 설정된 파서는 XML 내의 외부 리소스 참조를 허용할 수 있습니다.