RCE (Remote Code Execution): что это и как защититься | Глоссарий FREEHOSTING

RCE

Remote Code Execution
RCE — RCE (Remote Code Execution) — класс уязвимостей, при которых атакующий выполняет произвольный код на чужом сервере без локального доступа. Самый опасный тип бага: один RCE открывает шелл, поднимает права и заражает соседние сервисы.

Определение простыми словами

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 на персистентность, поднять чистый сервер из бэкапа.