RSS Проект Ноль

Грегор Замса: Эксплуатация проверки цифровой подписи XML в Java

Стандартная библиотека Java скрывает JIT-компилятор для обработки небезопасных программ XSLT. Это уязвимость, CVE-2022-34169, была вызвана ошибкой усечения целого числа в JIT-компиляторе. Она позволяет выполнять произвольный код в веб-приложениях на основе Java и провайдерах удостоверений, поддерживающих единый вход SAML. XML-цифровые подписи широко используются в SAML, стандарте для аутентификации пользователей в веб-приложениях. SAML включает обмен XML-документами между провайдером услуг (приложением) и провайдером удостоверений (IdP). XML-цифровые подписи обеспечивают целостность этих документов. Чтобы проверить XML-цифровые подписи, приложение должно запускать управляемые атакующим преобразования на управляемом атакующим вводе. Одним из таких преобразований является XSLT, мощный язык программирования XML. Реализация XSLT в Java использует JIT-компилятор для выполнения программ XSLT. Однако в этом JIT-компиляторе была ошибка усечения целого числа, которая могла быть эксплуатирована для получения произвольного выполнения кода. Уязвимость была исправлена в июле 2022 года для OpenJDK и в сентябре 2022 года для Apache BCEL. Хотя эта конкретная проблема решена, исследователи ожидают похожих уязвимостей в SAML из-за внутренней сложности валидации XML-цифровых подписей. Это уязвимость подчеркивает существование уязвимостей языка, безопасного для памяти, несмотря на меньшую частоту по сравнению с проблемами безопасности памяти в кодовых базах C или C++. Процесс валидации XML-цифровых подписей состоит из двух этапов: валидации ссылок и валидации подписи. В Java валидация подписи выполняется перед валидацией ссылок, что позволяет атакующим обойти требования валидации подписи. Преобразования XSLT могут быть встроены в XML-цифровые подписи, требуя от верификатора запуска программы XSLT на ссылочных XML-данных. Это открывает потенциальную поверхность атаки для внешних атакующих. Реализация валидации XSLT в Java вызывает библиотеку Apache BCEL, которая содержит уязвимый JIT-компилятор. Эта уязвимость могла быть эксплуатирована в приложениях Java, которые полагаются на SAML для аутентификации.
favicon
googleprojectzero.blogspot.com
Gregor Samsa: Exploiting Java's XML Signature Verification