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 포맷의 데이터를 쉽게 편집하고 테스트할 수 있습니다.
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