SAML Injection

Introduction

SAML Injection은 Security Assertion Markup Language (SAML) 에서 발생할 수 있는 Injection 공격을 의미합니다. SAML Process에서 XML 구문 내 공격코드를 통해 SSO 등 인증 과정을 우회하거나 Signature 검증을 통과할 수 있습니다.

Offensive techniques

Detect

SAML을 이용한 SSO 등 SAML 사용 구간은 모두 점검의 대상이됩니다. 기본적으로 Signature 검증에 대한 체크를 진행하며, XSW(XML Signature Wrapping) Attack 등으로 SAML Response/Assertion 메시지에 값을 추가하거나 변조하여 서버의 반응을 보고 체크할 수 있습니다.

<?xml version="1.0"?>
<md:EntityDescriptor entityID="private-service">
  <md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://private-service/saml/consume" index="0"/>
  </md:SPSSODescriptor>
</md:EntityDescriptor>

SAML in ZAP/Burp

ZAP, Burpsuite에선 각각 SAML Support, SAML Raider란 Addon을 통해 SAML 포맷의 데이터를 쉽게 편집하고 테스트할 수 있습니다.

ZAP - SAML Support

Invalid Signature

Signature가 실제 CA에 의해 서명되었는지 확인합니다. 혹시나 인증서가 자체 서명된 경우 인증서를 복제하거나 자체 서명 인증서를 생성하여 대체할 수 있습니다.

Signature Stripping

SAML SSO의 일부 구성에서 Signature section을 임의로 response에서 제거했을 때 Signature verification이 생략되기도 합니다.

XSW Attacks

SAML의 Response나 Assertion을 조작하여 의도하지 않은 동작을 유도할 수 있습니다.

<SAMLResponse>
  <FA ID="evil">
      <Subject>Attacker</Subject>
  </FA>
  <LA ID="admin">
      <Subject>Admin User</Subject>
      <LAS>
         <Reference Reference URI="admin">
         </Reference>
      </LAS>
  </LA>
</SAMLResponse>
Type Message Description
XSW1 Response 기존 서명 뒤에 서명되지 않은 Response copy를 추가합니다.
XSW2 Response 기존 서명 앞에 서명되지 않은 Response copy를 추가합니다.
XSW3 Assertion 기존 Assertion 앞에 서명되지 않은 Assertion copy을 추가합니다.
XSW4 Assertion 기존 어설션 내에 서명되지 않은 Assertion copy을 추가합니다.
XSW5 Assertion Assertion의 서명된 Copy에서 값을 변경하고 SAML 메시지 끝에 서명이 제거된 원본 Assertion의 Copy를 추가합니다.
XSW6 Assertion Assertion의 서명된 Copy에서 값을 변경하고 원래 서명 뒤에 서명이 제거된 원본 Assertion의 Copy를 추가합니다.
XSW7 Assertion 서명되지 않은 Assertion에 “Extensions” 블록을 추가합니다.
XSW8 Assertion 서명이 제거된 원본 Assertion의 Copy에 들어 있는 “Object” 블록을 추가합니다.

Exploitation

Broken SSO

SAML은 주로 SSO(Single Sign-On)에서 많이 사용됩니다. SAML 기반의 SSO에서 SAML Injection으로 Authentication Bypass가 되는 경우 계정 탈취나 권한 도용이 발생할 수 있습니다.

XXE

SAML은 XML 포맷을 사용하기 때문에 서비스 구성에 따라 XXE에 취약할 수 있습니다. XXE에 대한 자세한 내용은 Cullinan > XXE를 참고해주세요.

Defensive techniques

SAML SSO 등 SAML 사용 시 보안에 유의하여 사용해야합니다. 자세한 내용은 OWASP 가이드를 참고하시기 바랍니다.

Tools

References

  • https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SAML%20Injection
  • https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/SAML_Security_Cheat_Sheet.md