Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
nginx-rift-check — Détecte le schéma de réécriture CVE-2026-42945 dans les configurations nginx : rewrite avec ? dans le remplacement plus une capture non nommée consommée dans la même location | Kitploit
Outils/GitHubGitHub/cynepmyx/nginx-rift-check
Analyse StatiqueScanners de VulnérabilitésAnalyse des VulnérabilitésAudit de ConfigurationSécurité Web
GitHubcynepmyx/nginx-rift-check

nginx-rift-check

Détecte le schéma de réécriture CVE-2026-42945 dans les configurations nginx : rewrite avec ? dans le remplacement plus une capture non nommée consommée dans la même location

Voir le dépôt
5il y a 27 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

nginx-rift-check

Détecte les configurations vulnérables à CVE-2026-42945, le débordement de tas dans le ngx_http_rewrite_module de nginx.

Exécuter une version d'nginx affectée (0.6.27 à 1.30.0) ne suffit pas pour être exploitable. La configuration doit contenir une paire spécifique de directives, et cette paire est rare : deux analyses indépendantes de configurations réelles n'ont trouvé aucune configuration exploitable sur 1465, et une sur 35633. Ce script vous indique de quel côté de cette ligne vous vous trouvez.

Ce qu'il recherche

Un rewrite dont le remplacement contient un ? suivi d'arguments, suivi d'une capture non nommée ($1 à $9) lue dans le même location :

root@kitploit:~
location / {
    rewrite ^(.*) /new?c=1;   # the ? here raises the internal is_args flag
    set $myvar $1;            # ...which was never cleared, and leaks into this
    return 200 $myvar;
}

Une passe dimensionne le tampon pour la chaîne brute, la suivante y copie une version échappée. Les deux moitiés semblent correctes prises séparément.

Les règles proviennent d'un banc d'essai, pas de l'avis de sécurité

Chaque règle ci-dessous a été mesurée sur nginx 1.30.0 plutôt que déduite, car les descriptions publiées en contiennent deux fausses.

Configuration dans un même locationPlantage
rewrite ^(.*) /new?c=1; + set $x $1;oui
rewrite ^/old/(.*)$ /new?x=1; + set $x $1;oui
rewrite ^/old/(.*)$ /new/$1?; + set $x $1;non
rewrite ... /mid?c=1; puis rewrite ... /new; puis set $x $1;non
rewrite ^(.*) /new?c=1 break; + set $x $1;non
rewrite ^(?<tail>.*) /new?c=1; + set $x $1;oui
rewrite ^(?<tail>.*) /new?c=1; + set $x $tail;non

Deux conséquences méritent d'être explicitées :

Un ? final n'est pas dangereux. /new/$1? est la façon de supprimer la chaîne de requête héritée, et on le retrouve dans une grande partie des configurations de migration. Signaler chaque ? reviendrait à alerter la moitié d'Internet.

« Les captures nommées sont sûres » est formulé à tort. Ce qui compte, c'est la façon dont la capture est lue, pas comment elle a été déclarée. Un groupe nommé lu comme $1 plante exactement comme un groupe non nommé.

Sont également ignorés, pour les mêmes raisons mesurées : un ? à l'intérieur de la regex elle-même (un quantificateur), et redirect / permanent / break, qui terminent le traitement avant que le consommateur ne s'exécute.

Utilisation

root@kitploit:~
nginx -T | python3 check_rewrite.py
python3 check_rewrite.py /path/to/dump.txt
python3 check_rewrite.py --json /path/to/dump.txt

Python 3, uniquement la bibliothèque standard.

Codes de sortie : 0 propre, 1 une paire a été trouvée, 2 la configuration n'a pas pu être lue ou analysée. Le troisième est le point important : un guillemet non fermé ou des accolades déséquilibrées tronquent l'analyse, et un vérificateur qui répond « rien trouvé » pour un fichier qu'il n'a pas pu lire est pire que celui qui plante. Quand cela arrive, il le dit et renvoie 2.

Fournissez-lui nginx -T, pas des fichiers individuels : les inclusions peuvent se trouver n'importe où, et une configuration générée n'est vraie que sur le serveur en cours d'exécution. Les résultats sont signalés par rapport au fichier et à la ligne où la directive se trouve réellement, pas par rapport au décalage dans le dump.

Exemple

root@kitploit:~
$ python3 check_rewrite.py samples/vuln-nginx-T.txt
[HIGH] находка #1
  location:  location /  (/etc/nginx/nginx.conf:14)
  rewrite:   rewrite ^(.*) /new?c=1  (/etc/nginx/nginx.conf:15)
  захват $N: set -> set $myvar $1  (/etc/nginx/nginx.conf:16)
  почему:    обработка продолжается в этом же location без редиректа

Итого находок: 1

Limites à connaître

Également imprimées à la fin de chaque rapport, afin que personne ne prenne l'outil pour une garantie :

  • seule la première paire par location est signalée ;
  • les rewrite et set situés directement dans server plutôt que dans un location ne sont pas suivis ;
  • les chaînes transitives (set $tmp $1; puis utilisation de $tmp) ne sont pas suivies ;
  • les sauts via try_files, error_page et les emplacements nommés ne sont pas suivis ;
  • l'atteignabilité n'est pas évaluée : une paire dans un if qui ne se déclenche jamais est quand même signalée.

Mettre à jour est plus fiable que n'importe quelle vérification de configuration. Prenez la version stable ou mainline actuelle sur nginx.org.

Tests

root@kitploit:~
python3 -m unittest test_check_rewrite -v

29 tests. La plupart sont des cas négatifs, car le risque d'un outil comme celui-ci est d'alerter sur des configurations saines. Il a également été exécuté contre une configuration de production de 250 lignes réparties sur onze fichiers inclus, avec une regex map et un en-tête CSP plein de points-virgules entre guillemets : zéro résultat, zéro plainte d'analyse, et exactement un résultat une fois qu'une vraie paire y a été injectée.

Licence

MIT

Télécharger l’outil