XML 외부 개체(XML External Entity, XXE) 취약점

Improper Restriction of XML External Entity Reference ('XXE')

설명

XML 외부 개체(XXE) 취약점은 XML 파서가 외부 개체를 처리할 수 있도록 설정되어 있을 때 발생합니다. 공격자는 이를 악용하여 원격 파일을 읽거나, 네트워크 요청을 수행하거나, 서비스 거부(DoS) 공격을 유발할 수 있습니다. 특히, XMLReaderFactory.createXMLReader()를 사용할 경우 기본적으로 보안 기능이 비활성화되어 있어 XXE 공격에 취약합니다.

잠재적 영향

  • 파일 유출: 시스템 내 민감한 파일(/etc/passwd 등)에 접근할 수 있습니다.

  • 서버 사이드 요청 변조(SSRF): 내부 네트워크로 요청을 보내거나 원치 않는 외부 서버와 통신할 수 있습니다.

  • 서비스 거부(DoS): 대규모 엔티티 확장을 이용하여 서버 리소스를 소진시키는 공격을 수행할 수 있습니다.

해결 방법

  1. SAXParserFactory를 사용하고 보안 설정 적용

    • SAXParserFactory를 사용하여 XML 파싱을 수행하고, 외부 개체 처리를 비활성화합니다.

  2. FEATURE_SECURE_PROCESSING 활성화

    • XMLConstants.FEATURE_SECURE_PROCESSINGtrue로 설정하여 보안 기능을 강화합니다.

  3. DTD 및 외부 개체 처리 비활성화

    • http://apache.org/xml/features/disallow-doctype-decl 설정을 통해 <!DOCTYPE> 선언을 차단합니다.

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

취약한 코드

안전한 코드

설명:

  • 취약한 코드:

    • XMLReaderFactory.createXMLReader()를 사용하며, 외부 개체 처리를 비활성화하지 않아 공격자가 악성 XML을 삽입할 수 있습니다.

  • 안전한 코드:

    • SAXParserFactory를 사용하여 보안 기능을 활성화(FEATURE_SECURE_PROCESSING)하고, DOCTYPE 선언을 차단(disallow-doctype-decl)하여 XXE 공격을 방어합니다.

참조

Last updated