Модуль Content Synchronizer для Drupal выполняет произвольный код при разборе архива. Злоумышленник готовит файл импорта так, чтобы при распаковке ожил вредоносный объект. В результате код исполняется на сервере. Затронуты сайты, где модуль включён и переносит материалы между площадками.
Код из архива и обход доступа в модулях Drupal
Уведомление SA-CONTRIB-2026-293 описывает именно этот случай. Кроме того, в тот же день вышли сообщения о других уязвимостях в контриб-модулях Drupal. Контриб-модуль - расширение, которое сообщество пишет отдельно от ядра. Общей причиной стала неаккуратная проверка входных данных.
Уязвимость в Content Synchronizer получила 17 из 25 по шкале CVSS. CVSS - общая шкала оценки серьёзности. Класс проблемы - PHP Object Injection, CWE-502. Однако проверки происхождения данных в модуле нет.
Атака идёт по сети, анонимности ей мало. Для загрузки архива нужны права администратора сайта. Теоретически такой доступ есть у ролей с широкими полномочиями. Из-за этого уязвимость опаснее там, где администраторов несколько.
Условия атаки и обход доступа
Второй случай опаснее по условиям доступа. Модуль REST & JSON API Authentication не отклоняет запросы, если ключ API не создан. Ключ API - строка, которой клиент подтверждает право на вызов. В результате анонимный злоумышленник проходит к защищённым ресурсам.
Условие здесь одно: аутентификация включена, а ключ так и не сгенерировали. При этом модуль отвечает на запросы как обычно. Администратору нужно проверить наличие ключа прямо сейчас. Обходной путь на время - сгенерировать ключ и просмотреть журналы на подозрительные действия.
Похожая логика у модуля Simple OAuth (OAuth2) & OpenID Connect. При этом он не ограничивает доступ к настройкам потребителей токенов. Потребитель - зарегистрированный клиент, который запрашивает токен. Злоумышленник с правом создавать потребителей получает токен с лишними полномочиями, вплоть до полного административного доступа.
Уязвимость в Commerce Product Alternative касается корзин анонимных покупателей. Модуль не проверяет, что корзина принадлежит текущему посетителю. Поэтому чужой посетитель видит названия товаров и цены. Кроме того, он может заменить чужой товар своим вариантом из списка альтернатив.
Модуль S3 File System CORS Upload не проверяет права на загрузку файлов достаточно строго. Из-за этого в некоторых сценариях пользователь удаляет файлы, к которым доступа иметь не должен. У Workflow Notifications плохо защищена страница настроек уведомлений. Поэтому злоумышленник правит её без разрешения владельца сайта.
Скрипты в предпросмотре и поддельные платежи
Ряд уведомлений связан с межсайтовым скриптингом. XSS - подстановка чужого скрипта в страницу сайта. В Highlight Js ошибка в проверке ввода уходит в предпросмотр CKEditor 5. При этом в Content Synchronizer тот же класс проблемы живёт в клиентском коде.
В AlternativeCommerce PayPal Checkout модуль не проверяет входящие запросы от платёжной системы. Анонимный злоумышленник отправляет поддельный запрос со ссылкой на платёж. Когда такой запрос проходит, заказ помечается оплаченным без оплаты.
Все описанные уязвимости закрываются обновлением, а не настройкой. После установки новых версий проверка доступа возвращается к привычной логике. Однако старые токены и потребители Simple OAuth сохраняют силу. Поэтому аудит учётных записей остаётся частью работы.
Версии исправлений и обходные меры
Исправления вышли в тот же день. Поэтому обновление доступно сразу. Content Synchronizer нужно поднять до 4.1.1: эта версия закрывает обе уязвимости модуля. Для S3 File System CORS Upload нужна версия 8.x-1.3, для Workflow Notifications - 3.0.3.
Simple OAuth требует версии по ветке: 6.1.4, 6.0.10 или 5.2.6. После обновления остаются ручные шаги. Нужно выдать новое право Administer consumer access settings только доверенным ролям. Кроме того, в ветке 6.1.x клиентские токены теперь ограничены своими областями действия. Существующих потребителей это не меняет, их нужно пересмотреть и при сомнении отозвать токены.
REST & JSON API Authentication обновляют до 3.2.1. Highlight Js syntax highlighter получает 1.3.1, AlternativeCommerce PayPal Checkout - 1.1.1. Commerce Product Alternative закрывает проблему в 1.0.1. Если обновление откладывается, проверьте наличие ключа API и журналы доступа.
Сведений об эксплуатации в реальных атаках нет. Уведомления оценивают возможность использования как теоретическую. Тем не менее срочность остаётся для Content Synchronizer и REST & JSON API Authentication. У первой уязвимости последствия максимальны по конфиденциальности и целостности.
Ссылки
- https://www.drupal.org/sa-contrib-2026-301
- https://www.drupal.org/sa-contrib-2026-300
- https://www.drupal.org/sa-contrib-2026-299
- https://www.drupal.org/sa-contrib-2026-298
- https://www.drupal.org/sa-contrib-2026-297
- https://www.drupal.org/sa-contrib-2026-296
- https://www.drupal.org/sa-contrib-2026-295
- https://www.drupal.org/sa-contrib-2026-294
- https://www.drupal.org/sa-contrib-2026-293