Определение простыми словами
RCE — это когда злоумышленник через интернет заставляет ваш сервер запустить свою команду. Не загрузить файл, не прочитать базу — именно выполнить код от имени процесса (web-сервера, демона, сервиса). Дальше — дело техники: реверс-шелл, эскалация, закрепление, шифровальщик.
В отличие от XSS, который атакует браузер посетителя, RCE бьёт по самому хосту. Поэтому в любой шкале CVSS свежий RCE с авторизацией «none» получает 9.8–10.0 баллов и попадает в топ CVE года.
Сравнение с близкими классами уязвимостей
| Класс | Где выполняется код | Нужна авторизация | Типичный CVSS |
|---|---|---|---|
| RCE | На сервере | Часто нет | 9.0–10.0 |
| LFI/RFI | На сервере (как препарат к RCE) | Иногда | 7.0–9.0 |
| SSRF | На сервере, но в режиме клиента | Иногда | 6.0–9.0 |
| XSS | В браузере посетителя | Нет | 4.0–7.0 |
| SQL injection | В СУБД | Иногда | 7.0–9.0 |
Кейсы использования
- Log4Shell (CVE-2021-44228) — одна строка в HTTP-заголовке выполняла Java-код через JNDI lookup. Под удар попали миллионы Java-приложений.
- Spring4Shell (CVE-2022-22965) — RCE через биндинг параметров в Spring Framework.
- ProxyShell в Microsoft Exchange — цепочка из трёх багов давала полный контроль над почтовым сервером.
- Negative-сценарий: RCE в плагине WordPress с auto-update приводит к массовому майнеру на тысячах хостингов за одну ночь.
- Любой RCE на VPS без изоляции = риск для всех клиентов на ноде, если использован старый ядерный эксплойт для эскалации.
Технические детали
# Минимальная защита: проверка известных RCE через nuclei
nuclei -u https://example.com -tags rce,oast -severity critical,high
# Ловим попытки RCE в access.log nginx
grep -E '(${jndi:|/bin/sh|wgets+http|curls+http|;cats+/etc/passwd)'
/var/log/nginx/access.log
# Хардненинг: запретить web-серверу запускать произвольные бинари
chattr +i /usr/bin/wget /usr/bin/curl /usr/bin/nc 2>/dev/null
setfacl -m u:www-data:--- /tmp /var/tmp
# Мониторинг новых процессов от www-data (auditd)
auditctl -a always,exit -F arch=b64 -S execve -F uid=33 -k www-rce
RCE в проде — это не «починим завтра», а инцидент уровня P0. Сразу: изоляция узла от сети, снятие памяти/диска для форензики, ротация всех ключей, поиск персистентности (cron, systemd, .ssh/authorized_keys, библиотеки LD_PRELOAD).
🔥 Где это применяется
Частые вопросы
RCE и backdoor — это одно и то же?
Нет. RCE — это уязвимость, через которую злоумышленник может выполнить код. Backdoor — заранее оставленный механизм входа. RCE часто становится способом установки backdoor.
Защитит ли WAF от любого RCE?
Нет. WAF режет известные паттерны (jndi:, eval, system), но zero-day или нестандартная сериализация проходят мимо. WAF — это слой, а не финальная защита.
Что делать сразу после обнаружения RCE на проде?
Отключить узел от внешней сети, снять образ диска и памяти, ротировать все секреты, проверить cron/systemd/authorized_keys на персистентность, поднять чистый сервер из бэкапа.