안전하지 않은 XML Parser

Insecure XML Parser

설명

불안전한 XML 파서는 외부 엔터티 참조(XML External Entity, XXE) 공격, 무한 루프 공격, 대규모 XML(payload) 공격 등을 허용할 수 있는 취약성을 가지고 있습니다. 이러한 취약성은 민감한 데이터 유출, 서비스 거부(DoS) 등의 심각한 보안 문제를 초래할 수 있습니다.

잠재적 영향

  • 데이터 유출: 공격자가 외부 엔터티를 통해 민감한 데이터를 유출할 수 있습니다.

  • 서비스 거부: 대규모 XML 또는 무한 루프 공격으로 인해 서버 자원이 소진되어 서비스가 중단될 수 있습니다.

  • 코드 실행: 잘못된 XML 파싱으로 인해 원격 코드 실행이 발생할 수 있습니다.

해결 방법

  • 안전한 XML 파싱 설정: XML 파서를 안전하게 구성하여 외부 엔터티 참조를 비활성화합니다.

  • 입력값 검증: XML 데이터를 파싱하기 전에 철저히 검증합니다.

  • 최신 라이브러리 사용: 알려진 취약점이 없는 최신 XML 파싱 라이브러리를 사용합니다.

취약한 코드 및 안전한 코드 예시

Unsafe XML parsing in Python with lxml & Safe XML parsing with defusedxml

# Unsafe XML parsing with lxml
from lxml import etree

def unsafe_parse(xml_string):
    root = etree.fromstring(xml_string)
    return root

xml_data = """<?xml version="1.0"?>
<!DOCTYPE root [
<!ELEMENT root ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>&xxe;</root>"""
root = unsafe_parse(xml_data)

설명:

  • 취약한 코드: lxml 파서로 XML 데이터를 파싱할 때 외부 엔터티 참조가 허용되어 XXE 공격에 취약합니다.

  • 안전한 코드: defusedxml 모듈을 사용하여 외부 엔터티 참조를 비활성화하고 안전하게 XML 데이터를 파싱합니다.

Unsafe XML parsing in Python with ElementTree & Safe XML parsing with defusedxml

설명:

  • 취약한 코드: ElementTree 파서로 XML 데이터를 파싱할 때 외부 엔터티 참조가 허용되어 XXE 공격에 취약합니다.

  • 안전한 코드: defusedxml 모듈을 사용하여 외부 엔터티 참조를 비활성화하고 안전하게 XML 데이터를 파싱합니다.

참조

Last updated