RSS 프로젝트 제로

Gregor Samsa: 자바의 XML 서명 검증을 악용하는 것

자바의 표준 라이브러리는 신뢰할 수 없는 XSLT 프로그램을 처리하기 위한 JIT 컴파일러를 숨겨두고 있습니다. 이 취약점, CVE-2022-34169은 JIT 컴파일러의 정수 절단 버그로 인해 발생했습니다. 이는 자바 기반 웹 애플리케이션과 SAML 싱글 사인온을 지원하는 아이덴티티 제공자에서 임의의 코드 실행을 허용합니다. XML 서명은 웹 애플리케이션에서 사용자 인증을 위한 표준인 SAML에서 널리 사용됩니다. SAML은 서비스 제공자(애플리케이션)와 아이덴티티 제공자(IdP) 간의 XML 문서 교환을 포함합니다. XML 서명은 이러한 문서의 무결성을 보장합니다. XML 서명을 확인하려면 애플리케이션이 공격자 제어 변환을 공격자 제어 입력에 대해 실행해야 합니다. 이러한 변환 중 하나는 XSLT, 강력한 XML 프로그래밍 언어입니다. 자바의 XSLT 구현은 XSLT 프로그램을 실행하기 위해 JIT 컴파일러를 사용합니다. 그러나 이 JIT 컴파일러에는 임의의 코드 실행을 얻기 위해 악용될 수 있는 정수 절단 버그가 있었습니다. 이 취약점은 2022년 7월에 OpenJDK와 2022년 9월에 Apache BCEL에 대해 패치되었습니다. 이 특정 문제는 해결되었지만 연구원들은 XML 서명 검증의 내재된 복잡성으로 인해 SAML에서 유사한 취약점이 발생할 것으로 예상합니다. 이 취약점은 C 또는 C++ 코드베이스의 메모리 안전성 문제보다 빈도가 낮지만 메모리 안전 언어 취약점의 존재를 강조합니다. XML 서명의 검증 과정은 두 단계로 구성됩니다. 참조 검증과 서명 검증입니다. 자바에서 서명 검증은 참조 검증 전에 수행되므로 공격자는 서명 검증 요구 사항을 우회할 수 있습니다. XSLT 변환은 XML 서명에 포함될 수 있으며 검증자가 참조된 XML 데이터에 XSLT 프로그램을 실행해야 합니다. 이는 외부 공격자에게 잠재적인 공격 표면을 열어줍니다. 자바의 XSLT 검증 구현은 취약한 JIT 컴파일러를 포함하는 Apache BCEL 라이브러리를 호출합니다. 이 취약점은 SAML을 사용하여 인증에 의존하는 자바 애플리케이션에서 악용될 수 있었습니다.
favicon
googleprojectzero.blogspot.com
Gregor Samsa: Exploiting Java's XML Signature Verification
Create attached notes ...