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 для аутентификации.