
Script pour vérifier si les systèmes sont vulnérables à cve-2026-23111
CVE-2026-23111 est une vulnérabilité du noyau Linux dans nf_tables qui peut être exploitée pour une élévation de privilèges locale par un utilisateur non privilégié sur les systèmes où les espaces de noms utilisateur et nftables sont disponibles.[1][2] Les avis publics des fournisseurs et des gouvernements la décrivent comme un problème local affectant les distributions Linux et soulignent que le correctif est la solution principale.[3][4]
Ce dépôt contient un script de validation défensive conçu pour aider à évaluer si un hôte expose les conditions techniques associées à cette CVE sans fournir d'exploit d'élévation de privilèges. Il vérifie les conditions pertinentes du noyau et de l'exécution, charge optionnellement le module nf_tables pour des tests fonctionnels complets, tente un chemin de validation non privilégié contrôlé en utilisant unshare et nft, collecte des traces de diagnostic locales et classe l'hôte en verdicts opérationnels tels que probablement sûr, bloqué par la politique locale, ou chemin exposé disponible.[1][5]
Selon le NVD, CVE-2026-23111 est une vulnérabilité du noyau Linux dans nf_tables résolue comme un correctif de bogue logique dans netfilter et exploitable pour une élévation de privilèges locale à partir d'un utilisateur non privilégié via les espaces de noms utilisateur et nftables sur les configurations concernées.[1] L'avis de sécurité d'Ubuntu décrit le même chemin d'exploitation de haut niveau et suit les états des paquets affectés et corrigés par version.[2]
Red Hat déclare qu'un utilisateur local peu privilégié peut exploiter le problème pour provoquer un déni de service ou potentiellement obtenir une élévation de privilèges, et documente une voie d'atténuation basée sur l'empêchement du chargement du module nf_tables lorsque cela est acceptable d'un point de vue opérationnel.[3] Les directives nationales du Centre canadien pour la cybersécurité orientent également les organisations concernées vers les mises à jour des fournisseurs et mentionnent la régénération de l'initramfs lors de l'utilisation de mesures d'atténuation par blocage de module.[4]
Le script est destiné à une évaluation défensive de l'exposition, et non à l'exploitation. Il est conçu pour :
CONFIG_USER_NS et CONFIG_NF_TABLES semblent présents.[1]kernel.unprivileged_userns_clone et user.max_user_namespaces pour estimer si les espaces de noms utilisateur non privilégiés sont disponibles.install nf_tables /bin/false) ou une liste noire faible est en place pour le module nf_tables./proc/kallsyms pour le symbole vulnérable (nft_map_catchall_activate) par rapport au symbole post-correctif (nft_catchall_set_activate) avant toute interaction avec le module.nf_tables via modprobe lorsque est spécifié (voir ci-dessous) et le décharger automatiquement à la sortie.Le script stocke les journaux dans un sous-répertoire du répertoire du script et les supprime par défaut sauf si --keep-logs est utilisé.
Par défaut, le script ne charge jamais nf_tables. Si le module n'est pas déjà chargé au démarrage du script, tous les tests nft fonctionnels sont ignorés et le verdict est dérivé uniquement de la version du noyau, de l'empreinte kallsyms, de la configuration modprobe, du changelog RPM et des preuves de politique LSM/sysctl.
Cette valeur par défaut prudente évite d'étendre involontairement la surface d'attaque sur les hôtes de production. Pour activer des tests fonctionnels complets sur un système contrôlé ou instrumenté, utilisez --allow-load-module en tant que root (voir ci-dessous).
# Par défaut — pas de chargement de module, verdict basé uniquement sur les preuves de politique
./check_cve_2026_23111.sh
./check_cve_2026_23111.sh --color
./check_cve_2026_23111.sh --keep-logs
./check_cve_2026_23111.sh --color --keep-logs
# Test fonctionnel complet — charge (et décharge) nf_tables, nécessite root
sudo ./check_cve_2026_23111.sh --allow-load-module
sudo ./check_cve_2026_23111.sh --allow-load-module --color --keep-logs
--allow-load-moduleUtilisez --allow-load-module lorsque vous avez besoin du verdict le plus fiable sur une machine virtuelle de test isolée, non productive ou spécialement construite. Scénarios typiques :
N'utilisez pas --allow-load-module sur des hôtes de production où nf_tables est intentionnellement bloqué ou où son chargement violerait une politique de durcissement.
--allow-load-moduleAvant de tenter de charger le module, le script applique les vérifications suivantes et quitte avec une erreur si l'une d'elles échoue :
install nf_tables /bin/false) ne doit pas être présent dans /etc/modprobe.d/.modprobe doit être disponible sur le système.root (uid 0).Si le module est chargé avec succès par le script, modprobe -r nf_tables est appelé à la sortie via le piège cleanup(), quelle que soit la façon dont le script se termine (succès, erreur ou CTRL+C).
Le script utilise des verdicts opérationnels plutôt que des résultats d'exploitation :
Ces verdicts sont destinés à soutenir la priorisation des correctifs et le triage défensif, et non à remplacer la validation de l'état des paquets du fournisseur.
Le script mappe le noyau en cours d'exécution par rapport aux points de correction amont documentés :
L'action recommandée principale est d'installer la mise à jour du noyau corrigée par le fournisseur et de redémarrer sur le noyau corrigé.[2][3][4] Étant donné que l'exploitation dépend de la surface d'attaque locale du noyau, un durcissement supplémentaire peut réduire l'exposition pendant la planification ou la validation du correctif.[5][6]
nf_tables si le système n'a pas besoin de la fonctionnalité nftables et que le changement a été validé pour l'impact opérationnel.[3][4]CAP_NET_ADMIN, et réduire le nombre de comptes pouvant manipuler l'état du pare-feu.[5]Restreindre les espaces de noms utilisateur non privilégiés :
echo 'kernel.unprivileged_userns_clone=0' > /etc/sysctl.d/99-cve-2026-23111.conf
echo 'user.max_user_namespaces=0' >> /etc/sysctl.d/99-cve-2026-23111.conf
sysctl --load /etc/sysctl.d/99-cve-2026-23111.conf
Bloquer le chargement du module nf_tables lorsque c'est opérationnellement sûr :
echo 'install nf_tables /bin/false' > /etc/modprobe.d/disable-nf_tables.conf
rmmod nf_tables 2>/dev/null || true
Si une atténuation par blocage de chargement de module est utilisée, certaines directives recommandent de régénérer l'initramfs afin que le module bloqué ne soit pas chargé lors du démarrage précoce.[4]
Ubuntu documente les restrictions basées sur AppArmor pour les espaces de noms utilisateur non privilégiés comme un moyen de réduire la surface d'attaque plutôt que comme un substitut complet aux correctifs du noyau.[6] Un hôte peut sembler moins exposé lors des tests d'exécution car le chemin d'attaque est bloqué localement, alors que la correction à long terme nécessite toujours l'installation du paquet du noyau corrigé par le fournisseur.[2][6] Le script valide l'efficacité des restrictions AppArmor en tentant une invocation réelle de unshare --user et en vérifiant si CAP_NET_ADMIN à l'intérieur d'un espace de noms utilisateur+réseau est fonctionnel.
Red Hat liste explicitement l'empêchement du chargement du module nf_tables comme une atténuation pour CVE-2026-23111 lorsque ce changement est approprié pour l'environnement.[3] Le script détecte cette configuration via check_modprobe_deny() et fait la distinction entre un refus dur (install nf_tables /bin/false, qui bloque le chargement à la demande) et une liste noire faible (qui ne le fait pas). Sur les systèmes de la famille RHEL, le script inspecte également le changelog RPM du noyau en cours d'exécution pour une entrée de rétroportage de CVE-2026-23111, permettant un verdict confirmé par le fournisseur indépendamment du numéro de version amont.
Ce README et le script qui l'accompagne sont destinés à la validation défensive, à l'inventaire et à la planification des atténuations. Ils ne remplacent pas les directives du fournisseur, la vérification au niveau des paquets ou les processus standard de gestion des correctifs, et ne doivent pas être utilisés comme un substitut à l'application des correctifs officiels décrits dans les avis liés.[2][3][4]
Un dépôt pour apprendre, tester et rechercher des concepts de cybersécurité dans des environnements contrôlés.
Ce dépôt est destiné uniquement à la recherche en sécurité éducative et autorisée.
Il est conçu pour aider les utilisateurs à apprendre :
Utilisez ce dépôt uniquement dans des environnements où vous avez l'autorisation, tels que :
Toute utilisation non autorisée ou illégale est strictement interdite.
L'auteur et les contributeurs ne sont pas responsables des dommages, utilisations abusives, problèmes juridiques ou pertes causés par ce projet.
En utilisant ce dépôt, vous acceptez que :
Ce projet est destiné à :
Veuillez suivre les pratiques de divulgation responsable et vous conformer à toutes les lois applicables.
Pour une divulgation responsable ou une collaboration, contactez le mainteneur du dépôt via GitHub.
--allow-load-moduleunshare -U -n --map-root-user + nft lorsque le module est chargé, et enregistrer stdout, stderr et les journaux récents du noyau.unshare --user crée effectivement un espace de noms et que CAP_NET_ADMIN est fonctionnel à l'intérieur, pour confirmer si les restrictions AppArmor ou SELinux sont réellement efficaces.| Option | Description |
|---|
--allow-load-module | Autorise le script à charger nf_tables via modprobe si le module n'est pas déjà chargé. Active l'exercice complet du chemin catchall nft et le test d'efficacité de CAP_NET_ADMIN. Le module est déchargé automatiquement à la sortie. Nécessite root. Refusé si un refus dur de modprobe est déjà en place. À utiliser uniquement sur des systèmes non productifs ou instrumentés. |
--color | Active la sortie colorée sur stdout lorsque le terminal le supporte. |
--keep-logs | Conserve les journaux et les traces dans le répertoire du script au lieu de les supprimer à la sortie. |
--help | Affiche les informations d'utilisation et quitte. |
| Verdict | Signification |
|---|
not-affected | La version du noyau est inférieure à 5.13 ; la fonctionnalité d'élément catchall n'a pas encore été introduite et le chemin de code vulnérable est absent. |
likely-patched-vendor-confirmed | CVE-2026-23111 a été trouvée dans le changelog RPM du noyau du fournisseur, confirmant un rétroportage du correctif indépendamment de la version amont. |
likely-patched-upstream-confirmed | La version du noyau se trouve dans la plage amont corrigée et le test nft fonctionnel a renvoyé un code non nul sans signal du noyau — preuve statique + dynamique la plus solide d'un état sûr. |
likely-patched-upstream | La version du noyau se trouve dans une plage amont corrigée mais le test fonctionnel n'a pas été exécuté (module absent, ou non concluant). Le statut de l'avis du fournisseur doit encore être vérifié. |
likely-safe-or-patched | Aucun chemin exploitable n'a été confirmé par le script ; la cause est ambiguë entre un noyau corrigé, du code vulnérable absent ou un blocage local implicite. |
blocked-by-local-policy | Le chemin testé semble bloqué par AppArmor, SELinux, des restrictions d'espace de noms utilisateur ou un refus de modprobe.[6] Les blocages de politique ne remplacent pas le correctif du fournisseur. |
exposed-path-available | L'hôte expose un chemin userns + nftables compatible avec les prérequis d'exploitation documentés.[1][5] |
strong-signal-lab-confirmation | Un signal de journal du noyau cohérent avec une corruption mémoire liée à nf_tables a été observé. Confirmer uniquement dans un laboratoire jetable et instrumenté. |
prerequisites-missing | Les outils de diagnostic requis (unshare, nft) sont manquants ; aucune validation d'exécution significative n'a été effectuée. |
| Branche | Corrigé à | Commit amont |
|---|
| 6.13.x+ | ≥ 6.13.1 | f41c5d1 |
| 6.12.x | ≥ 6.12.12 | 8c760ba |
| 6.6.x | ≥ 6.6.75 | b9b6573 |
| 6.1.x | ≥ 6.1.128 | 8b68a45 |
| 6.2–6.5, 6.7–6.11 | EOL amont | rétroportage distribution uniquement |
| 5.15.x | dépendant de la distribution | Amazon Linux : ALAS2KERNEL-5.15-2026-098 |
| 5.10.x | dépendant de la distribution | Amazon Linux 2 : en attente au 2026-03 |
| 5.4.x | dépendant de la distribution | Amazon Linux 2 : en attente au 2026-03 |
| 5.13–5.14 | EOL amont | rétroportage distribution uniquement |
| < 5.13 | non affecté | fonctionnalité catchall absente |