
Scanner local en lecture seule pour CVE-2026-42945 (NGINX Rift) qui vérifie les instances NGINX, OpenResty et Tengine pour des configurations de rewrite vulnérables sans exécuter d'exploits ni modifier les services.
Ce dépôt fournit deux scripts de vérification autonomes pour inspecter localement sur des serveurs Linux/Windows si Nginx, OpenResty, Tengine présentent des risques liés à CVE-2026-42945.
Le script effectue uniquement une collecte en lecture seule et une évaluation locale, n'exécute pas de PoC de vulnérabilité, n'envoie pas de requêtes d'attaque, ne modifie pas la configuration, ne redémarre pas les services, ne met pas à jour les logiciels.
CVE-2026-42945, également connu sous le nom de NGINX Rift, est décrit dans les documents publics comme un problème de débordement de tas (heap buffer overflow) dans ngx_http_rewrite_module. Selon la description de NVD, lorsque la directive rewrite forme une combinaison spécifique avec les directives rewrite / if / set suivantes, et implique des variables de capture PCRE non nommées (par exemple , ) ainsi qu'une chaîne de remplacement contenant un point d'interrogation , un attaquant peut déclencher un débordement de tas dans le processus worker NGINX en construisant une requête HTTP. Ce problème peut entraîner le redémarrage du processus worker ; sous certaines conditions comme la désactivation d'ASLR, il existe un risque d'exécution de code.
$1$2?NGINX Security Advisory marque CVE-2026-42945 comme un buffer overflow dans ngx_http_rewrite_module et donne les limites de correction pour NGINX Open Source :
| Statut | Version NGINX Open Source |
|---|---|
| Corrigé | 1.31.0+ / 1.30.1+ |
| Suspecté affecté | 0.6.27-1.30.0 |
Les distributions, produits commerciaux, OpenResty, Tengine ou constructions privées peuvent avoir des différences de rétroportage de correctif ou de mappage de version. Le script collecte autant de preuves que possible, mais il est finalement recommandé de confirmer manuellement en consultant les avis des fournisseurs.
Cet outil n'est pas un outil de validation d'exploitation de vulnérabilité, mais un outil de collecte locale et de vérification de configuration statique. Il se concentre sur l'identification des combinaisons suivantes :
$1, $2 dans la chaîne de remplacement de la directive rewrite.rewrite contient un ? non échappé ; les points d'interrogation littéraux comme \? ne sont pas considérés comme une condition de risque.rewrite, if ou set existe ultérieurement.Exemple de configuration risquée :
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?endpoint=$1 last;
set $flag 1;
}
Le risque ne provient pas d'une seule directive rewrite ou set, mais des conditions de déclenchement formées par la version, le contexte de configuration et l'ordre d'exécution. En cas de correspondance, il est recommandé de vérifier manuellement si cette configuration est réellement active, si elle peut être atteinte par des requêtes externes, et si elle a déjà été corrigée par un rétroportage de la distribution.
| Fichier | Description |
|---|---|
check_nginx_linux.sh | Script de vérification local Linux |
check_nginx_windows.ps1 | Script de vérification local Windows |
README.md | Documentation en chinois |
README.en.md | README en anglais |
Première version prend en charge :
rewrite dangereuses liées à CVE-2026-42945.summary.txt, summary.json et répertoire des preuves brutes.La première version n'inclut pas :
Il est recommandé d'exécuter avec les privilèges d'administrateur :
root ou disposant des privilèges sudo.Sans privilèges administrateur, le script fera de son mieux pour collecter ; si la configuration active complète nginx -T ne peut pas être exportée, le résultat sera marqué comme Nécessite une vérification manuelle.
Après avoir téléchargé check_nginx_linux.sh sur le serveur, exécutez :
chmod +x check_nginx_linux.sh
sudo ./check_nginx_linux.sh
Si sudo n'est pas disponible, vous pouvez exécuter directement :
./check_nginx_linux.sh
Après avoir téléchargé check_nginx_windows.ps1 sur le serveur, exécutez avec PowerShell en mode 'Exécuter en tant qu'administrateur' :
powershell -ExecutionPolicy Bypass -File .\check_nginx_windows.ps1
Le script génère un répertoire de résultats dans le répertoire où se trouve le script. Le nom du répertoire contient le nom d'hôte, l'heure et l'ID du processus du script, évitant le mélange des preuves en cas d'exécutions simultanées dans la même seconde.
nginx_check_<hostname>_<time>_<PID>/
summary.txt
summary.json
raw/
host_info.txt
process_info.txt
service_info.txt
package_info.txt
nginx_paths.txt
instances/
instance_01/
nginx_invocation.txt
nginx_version.txt
nginx_build.txt
nginx_config_dump.txt
risky_config_matches.txt
instance_02/
...
| Fichier ou répertoire | Description |
|---|---|
summary.txt | Résumé en chinois, adapté à la consultation humaine et au renvoi |
summary.json | Résultat structuré, facilitant l'agrégation ultérieure par lots |
raw/ | Sortie des commandes brutes et fichiers de preuve |
raw/instances/instance_XX/ | Version indépendante, configuration et preuves de risque pour chaque instance |
Le résumé enregistre :
| Champ | Description |
|---|---|
Nombre d'instances | Nombre d'instances candidates Nginx / OpenResty / Tengine trouvées et vérifiées individuellement sur la machine |
Taille de la configuration | Taille du fichier de configuration brute exportée par nginx -T |
Nombre de lignes scannées | Nombre de lignes de sortie de configuration réellement scannées par le script |
Nombre de configurations dangereuses correspondantes | Nombre de règles rewrite dangereuses correspondantes |
Résumé des preuves | Aperçu des preuves de l'instance la plus risquée ; preuves complètes dans le répertoire de l'instance correspondante |
Si la configuration Nginx est volumineuse, le script n'imprime pas la configuration complète dans la console ; la configuration active complète est enregistrée dans nginx_config_dump.txt dans le répertoire de l'instance correspondante. Lorsque le fichier de configuration exporté dépasse 10 Mo, le script continue automatiquement l'analyse et suggère une vérification manuelle ponctuelle en combinaison avec les résultats de raw/.
Si le serveur trouve plusieurs fichiers exécutables candidats nginx, openresty, tengine, le script les vérifie un par un et génère le détail des instances.
Le résultat dans le résumé global prend l'instance la plus risquée. La conclusion globale suit une priorité prudente :
Affecté avec configurations à risqueNécessite vérification manuelleAffecté sans configuration à risqueNon affectéNginx non installéParmi eux, Nécessite vérification manuelle prime sur Affecté sans configuration à risque, cela signifie qu'il existe des instances non confirmées nécessitant une vérification supplémentaire, et n'équivaut pas à une confirmation de configuration dangereuse existante.
| Conclusion | Signification |
|---|---|
Nginx non installé | Aucune commande, processus ou service Nginx / OpenResty / Tengine trouvé |
Non affecté | Version clairement corrigée et aucune configuration dangereuse trouvée |
Affecté sans configuration à risque | Version suspectée affectée, mais aucune configuration rewrite dangereuse trouvée |
Affecté avec configurations à risque | Version suspectée affectée ou version dérivée nécessitant vérification, et configuration rewrite dangereuse trouvée |
Nécessite vérification manuelle | Version inconnue, version dérivée, échec de collecte de configuration, privilèges insuffisants ou preuves insuffisantes |
| Produit | Évaluation de version |
|---|---|
NGINX 1.31.0+ | Corrigé, le script affiche Corrigé (mainline) |
NGINX 1.30.1+ | Corrigé, le script affiche Corrigé (stable) |
NGINX 0.6.27-1.30.0 | Suspecté affecté |
| OpenResty / Tengine | Version et configuration peuvent être collectées, mais la relation d'impact de version nécessite une vérification manuelle par défaut |
Les distributions peuvent avoir des cas de 'numéro de version plus ancien mais correctif rétroporté'. Si une preuve de correctif du fournisseur peut être fournie, une confirmation manuelle peut être effectuée en combinant summary.txt et les informations de version du paquet.
rewrite / if / set dans les contextes location, server, if, etc.$1, $2 dans une chaîne de remplacement rewrite contenant ?.nginx -T ne peut pas exporter entièrement la configuration, le script ne considérera pas la configuration comme sécurisée.