Десятки уязвимостей в библиотеках Java открывают путь к отказу в обслуживании IBM Sterling External Authentication Server

IBM Sterling

IBM Sterling External Authentication Server в версиях с 6.1.1.0 по 6.1.1.4 несёт в себе несколько десятков уязвимостей, и почти все они пришли из сторонних библиотек на Java. Исправление собрано в версии 6.1.1.5. Речь о серверном компоненте, который отвечает за внешнюю проверку подлинности пользователей в решениях IBM Sterling, то есть постоянно работает с данными из недоверенных источников. Часть проблем позволяет обойти проверку сертификатов, часть ведёт к отказу в обслуживании. И того и другого атакующий добивается по сети, без учётной записи и без действий со стороны пользователя продукта. Сведений об эксплуатации в реальных атаках публикация не содержит.

Детали уязвимостей

Больше всего записей относится к криптографической библиотеке Bouncy Castle. Точка в конце имени в почтовом поле или в адресе ресурса внутри сертификата обходит ограничения, которые удостоверяющий центр задаёт для выпускаемых документов. Прикреплённый ответ OCSP (протокол проверки статуса сертификата) библиотека принимает, не убедившись, что он относится именно к проверяемому сертификату. Согласование ключей по схеме MTI/A0 возводит в степень значение, полученное от второй стороны и никак не проверенное. Все три уязвимости оцениваются в 9.1 по шкале CVSS, и каждая открывает путь к подмене узла в защищённом соединении. Рядом стоят дефекты проверки целостности. Режимы семейства CCM записывают расшифрованный текст в буфер вызывающей стороны раньше, чем сверят имитовставку, то есть значение, подтверждающее неизменность сообщения. В режиме KCCM одноразовый номер не привязывается к сообщению, когда дополнительных данных нет. Функция проверки подписей в контейнерах CMS возвращает успех для набора, в котором нет ни одного подписанта. Отдельная группа уязвимостей связана с ресурсами: разбор структур OER и ASN.1 идёт без ограничения глубины, число итераций в PBES2, PKCS#12, CRMF/CMP и OpenPGP не ограничено сверху, а память выделяется по длине, взятой из непроверенного файла или пакета. Ещё один дефект касается стирания ключевого материала в FIPS-сборке: оно выполнялось при сборке мусора, а на современных виртуальных машинах Java очередь необработанных объектов растёт без предела. Ключи остаются в памяти дольше, чем задумано, и при нагрузке приложение может исчерпать её.

Уязвимости библиотек Jackson образуют вторую крупную группу. При разборе JSON они дают возможность заставить приложение обратиться по DNS-имени, которое выбрал атакующий, и попутно составить карту внутренней сети. Строка, подставленная в поле продолжительности или календарной даты, вынуждает среду исполнения считать по квадратичному алгоритму: нескольких мегабайт текста хватает, чтобы занять поток на десятки секунд. В неблокирующем парсере обойдено ограничение на длину числа, и память накапливается десятками мегабайт на соединение. Есть и обходы прикладных запретов. Список разрешённых классов при полиморфном разборе данных не проверяет вложенные типы, если контейнер в списке есть. Настройки, запрещающие запись поля или ограничивающие его видимость, в ряде версий не мешают присвоить значение из чужого JSON. Показательная деталь: в перечне небезопасных базовых типов не оказалось интерфейса Comparable, который реализует огромное число классов стандартной библиотеки и прикладного кода.

К встроенному веб-серверу Jetty относится расхождение в разборе HTTP-запросов. Одиночный перевод строки вместо положенной пары символов в блоке с фрагментированной передачей заставляет Jetty и промежуточный прокси по-разному определять границы запроса - оценка 8.3. Другой дефект приводит к тому, что заголовки-трейлеры первого запроса остаются видны последующим запросам на том же соединении, и служебные данные утекают наружу. Заметная уязвимость кроется в серверной части Digest-аутентификации. Пароль с символами вне набора Latin-1 кодируется с потерями, скажем греческие буквы превращаются в вопросительные знаки, и подделанный заголовок с одними вопросительными знаками совпадёт с любым паролем той же длины. Оценка 9.1, поскольку последствия включают и доступ к данным, и отказ в обслуживании.

Остальные записи разбросаны по десятку компонентов. Парсер JSON Eclipse Parsson до версии 1.1.8 не ограничивал объём документа, и злоумышленник мог вынудить приложение прочитать миллионы символов; теперь по умолчанию действует предел в 15 миллионов. Log4j вплоть до 2.26.0 помещает в JSON значения NaN и Infinity, которых стандарт формата не допускает, и ломает разбор журнала на принимающей стороне. Библиотека form-data подставляла имена полей и файлов в заголовок Content-Disposition без экранирования переводов строки, поэтому через имя поля можно добавить собственные заголовки или целую часть формы и, к примеру, выставить признак администратора. В библиотеке axios нашли рекурсию при разборе имён полей FormData, чтение унаследованных свойств объекта при уже испорченной цепочке прототипов и обход правила NO_PROXY для адреса 0.0.0.0. Клиентам на Java SE адресованы 14 исправлений Oracle, среди них отказ в обслуживании и доступ к защищённым данным. В Eclipse OpenJ9 исполнение может уйти в метод интерфейса по умолчанию там, где ожидался код суперкласса, - 9.6 по CVSS, - а трассировка аргументов методов приводит к чтению за границей буфера. В Little CMS нашлось целочисленное переполнение при разборе цветовых таблиц.

Закрывается всё одной установкой: нужна версия 6.1.1.5, доступная на Fix Central, сервисе загрузки исправлений IBM. Обходных путей вендор не предлагает. Если те же библиотеки используются в других проектах организации, обновлять их придётся отдельно: Jackson - до 2.18.10, 2.21.6, 2.22.2, 3.1.6 или 3.2.2, Bouncy Castle - до 1.85 и LTS 2.73.12, axios - до 1.18.0 или 0.33.0, form-data - до 4.0.6.

Список показывает, как выглядит зависимость от чужого кода. Собственных уязвимостей у Sterling External Authentication Server в публикации нет, зато продукт наследует долги Jackson, Bouncy Castle, Jetty и остальных библиотек разом. Один пакет исправлений закрывает десятки уязвимостей, однако следующая партия придёт вместе с очередным обновлением зависимостей. Организациям, которые держат такой сервер в своём контуре, полезно заранее знать, какие библиотеки и каких версий в него входят: тогда масштаб очередного бюллетеня можно оценить быстрее.

Ссылки

Комментарии: 0