XSLT 변환 취약점 (Xslt Injection)
XML Injection (aka Blind XPath Injection)
설명
XSLT(Extensible Stylesheet Language Transformations)는 XML 데이터를 변환하는 데 사용됩니다. 애플리케이션이 사용자 입력을 기반으로 XSLT 변환을 수행하면 공격자가 악성 XSL 스타일시트를 주입하여 보안 취약점을 악용할 수 있습니다. 특히, XSLT 함수 호출, 외부 개체(XXE) 공격, 파일 탈취, 임의 코드 실행 등의 보안 위협이 발생할 수 있습니다.
잠재적 영향
임의 코드 실행: XSLT는 Java 함수를 호출할 수 있어 공격자가 원격 코드 실행(RCE)을 유발할 수 있습니다.
파일 탈취:
document()함수를 이용하여 시스템 내 민감한 파일을 읽을 수 있습니다.서버 사이드 요청 변조(SSRF): 악성 XSLT를 통해 내부 네트워크로 요청을 보내거나 외부 서버와 연결할 수 있습니다.
해결 방법
사용자 입력 기반 XSLT 처리 금지
사용자 입력으로 전달된 XSLT를 실행하지 않도록 설계해야 합니다.
FEATURE_SECURE_PROCESSING활성화TransformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true)설정을 적용하여 보안 기능을 강화합니다.
미리 정의된 안전한 XSLT 파일만 사용
신뢰할 수 있는 XSLT 파일만 처리하고, 동적으로 변경되지 않도록 제한합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드:
args[0]을 통해 사용자 입력을 받아 XSLT 파일을 로드하여 실행.공격자가 악성 XSL 파일을 제공하면 시스템 파일을 탈취하거나 원격 코드 실행(RCE)을 유발할 수 있음.
안전한 코드:
FEATURE_SECURE_PROCESSING을 활성화하여 보안 설정 강화.사용자 입력을 기반으로 XSLT를 실행하지 않고, 사전에 정의된 안전한 파일만 사용.
참조
Last updated