2018년에, Duo Security 는 SAML 기반 SSO(Single Sign-On) 시스템에 영향을 끼치는 새로운 취약점 클래스를 발견했고, 이로 인해 다음의 취약성 (CVE-2017-11427, CVE-2017-11428, CVE-2017-11429, CVE-2017-11430, CVE-2018-0489, CVE-2018-7340) 이 공개되었습니다.
특수하게 조작된
이것은 SAML 프로토콜이 XML 포맷에 의존하고, 기본 XML 파서가 XML 구문을 해석하는 방식 때문입니다.
공격자가 인증된 사용자를 식별하는
아래는 잠재적인 위험을 가진 payload 의 예시 입니다:
<SAMLResponse>
[...]
<Subject>
<NameID>admin@domain.com<!---->.evil.com</NameID>
</Subject>
[...]
</SAMLResponse>
공격자는 “admin@domain.com.evil.com” 계정으로 유효한
규칙을 어긴 코드
import org.opensaml.xml.parse.BasicParserPool;
import org.opensaml.xml.parse.ParserPool;
import org.opensaml.xml.parse.StaticBasicParserPool;
public ParserPool parserPool() {
StaticBasicParserPool staticBasicParserPool = new StaticBasicParserPool();
staticBasicParserPool.setIgnoreComments(false); // 규칙을 어긴 코드: 구문 분석 중에 취약점을 악용할 수 있는 여지를 주는 주석이 무시되지 않습니다.
return staticBasicParserPool;
}
public ParserPool parserPool() {
BasicParserPool basicParserPool = new BasicParserPool();
basicParserPool.setIgnoreComments(false); // 규칙을 어긴 코드
return basicParserPool;
}
규칙을 준수한 해결책
public ParserPool parserPool() {
return new StaticBasicParserPool(); // 규칙을 준수한 코드: StaticBasicParserPool 생성자를 통해 "ignoreComments" 가 "true" 로 설정됩니다.
}
public ParserPool parserPool() {
return new BasicParserPool(); // 규칙을 준수한 코드: BasicParserPool 생성자를 통해 "ignoreComments" 가 "true" 로 설정됩니다.
}
참고
- OWASP Top 10 2021 Category A6 - Vulnerable and Outdated Components
- OWASP Top 10 2021 Category A7 - Identification and Authentication Failures
- OWASP Top 10 2017 Category A2 - Broken Authentication
- OWASP Top 10 2017 Category A9 - Using Components with Known Vulnerabilities
- Duo Finds SAML Vulnerabilities Affecting Multiple Implementations
- Spring Security SAML and this week’s SAML Vulnerability
- Spring Security SAML: Issue #228
If you like SONARKUBE, don’t forget to give me a star.