XML 외부 개체(XML External Entity, XXE) 취약점
Improper Restriction of XML External Entity Reference ('XXE')
설명
XML 외부 개체(XXE) 취약점은 XML 파서가 외부 개체를 처리할 수 있도록 설정되어 있을 때 발생합니다. 공격자는 이를 악용하여 원격 파일을 읽거나, 네트워크 요청을 수행하거나, 서비스 거부(DoS) 공격을 유발할 수 있습니다.
특히, XMLReaderFactory.createXMLReader()를 사용할 경우 기본적으로 보안 기능이 비활성화되어 있어 XXE 공격에 취약합니다.
잠재적 영향
파일 유출: 시스템 내 민감한 파일(
/etc/passwd등)에 접근할 수 있습니다.서버 사이드 요청 변조(SSRF): 내부 네트워크로 요청을 보내거나 원치 않는 외부 서버와 통신할 수 있습니다.
서비스 거부(DoS): 대규모 엔티티 확장을 이용하여 서버 리소스를 소진시키는 공격을 수행할 수 있습니다.
해결 방법
SAXParserFactory를 사용하고 보안 설정 적용SAXParserFactory를 사용하여 XML 파싱을 수행하고, 외부 개체 처리를 비활성화합니다.
FEATURE_SECURE_PROCESSING활성화XMLConstants.FEATURE_SECURE_PROCESSING을true로 설정하여 보안 기능을 강화합니다.
DTD 및 외부 개체 처리 비활성화
http://apache.org/xml/features/disallow-doctype-decl설정을 통해<!DOCTYPE>선언을 차단합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드:
XMLReaderFactory.createXMLReader()를 사용하며, 외부 개체 처리를 비활성화하지 않아 공격자가 악성 XML을 삽입할 수 있습니다.
안전한 코드:
SAXParserFactory를 사용하여 보안 기능을 활성화(FEATURE_SECURE_PROCESSING)하고,DOCTYPE선언을 차단(disallow-doctype-decl)하여 XXE 공격을 방어합니다.
참조
Last updated