Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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
sudotimewarp-cve-2026-96512- — Scripts de reproduction et de PoC pour CVE-2026-96512 (SudoTimeWarp), où le TZ de l'appelant décale les fenêtres NOTBEFORE/NOTAFTER de sudoers, ainsi que des vérifications d'atténuation. | Kitploit
Outils/GitHubGitHub/ermensonx/sudotimewarp-cve-2026-96512-
Outils DéfensifsEscalade de PrivilègesAnalyse des VulnérabilitésExploitationAudit de ConfigurationTests d'IntrusionApprentissage et Éducation
GitHub
ermensonx/sudotimewarp-cve-2026-96512-

sudotimewarp-cve-2026-96512-

Scripts de reproduction et de PoC pour CVE-2026-96512 (SudoTimeWarp), où le TZ de l'appelant décale les fenêtres NOTBEFORE/NOTAFTER de sudoers, ainsi que des vérifications d'atténuation.

Voir le dépôt
il y a 22h 59mPas 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

SudoTimeWarp — CVE-2026-96512

sudo : le TZ de l'appelant décide de NOTBEFORE/NOTAFTER

Matériel de reproduction pour SudoTimeWarp (CVE-2026-96512). Une règle sudoers dont l'horodatage Date_Spec omet le Z final est convertie par mktime(), qui relit getenv("TZ") à chaque appel. Comme sudo est setuid-root et que l'environ de l'appelant traverse execve() intact, l'appelant non privilégié choisit le fuseau horaire dans lequel sa propre fenêtre de validité est évaluée.

NomSudoTimeWarp
CVECVE-2026-96512
CVSS v3.1AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H — 7.8 Élevé
CWECWE-863 (enregistré) ; le mécanisme est CWE-807
Affectésudo 1.8.20 jusqu'à 1.9.17p2, et main avant 1820a349
Corrigé dans1820a349 (2026-08-29)
Décalagejusqu'à 24 h 59 m 59 s par direction ; intervalle total 49 h 59 m 58 s

Ce dont il s'agit réellement

Le problème de base — TZ influence NOTBEFORE/NOTAFTER — a été signalé en privé par l'XlabAI Team of Tencent Xuanwu Lab, l'Atuin Automated Vulnerability Discovery Engine, et Guannan Wang, Zhanpeng Liu et Guancheng Li, et crédité dans le commit db669167c (2026-03-14).

SudoTimeWarp (CVE-2026-96512) est la découverte que db669167c est incomplet. La protection qu'il installe couvre le cache de fuseaux horaires de glibc — et avec lui les horodatages des journaux — mais n'atteint pas le mktime() à gentime.c:156, où l'autorisation est décidée. Sur un arbre qui contient déjà ce commit, le décalage de fenêtre reste entièrement reproductible. Le mainteneur consigne ce point dans le message de 1820a349 :

le changement précédent « n'était pas efficace puisque la fonction mktime() relit la variable d'environnement TZ à chaque appel »

Précondition

Une règle sudoers qui (1) accorde une commande à l'appelant, (2) porte NOTBEFORE= ou NOTAFTER=, et (3) écrit l'horodatage sans suffixe Z et sans décalage explicite.

Le point (3) n'est pas exotique : le manuel sudoers documente la forme sans suffixe comme une extension prise en charge, affiche 20151201235900 comme l'un de ses quatre horodatages d'exemple (docs/sudoers.man.in:1820), et la forme apparaît dans le corpus de régression du projet lui-même (plugins/sudoers/regress/testsudoers/test13.sh).

L'exécuter

Toujours dans un conteneur ou une VM jetable. Chaque script ici réécrit /etc/sudoers. Ils le sauvegardent et le restaurent, mais une erreur là-dedans vous enferme hors d'une vraie machine — les scripts refusent de s'exécuter hors d'un conteneur sauf si vous passez --i-know.

root@kitploit:~
docker build -t sudotimewarp .
docker run --rm -it sudotimewarp

Ou sans construire d'image :

root@kitploit:~
docker run --rm -it -v "$PWD:/m" debian:trixie bash -c \
  'apt-get update >/dev/null && apt-get install -y sudo >/dev/null && bash /m/poc.sh'

Sortie attendue sur une version affectée :

root@kitploit:~
=== probes ===
  rule valid,   no TZ      : uid=0(root) gid=0(root) groups=0(root)
  rule expired, no TZ      : sudo: a password is required
  rule expired, TZ=UTC     : sudo: a password is required
  rule expired, TZ=XXX24   : uid=0(root) gid=0(root) groups=0(root)
  expired + 'Z', TZ=XXX24  : sudo: a password is required

XXX est une abréviation de fuseau horaire arbitraire de trois lettres et 24 est un décalage POSIX. Aucun fichier n'est impliqué et aucun n'a besoin d'exister — le canal exploitable est uniquement la chaîne POSIX en ligne. La forme tzfile (TZ=:/tmp/evil.tz et variantes) est refusée par la garde __libc_enable_secure de glibc sous setuid et mesure exactement 0 s de décalage, ce qui distingue ceci de CVE-2014-9680.

Lire les sondes

Les lignes 1–3 sont des témoins, et ils comptent : une erreur d'analyse produirait le même ALLOW que le bug.

LigneVérifie
1La règle fonctionne du tout dans sa fenêtre
2Le refus en l'absence de la ligne 4 provient bien de NOTAFTER
3Définir TZ n'est pas en soi la cause — TZ=UTC décide comme sans TZ
4Le bug : la règle expirée s'exécute en root
5La frontière : avec le Z documenté, la branche timegm() est prise et il meurt

poc.sh sort 0 si affecté, 1 sinon, 2 si les témoins n'ont pas tenu.

La version en deux parties

poc.sh utilise NOPASSWD pour pouvoir s'exécuter sans interaction. Ce n'est pas une condition du bug. Les scripts séparés montrent explicitement la frontière de privilèges — la partie 1 ne fait que ce qu'un administrateur fait légitimement, la partie 2 s'exécute en tant qu'utilisateur non privilégié et n'utilise aucun privilège d'aucune sorte :

root@kitploit:~
bash repro-admin.sh escalation        # as root: writes the policy
su - poc -c 'bash /poc/repro-attacker.sh'
bash repro-admin.sh --cleanup

repro-admin.sh prend quatre scénarios :

ScénarioPolitique
expired (par défaut)une règle, NOTAFTER une heure dans le passé, sans zone
validla même règle encore dans sa fenêtre — témoin
expired-zla même règle expirée avec le Z documenté — témoin, forme non affectée
escalationune autorisation permanente étroite plus une large expirée — la forme que prend réellement une autorisation de maintenance ou d'urgence

Avec une règle exigeant un mot de passe, l'appelant s'authentifie toujours via PAM, et un mauvais mot de passe échoue toujours. Ce n'est pas un contournement d'authentification — ce qui bouge est la décision d'autorisation.

Portée

  • Pas un contournement d'authentification. PAM continue d'exiger et de valider le mot de passe.
  • Pas une escalade depuis aucun privilège. Un utilisateur sans règle sudoers ne gagne rien ; le bug restaure une autorisation qui existait déjà. D'où PR:L, pas PR:N.
  • Pas illimité dans le temps. Une règle expirée il y a des semaines n'est pas atteignable. Mesuré : quatre jours après expiration, les deux valeurs TZ maximales refusent.
  • Lorsque la règle datée accorde une seule commande non échappable, l'impact est borné par cette autorisation (environ C:L/I:N/A:N). Le vecteur 7.8 note le cas où la règle datée est plus large que l'accès permanent de l'appelant.

La borne d'environ 25 h s'applique à la fenêtre d'accès, pas à la durée de l'impact : une utilisation réussie à l'intérieur suffit à établir une persistance qui survit à la fenêtre.

Atténuation sans mise à niveau

Ajoutez Z à chaque horodatage NOTBEFORE/NOTAFTER — cela force la branche timegm().

root@kitploit:~
grep -rE 'NOT(BEFORE|AFTER)=' /etc/sudoers /etc/sudoers.d/

N'auditez pas avec sudo -l. Il formate chaque Date_Spec via gmtime() et ajoute toujours un Z (plugins/sudoers/display.c:229), donc une règle écrite NOTAFTER=20260827221423 est affichée comme NOTAFTER=20260827221423Z. La sortie normalise exactement le détail qui la décide. cvtsudoers et fmtsudoers se comportent de la même manière. Lisez /etc/sudoers directement.

Références

  • Red Hat (CNA) : https://access.redhat.com/security/cve/CVE-2026-96512
  • Commit de correction 1820a349 : https://github.com/sudo-project/sudo/commit/1820a349687522f51023d1ae5925125f59679a8c
  • oss-security : http://www.openwall.com/lists/oss-security/2026/09/24/4
  • CVE Program : https://www.cve.org/CVERecord?id=CVE-2026-96512

Divulgation

Signalé au mainteneur le 2026-08-28, sans échéance. Un correctif candidat est revenu le même jour ; la correction publique est arrivée le 2026-08-29. CVE attribué par Red Hat, agissant comme CNA-LR, et publié le 2026-09-23. Il n'y a pas d'embargo : tout ici est public depuis le commit de correction.

Crédit

SudoTimeWarp / CVE-2026-96512 : Ermenson Junior, recherche indépendante, enregistrée par Red Hat comme « Independent security research ». Le rapport original du problème sous-jacent appartient à l'XlabAI Team of Tencent Xuanwu Lab, l'Atuin Automated Vulnerability Discovery Engine, et Guannan Wang, Zhanpeng Liu et Guancheng Li.

Publié pour un usage défensif : vérifier si un hôte est affecté, et valider l'atténuation Z.

Télécharger l’outil