
이번 주 Mattermost는 Golang과 협력하여 Go language XML 파서의 3가지 주요 취약점을 공개했다.
취약점이 악용될 경우, 취약점들은 여러 Go 기반 SAML 구현에도 영향을 미치기 때문에 SAML 인증이 완전히 우회되어 주요 웹 애플리케이션의 성능을 향상할 수 있다.
XML parser doesn't guarantee integrity
아래에 나열된 XML 취약점은 XML 입력을 인코딩 및 디코딩할 때 신뢰할 수 있는 결과를 반환하지 않는 Golang의 XML 언어 파서 encoding/XML에 있다.
이는 파서를 사용하여 인코딩 및 디코딩할 때 XML 마크업이 일관되지 않고 예상치 못한 결과를 반환할 수 있음을 의미한다.
CVE-2020-29509: XML attribute instability in Go’s encoding/xml
CVE-2020-29510: XML directive instability in Go’s encoding/xml
CVE-2020-29511: XML element instability in Go’s encoding/xml
Mattermost의 제품 보안 엔지니어인 Juho Nurminen은 "제목에서 알 수 있듯이 취약점은 밀접한 관련이 있다. 핵심 문제는 세 가지 모두에서 동일하다. 악의적으로 제작된 XML 마크업은 Go의 디코더와 인코더 구현을 통해 왕복하는 동안 변한다."라고 말했다.
그는 또한 "애플리케이션에서 XML을 처리하는 동안 적어도 하나의 선행 구문 분석 및 직렬화 라운드의 출력인 구문 분석 마크업을 구문 분석하는 경우 더 해당 구문 분석 출력이 이전 라운드의 출력과 일치한다고 가정할 수 없다. 다시 말해, XML을 Go의 디코더와 인코더를 통해 전달하는 것은 그 의미를 보존하지 못한다."라고 설명했다.
이 취약성에 대한 부분 수정 중 하나는 이러한 결함으로 인해 XML 구문 분석 중에 발생할 수 있는 불일치를 보여준다.
Complete SAML authentication bypass possible
언뜻 보기에는 이것이 사소한 버그처럼 보일 수 있지만, Mattermost는 여러 애플리케이션이 의미론적 무결성을 기대하며 이러한 취약점들이 심각한 결과를 초래할 수 있다고 강조한다.
예를 들어, 해당 XML 파서에 의존하는 다양한 SAML 구현은 공격자가 SAML 인증을 모두 무시하도록 속일 수 있다.
SAML(Security Assertion Markup Language)은 XML을 사용하는 온라인 로그인을 용이하게 하기 위해 여러 유명 웹 사이트 및 서비스에서 사용하는 웹 인증 표준이다.
Matermost는 "이러한 취약성으로 인해 Go 기반 SAML 구현은 많은 경우에 공격자가 조작할 수 있다. 올바르게 서명된 SAML 메시지에 악의적인 마크업을 주입함으로써 이 메시지가 여전히 올바르게 표시되도록 할 수는 있지만, 원본 문서와 다른 ID를 전달하도록 변경할 수는 있다."라고 경고했다.
미션 크리티컬 애플리케이션이 XML 파서를 사용하는 경우, 애플리케이션이 취약한 XML 파서를 사용하는 방식에 따라 SAML SSO 시스템 내의 영향력은 권한 상승 또는 인증 우회가 될 수 있다.
No patch available for the parser itself
현재 Go 보안 팀은 이러한 취약점을 적절히 해결할 수 있는 패치가 없다고 조언했다.
또한 위에서 설명한 수정 커밋은 왕복 안정성이 encoding/xml의 지원되는 보안 속성이 아니며, 수정만으로는 XML 구문 분석 신뢰성을 보장할 수 없다고 명시했다.
그러나 개별 Go 기반 SAML 프로젝트에는 다음과 같은 수정 버전이 출시되었다.
Dex IDP version 2.27.0
github.com/crewjam/saml version 0.4.3
github.com/russellhaering/gosaml2 version 0.6.0
또한 Mattermost는 애플리케이션에 XML 유효성 검사를 통합할 때 해결 방법으로 사용할 수 있는 "xml-roundtrip-validator" 도구를 제공하기도 했다.
출처
https://www.bleepingcomputer.com/news/security/critical-golang-xml-parser-bugs-can-cause-saml-authentication-bypass/