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를 통해 내부 네트워크로 요청을 보내거나 외부 서버와 연결할 수 있습니다.

해결 방법

  1. 사용자 입력 기반 XSLT 처리 금지

    • 사용자 입력으로 전달된 XSLT를 실행하지 않도록 설계해야 합니다.

  2. FEATURE_SECURE_PROCESSING 활성화

    • TransformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true) 설정을 적용하여 보안 기능을 강화합니다.

  3. 미리 정의된 안전한 XSLT 파일만 사용

    • 신뢰할 수 있는 XSLT 파일만 처리하고, 동적으로 변경되지 않도록 제한합니다.

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

취약한 코드

안전한 코드

설명:

  • 취약한 코드:

    • args[0]을 통해 사용자 입력을 받아 XSLT 파일을 로드하여 실행.

    • 공격자가 악성 XSL 파일을 제공하면 시스템 파일을 탈취하거나 원격 코드 실행(RCE)을 유발할 수 있음.

  • 안전한 코드:

    • FEATURE_SECURE_PROCESSING을 활성화하여 보안 설정 강화.

    • 사용자 입력을 기반으로 XSLT를 실행하지 않고, 사전에 정의된 안전한 파일만 사용.

참조

Last updated