
Voici un scanner pour la CVE-2025-29927.
Ceci est un scanner de qualité professionnelle conçu pour détecter la vulnérabilité de contournement de middleware CVE-2025-29927 dans les applications Next.js.
X-Middleware-Subrequest fabriqués pour contourner le middleware Next.jspip install -r requirements.txt playwright install
### Exécuter le scanner```bash
python main.py --domain https://example.com --threads 10 --timeout 10 --save
python main.py --help
| Option | Description |
|----------------|--------------------------------------------|
| `--domain` | URL de base du site cible (obligatoire) |
| `--user-agent` | User-agent personnalisé (par défaut : chaîne Chrome) |
| `--timeout` | Délai d'expiration de la requête (par défaut : 10 secondes) |
| `--proxy` | Adresse du proxy (optionnel) |
| `--save` | Sauvegarder les résultats dans `results.txt` |
| `--threads` | Nombre de threads (par défaut : 10) |
| `--wordlist` | Worlist inclut Common Path |
---
## 🐳 Utilisation avec Docker
### Construire l'image Docker```bash
docker build -t cve-scanner .
docker run -it --rm cve-scanner --domain https://example.com --save
---
## ⚙️ GitHub Actions
Ce projet inclut un workflow GitHub Actions pour tester la configuration lors d'un push. Il :
- Installe les dépendances
- Installe les navigateurs Playwright
- Exécute une vérification `--help`
Voir `.github/workflows/python.yml`.
---
## 🧱 Structure```
.
├── main.py # Entry point
├── config.py # CLI parser
├── crawler.py # Playwright crawler
├── scanner.py # Multi-threaded vulnerability testing
├── requirements.txt
├── Dockerfile
└── .github/workflows
Aperçu de la Vulnérabilité CVE-2025-29927
CVE-2025-29927 est une faille de sécurité critique dans Next.js qui permet aux attaquants de contourner l'authentification et l'autorisation basées sur les middleware. En incluant un en-tête interne spécial (X-Middleware-Subrequest) dans les requêtes HTTP, un attaquant peut tromper le serveur Next.js en lui faisant sauter l'exécution du middleware, accédant ainsi à des routes protégées. En pratique, une requête qui serait normalement bloquée par le middleware d'authentification (par exemple en renvoyant un 401/403 ou en redirigeant vers la page de connexion) est traitée normalement si cet en-tête est présent, contournant ainsi les contrôles de sécurité. Cette vulnérabilité affecte les versions de Next.js 11.1.4 à 15.2.2, et les administrateurs sont invités à appliquer un correctif ou à mettre en œuvre des mesures d'atténuation (comme la suppression de cet en-tête au niveau des proxys) pour protéger leurs applications.
Détecter cette vulnérabilité dans une application web nécessite de découvrir les points de terminaison internes et de les tester avec l'en-tête malveillant pour voir si un accès non autorisé est possible. Vous trouverez ci-dessous un plan de conception pour un script Python avancé qui explore un site web cible (avec prise en charge complète de JavaScript) et recherche la CVE-2025-29927, répondant à toutes les exigences spécifiées.
Pour répondre à l'exigence d'une exploration approfondie incluant le contenu rendu par JavaScript, nous utiliserons Playwright (préféré à Selenium pour sa rapidité et son API moderne). Playwright est une puissante bibliothèque d'automatisation de navigateur sans tête qui peut gérer les applications web dynamiques et les frameworks JS modernes. Comparé à Selenium, Playwright offre une API plus moderne (basée sur le protocole Chrome DevTools) et prend en charge le fonctionnement synchrone et asynchrone, ce qui peut offrir de meilleures performances pour notre cas d'utilisation. Les bibliothèques clés et leurs instructions d'installation incluent :
playwright – pour l'automatisation du navigateur sans tête (pour charger les applications monopages ou les pages nécessitant JavaScript). (Installation : pip install playwright puis exécutez playwright install pour obtenir les binaires du navigateur).
requests ou httpx – pour envoyer des requêtes HTTP pendant la phase d'analyse. Nous pouvons utiliser requests pour la simplicité ou httpx/aiohttp pour le support asynchrone. (Installation : pip install requests ou pip install httpx).
bs4 (BeautifulSoup) – pour analyser le HTML et extraire les liens si nécessaire. Playwright peut interroger directement le DOM, mais utiliser BeautifulSoup sur le contenu HTML de la page est simple pour trouver les balises d'ancrage. (Installation : pip install beautifulsoup4).
concurrent.futures (intégré) ou asyncio – pour implémenter la concurrence. Pour le multithreading, le concurrent.futures.ThreadPoolExecutor de Python sera utilisé (aucune installation supplémentaire). Si une approche asynchrone est utilisée, le module asyncio de Python avec httpx peut être utilisé pour les requêtes parallèles.
(Facultatif) argparse – pour analyser les arguments de ligne de commande si nous voulons une interface CLI au lieu d'un menu interactif. (module intégré)
(Facultatif) rich ou colorama – pour une sortie console colorée ou formatée afin d'améliorer la lisibilité. (Installation : pip install rich ou pip install colorama).
Justification : Playwright est choisi pour sa capacité à extraire du contenu dynamique sans complexité lourde. « À l'aide de Playwright, nous pouvons automatiser les navigateurs sans tête… pour naviguer sur le Web comme un humain, ce qui le rend idéal pour extraire des sites web dynamiques alimentés par JavaScript ». Cela garantit que notre explorateur peut voir les liens ou les éléments d'interface générés par les scripts (qu'un explorateur basé uniquement sur les requêtes manquerait).
Le module d'exploration utilisera Playwright en mode sans tête pour effectuer une exploration approfondie du site cible. L'objectif est de découvrir les chemins internes (points de terminaison) à tester, y compris ceux qui ne sont révélés qu'après l'exécution de JavaScript. Points clés de conception pour l'explorateur :
Navigation par Navigateur Sans Tête : Lancez une instance de navigateur (par exemple Chromium) en mode sans tête via Playwright. Utilisez un Browser Context avec un User-Agent personnalisé si spécifié par l'utilisateur (plus de détails dans la section suivante). Par exemple, nous pouvons créer un contexte avec browser.new_context(user_agent=<user_agent_string>) pour émuler le User-Agent choisi. Si un proxy est configuré, appliquez-le au lancement (Playwright permet de définir un serveur proxy lors du lancement du navigateur ou du contexte).