SAML 인증 우회 취약점 (SAML Ignore Comments)

Weak Authentication due to SAML XML Comment Processing

설명

SAML(Security Assertion Markup Language)은 XML 기반의 인증 및 권한 부여 시스템입니다. org.opensaml.xml.parse.BasicParserPoolsetIgnoreComments(false)를 호출하면, XML 문서 내의 주석(<!-- -->)을 처리하게 되어 공격자가 이를 악용하여 인증 우회를 시도할 수 있습니다. 특히, 공격자는 SAML 토큰 내의 Subject 또는 Username 필드를 주석을 삽입하여 분할할 수 있으며, 이로 인해 인증 검증이 우회될 수 있습니다.

잠재적 영향

  • 인증 우회: SAML 토큰 내의 필드를 조작하여 특정 사용자로 인증될 수 있음.

  • 권한 상승: 공격자가 다른 사용자의 세션을 가로채거나 관리자 계정으로 인증될 가능성이 있음.

  • SAML 변조 공격: 주석을 이용하여 서명되지 않은 SAML 어설션을 삽입할 수 있음.

해결 방법

  1. XML 주석을 무시하도록 설정 유지 (setIgnoreComments(true))

    • BasicParserPool 객체에서 setIgnoreComments(false)를 호출하지 않도록 합니다.

    • 기본적으로 ignoreComments 값은 true이며, 이는 안전한 설정입니다.

  2. SAML 토큰 검증 강화

    • XML Signature를 사용하여 변조 방지 검증을 수행합니다.

    • 서명된 어설션만 신뢰하고, 서명이 없는 경우 인증을 거부합니다.

  3. 정확한 사용자 검증 수행

    • SAML 응답에서 주석이 포함된 경우 무시하고, 명확한 사용자 식별 값을 사용합니다.

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

취약한 코드

안전한 코드

설명:

  • 취약한 코드:

    • setIgnoreComments(false)를 설정하면 XML 문서 내 주석이 처리되어 SAML 변조 공격이 가능해짐.

  • 안전한 코드:

    • setIgnoreComments(true)를 유지하여 XML 주석을 무시함으로써 공격을 방지.

참조

Last updated