22 мая 2026 года исследователи из компании Aretiq AI раскрыли детали опасной уязвимости в Apache OFBiz - открытой ERP-системе (платформа для управления ресурсами предприятия). Проблема получила идентификатор CVE-2026-45434 и оценку 8,8 балла по шкале CVSS (система оценки критичности уязвимостей). Она затрагивает все версии до 24.09.06 включительно. Атака позволяет злоумышленнику с помощью одного HTTP-запроса получить полный контроль над сервером.
В чём суть уязвимости
Apache OFBiz используется для автоматизации бизнес-процессов - от учёта товаров до управления заказами. В системе реализован механизм принудительной смены пароля: администратор может установить для учётной записи флаг requirePasswordChange=Y, например после утечки учётных данных или при регистрации нового сотрудника. Такой аккаунт должен быть заблокирован для всех действий до тех пор, пока пользователь не сменит пароль.
Исследователи обнаружили, что метод LoginWorker.checkLogin() неправильно обрабатывает возвращаемое значение. Внутри этого метода проверяется строка "error". Если функция login() возвращает "requirePasswordChange", сравнение даёт ложный результат, и метод считает аутентификацию успешной. В результате пользователь получает доступ без реальной проверки личности.
Вторая проблема заключается в том, что флаг requirePasswordChange считывается непосредственно из HTTP-запроса через request.getParameter("requirePasswordChange"), а не из записи в базе данных. Это позволяет злоумышленнику подставить любое значение в параметр запроса. Комбинируя оба дефекта, атакующий может передать в одном POST-запросе легитимные учётные данные, флаг requirePasswordChange=Y и новый пароль. Система выполнит смену пароля "на лету" и выдаст полноценную аутентифицированную сессию.
Как выполняется код
Третья ошибка находится в скрипте ProgramExport.groovy. Groovy - это язык сценариев для платформы Java, часто используемый для расширения функциональности. В уязвимых версиях ProgramExport.groovy выполняет произвольный код, переданный пользователем, с помощью обычного GroovyShell. Никаких проверок прав доступа, ограничений на импорт классов или блокировки опасных вызовов не предусмотрено. Это даёт атакующему полный доступ к виртуальной машине Java (JVM) и возможность запускать системные команды через Runtime.getRuntime().exec().
Цепочка из трёх уязвимостей превращается в один запрос. Например, при тестировании на версии 24.09.05 один единственный POST-запрос к пути /webtools/control/ProgramExport приводил к выполнению команды с правами root.
Почему это опасно
Apache OFBiz поставляется с более чем десятью демонстрационными учётными записями: admin, flexadmin, demoadmin, ltdadmin и другие. Все они имеют пароль по умолчанию ofbiz. Это означает, что разработчики, тестовые или недавно развёрнутые промышленные экземпляры могут быть скомпрометированы без какой-либо разведки. Уязвимость напоминает известную проблему CVE-2023-51467, которая также была связана с логикой обработки requirePasswordChange и получила оценку 9,8.
Как исправили проблему
Разработчики Apache выпустили обновление 24.09.06, в котором устранены все три дефекта. В первом коммите удалили возможность управления флагом через HTTP-запрос - теперь параметр requirePasswordChange читается только из базы данных, а возврат "requirePasswordChange" из метода login() обрабатывается как ошибка аутентификации. Во втором коммите в ProgramExport.groovy добавили проверку прав доступа ENTITY_MAINT, блокирующую доступ неавторизованным или низкопривилегированным пользователям. Третий коммит внедрил строгую песочницу для Groovy-кода: используются SecureASTCustomizer, белый список импортов из девяти классов OFBiz, белый список получателей и чёрный список из более чем 40 опасных шаблонов (включая Runtime, ProcessBuilder, .execute() и другие).
Обнаружение и рекомендации
Специалисты по безопасности могут выявить атаку с помощью сетевых систем обнаружения вторжений (например, Suricata), отслеживая POST-запросы к /webtools/control/ProgramExport, содержащие одновременно requirePasswordChange=Y и groovyProgram. В легитимном использовании такая комбинация не встречается. Также можно просканировать исходный код утилитой YARA (инструмент для поиска вредоносных программ) на наличие строки request.getParameter("requirePasswordChange") в файле LoginWorker.java. В исправленной версии код читает флаг через userLogin.getString("requirePasswordChange").
Главная рекомендация - немедленно обновить Apache OFBiz до версии 24.09.06. Следует также отключить или удалить все демонстрационные учётные записи, а если это невозможно - сменить пароли по умолчанию до того, как экземпляр будет выставлен в сеть. На уровне брандмауэра веб-приложений или обратного прокси-сервера стоит ограничить доступ к пути /webtools/control/ProgramExport. После обновления необходимо проверить все учётные записи, у которых установлен флаг requirePasswordChange=Y, и убедиться, что механизм принудительной смены пароля работает корректно.
Уязвимость CVE-2026-45434 - очередное напоминание о том, как фатальными могут быть мелкие логические ошибки в коде аутентификации. В данном случае сочетание трёх дефектов позволило злоумышленникам одной командой получить доступ к серверу и выполнить произвольные действия. Владельцам ERP-систем стоит как можно быстрее применить патч, иначе риск компрометации бизнес-данных становится критическим.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-45434
- https://lists.apache.org/thread/yw4owrzl0yho1yx7oqxvr6xjkmln9tq8
- https://aretiq.ai/research/vul260520-cve-2026-45434-apache-ofbiz-loginworker-checklogin-password-change-flow-authentication-bypass-rce/
- http://www.openwall.com/lists/oss-security/2026/05/19/29