
Dies ist ein CVE-2025-29927-Scanner.
Dies ist ein professioneller Scanner, der die CVE-2025-29927 Middleware-Umgehungsschwachstelle in Next.js-Anwendungen erkennt.
X-Middleware-Subrequest-Headern, um die Next.js-Middleware zu umgehenpip install -r requirements.txt playwright install
### Scanner ausführen```bash
python main.py --domain https://example.com --threads 10 --timeout 10 --save
python main.py --help
| Option | Beschreibung |
|----------------|---------------------------------------------|
| `--domain` | Basis-URL der Zielseite (erforderlich) |
| `--user-agent` | Benutzerdefinierter User-Agent (Standard: Chrome-String) |
| `--timeout` | Anfrage-Timeout (Standard: 10 Sekunden) |
| `--proxy` | Proxy-Adresse (optional) |
| `--save` | Ergebnisse in `results.txt` speichern |
| `--threads` | Anzahl der Threads (Standard: 10) |
| `--wordlist` | Wortliste inklusive Common Path |
---
## 🐳 Docker-Nutzung
### Docker-Image erstellen```bash
docker build -t cve-scanner .
docker run -it --rm cve-scanner --domain https://example.com --save
---
## ⚙️ GitHub Actions
Dieses Projekt enthält einen GitHub Actions Workflow, um das Setup bei Push zu testen. Er:
- Installiert Abhängigkeiten
- Installiert Playwright-Browser
- Führt einen `--help`-Check durch
Siehe `.github/workflows/python.yml`.
---
## 🧱 Struktur```
.
├── main.py # Entry point
├── config.py # CLI parser
├── crawler.py # Playwright crawler
├── scanner.py # Multi-threaded vulnerability testing
├── requirements.txt
├── Dockerfile
└── .github/workflows
Überblick über die Schwachstelle CVE-2025-29927
CVE-2025-29927 ist ein kritischer Sicherheitsfehler in Next.js, der es Angreifern ermöglicht, die middlewarebasierte Authentifizierung und Autorisierung zu umgehen. Durch das Einfügen eines speziellen internen Headers (X-Middleware-Subrequest) in HTTP-Anfragen kann ein Angreifer den Next.js-Server dazu bringen, die Middleware-Ausführung zu überspringen, und so Zugriff auf geschützte Routen erhalten. In der Praxis wird eine Anfrage, die normalerweise von der Authentifizierungs-Middleware blockiert würde (z. B. mit einem 401/403-Fehler oder einer Weiterleitung zur Anmeldeseite), normal verarbeitet, wenn dieser Header vorhanden ist, wodurch die Sicherheitsprüfungen effektiv umgangen werden. Diese Schwachstelle betrifft Next.js-Versionen 11.1.4 bis 15.2.2, und Administratoren werden dringend aufgefordert, einen Patch einzuspielen oder Gegenmaßnahmen zu implementieren (z. B. das Entfernen dieses Headers in Proxys), um ihre Anwendungen zu schützen.
Die Erkennung dieser Schwachstelle in einer Webanwendung erfordert das Auffinden interner Endpunkte und deren Testen mit dem bösartigen Header, um zu sehen, ob ein unbefugter Zugriff möglich ist. Im Folgenden finden Sie einen Designplan für ein fortgeschrittenes Python-Skript, das eine Zielwebsite (mit vollständiger JavaScript-Unterstützung) crawlt und nach CVE-2025-29927 scannt, wobei alle angegebenen Anforderungen erfüllt werden.
Um die Anforderung eines tiefgehenden Crawlings inklusive JavaScript-gerenderter Inhalte zu erfüllen, werden wir Playwright verwenden (bevorzugt gegenüber Selenium aufgrund seiner Geschwindigkeit und modernen API). Playwright ist eine leistungsstarke Bibliothek zur Automatisierung von Headless-Browsern, die dynamische Web-Apps und moderne JS-Frameworks verarbeiten kann. Im Vergleich zu Selenium bietet Playwright eine modernere API (basierend auf dem Chrome DevTools-Protokoll) und unterstützt sowohl synchrone als auch asynchrone Operationen, was für unseren Anwendungsfall eine bessere Leistung bieten kann. Wichtige Bibliotheken und ihre Installationsanweisungen umfassen:
playwright – für die Headless-Browser-Automation (zum Laden von SPAs oder Seiten, die JS erfordern). (Installation: pip install playwright und dann playwright install ausführen, um die Browser-Binärdateien zu erhalten).
requests oder httpx – zum Senden von HTTP-Anfragen während der Scan-Phase. Wir können requests aus Einfachheit oder httpx/aiohttp für Async-Unterstützung verwenden. (Installation: pip install requests oder pip install httpx).
bs4 (BeautifulSoup) – zum Parsen von HTML und Extrahieren von Links, wenn nötig. Playwright kann direkt das DOM abfragen, aber die Verwendung von BeautifulSoup auf dem HTML-Inhalt der Seite ist einfach, um Anker-Tags zu finden. (Installation: pip install beautifulsoup4).
concurrent.futures (eingebaut) oder asyncio – zur Implementierung von Nebenläufigkeit. Für Multithreading wird Pythons concurrent.futures.ThreadPoolExecutor verwendet (keine zusätzliche Installation). Bei einem asynchronen Ansatz können Pythons asyncio mit httpx für parallele Anfragen verwendet werden.
(Optional) argparse – zum Parsen von Kommandozeilenargumenten, falls wir eine CLI-Schnittstelle anstelle eines interaktiven Menüs wünschen. (eingebautes Modul)
(Optional) rich oder colorama – für farbige oder formatierte Konsolenausgaben zur Verbesserung der Lesbarkeit. (Installation: pip install rich oder pip install colorama).
Begründung: Playwright wird aufgrund seiner Fähigkeit ausgewählt, dynamische Inhalte ohne große Komplexität zu scrapen. „Mit Playwright können wir Headless-Browser automatisieren... um das Web genau wie ein Mensch zu navigieren, was es großartig zum Scrapen dynamischer, von JavaScript betriebener Websites macht“. Dadurch wird sichergestellt, dass unser Crawler Links oder UI-Elemente sehen kann, die von Skripten generiert werden (welche ein einfacher, auf Requests basierender Crawler übersehen würde).
Das Crawler-Modul wird Playwright im Headless-Modus verwenden, um ein tiefgehendes Crawlen der Zielseite durchzuführen. Ziel ist es, interne Pfade (Endpunkte) zum Testen zu entdecken, einschließlich solcher, die erst nach der JS-Ausführung sichtbar werden. Wichtige Designpunkte für den Crawler:
Headless-Browser-Navigation: Starten einer Browserinstanz (z. B. Chromium) im Headless-Modus über Playwright. Verwenden Sie einen Browser-Kontext mit einem benutzerdefinierten User-Agent, falls vom Benutzer angegeben (mehr dazu im nächsten Abschnitt). Beispielsweise können wir einen Kontext mit browser.new_context(user_agent=<user_agent_string>) erstellen, um den gewählten User-Agent zu emulieren. Wenn ein Proxy konfiguriert ist, wird dieser beim Start angewendet (Playwright erlaubt das Setzen eines Proxyservers beim Starten des Browsers oder Kontexts).