Представьте: вы администратор CMS, нажимаете кнопку «Обновить ядро», а браузер отправляет POST-запрос с параметром
php. Значение этого параметра — путь к PHP-бинарнику — без какой-либо фильтрации конкатенируется в строку и уходит прямиком в exec(). Ни escapeshellarg(), ни allowlist, ни regex. Голый пользовательский ввод в shell-команде. 2026 год на дворе.Именно это обнаружилось при анализе патча baserCMS 5.2.3. Уязвимости присвоены сразу два CVE — CVE-2026-21861 и CVE-2026-30877 — обе с оценкой CVSS 9.1 (CRITICAL). CISA подтвердила наличие концептуального PoC.
🔎Почему это опаснее, чем кажется?
Типичная реакция: «Атакующий уже админ, что ему ещё нужно?» Ответ кроется в CVSS-флаге Scope: Changed. Администратор CMS управляет контентом — страницами, медиафайлами, плагинами. OS command injection выводит атакующего за рамки приложения на уровень операционной системы:
• Чтение DB-credentials из конфигов CakePHP, SSH-ключей, API-токенов
• Запись PHP-шелла в webroot — сессия протухнет, а шелл останется
• Reverse shell для pivot'а к базе данных, очередям сообщений, внутренним API
• Полный контроль от имени
www-data: чтение /etc/passwd, запуск произвольных бинарниковДля атакующего, получившего админ-аккаунт через credential stuffing или фишинг, это мост от «могу редактировать сайт» к «выполняю любые команды на сервере».
➡️Как устроен вектор атаки?
Контроллер
PluginsController, метод get_core_update(). Параметр php извлекается из POST-данных и попадает в shell-команду дважды — как путь к бинарнику в начале и как аргумент после --php. Спецсимволы ;, |, &&, обратные кавычки и $() проходят без фильтрации. Подставляем в параметр что-то вроде php;id — и получаем выполнение произвольной команды.«Но ведь есть CSRF-защита!» — скажете вы. Не поможет. Атакующий с легитимной admin-сессией получает валидный CSRF-токен штатным образом. Запрос формально легитимен: правильный endpoint, правильный метод, валидный токен. Скрытие кнопки обновления в UI бесполезно — endpoint доступен через
curl или Burp Repeater.👉Что делать прямо сейчас?
Если используете baserCMS — обновляйтесь до 5.2.3 немедленно. Обе уязвимости закрыты в одном релизе. Два CVE, один diff — скорее всего, два разных injection-вектора, найденных при одном аудите.
В полной статье — воспроизводимая цепочка эксплуатации, конкретные правила детектирования для WAF, хоста и SIEM, а также детальный разбор CVSS-вектора. Читайте на форуме.
https://codeby.net/threads/cve-2026-21861-basercms-uyazvimost-os-command-injection-cherez-funktsiyu-obnovleniya-yadra.94977/
