설명
SAML 처리에서 XML 주석이 텍스트를 나누고 애플리케이션이 NameID 등의 일부 텍스트만 사용자 식별자로 읽으면, 서명 검증에 사용한 값과 실제 로그인 계정이 달라질 수 있습니다. 주석을 제외하는 정규화 방식에서는 주석 추가 후에도 서명이 유효할 수 있습니다. 이는 주석만으로 서명 없는 어설션이 신뢰된다는 뜻은 아닙니다.
잠재적 영향
- 취약한 사용자 식별 처리에서 다른 계정으로 로그인
- 잘못 선택된 계정의 데이터나 기능에 접근
해결 방법
- 지원되는 SAML 라이브러리를 사용하고 주석을 포함한 입력의 식별자 해석을 확인하세요. 서명으로 검증한 어설션에서 완전한 식별자 값을 읽어야 합니다.
- 실제 SAML 처리에 쓰이는 XML 파서에서 주석을 무시하도록 구성하세요.
setIgnoreComments(true)는 보조 설정이며 전체 인증 검증을 대체하지 않습니다. - 신뢰하는 IdP의 키로 서명을 검증하고, 발급자·대상 서비스·수신자·유효 시간과 해당 흐름에 필요한 요청 연계를 확인하세요.
예시
다음은 기존 OpenSAML 2 계열의 org.opensaml.xml.parse.BasicParserPool 설정 발췌입니다. 파서 초기화와 실제 SAML 처리기에 연결하는 코드는 생략했습니다. 사용하는 버전의 API와 보안 구성에 맞춰 적용하세요.
변경 전
java
import org.opensaml.xml.parse.BasicParserPool;
public class InsecureSAMLConfig {
public void configureParser() {
BasicParserPool parserPool = new BasicParserPool();
parserPool.setIgnoreComments(false); // XML 주석을 보존
}
}
변경 후
java
import org.opensaml.xml.parse.BasicParserPool;
public class SecureSAMLConfig {
public void configureParser() {
BasicParserPool parserPool = new BasicParserPool();
parserPool.setIgnoreComments(true); // XML 주석을 무시; 별도의 SAML 검증도 필요
}
}
변경 전에는 주석을 보존하고, 변경 후에는 파싱 과정에서 주석을 무시하도록 설정합니다. 이 설정만으로 모든 SAML 인증 우회를 방지하지는 않습니다.