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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cve-2026-100671-poc — Vérificateur de preuve de concept local uniquement pour CVE-2026-100671, reproduisant la divulgation et le rejeu du cookie de session du cache de pages Twig de Grav contre des cibles loopback. | Kitploit
Outils/GitHubGitHub/canhieu/cve-2026-100671-poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebVirtualisation de SécuritéSécurité WebTests d'Intrusion
GitHubcanhieu/cve-2026-100671-poc

cve-2026-100671-poc

Vérificateur de preuve de concept local uniquement pour CVE-2026-100671, reproduisant la divulgation et le rejeu du cookie de session du cache de pages Twig de Grav contre des cibles loopback.

Voir le dépôt
6il y a 2 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

CVE-2026-100671 — Divulgation du cookie de session via Twig dans Grav

Vérificateur minimal, local uniquement, pour la prise de contrôle de session via le cache de contenu Twig/page de Grav, corrigée dans Grav 2.0.25.

Avis :

  • CVE-2026-100671
  • GHSA-pp89-h475-7gj6
  • Version Grav 2.0.25

Périmètre

exploit.py est délibérément restreint aux cibles loopback :

  • 127.0.0.1
  • ::1
  • localhost

Il refuse les hôtes distants, ne suit que les redirections loopback, utilise les clients HTTP de la bibliothèque standard Python, applique des délais d'attente aux requêtes et n'affiche jamais les jetons bearer, les cookies ou les corps de réponse.

À utiliser uniquement contre une instance Grav que vous possédez ou que vous êtes explicitement autorisé à tester. Le script crée une page de preuve publique dans le laboratoire local. Supprimez cette page après les tests si le laboratoire conserve le contenu entre les exécutions.

Chaîne de vulnérabilité

  1. Un rédacteur de page à faibles privilèges publie du contenu contenant du Twig sandboxé.
  2. get_cookie() lit côté serveur le cookie de session de l'administrateur visiteur.
  3. Grav stocke la sortie de la page post-Twig dans un cache sans identité de session.
  4. Une requête non authentifiée reçoit la valeur du cookie mise en cache.
  5. Le rejeu de cette valeur contre l'API locale authentifie en tant qu'administrateur.

Le compte de rédaction de page n'a besoin que du chemin d'écriture à faibles privilèges documenté. Il n'a pas besoin de api.pages.read, admin.* ni d'un accès super-admin. L'administrateur victime doit seulement visiter la page publique une fois.

Versions affectées

  • Grav 2.0.19 à 2.0.24 : vulnérable avec la configuration par défaut du contenu Twig livrée.
  • Grav 2.0.0 à 2.0.18, et 1.7.x : affecté uniquement lorsque le contenu Twig était explicitement activé.
  • Grav 2.0.25 : corrigé.

Prérequis du laboratoire

Exécutez un laboratoire Grav local avec :

  • le plugin Grav API activé ;
  • le plugin Grav Login activé ;
  • un compte rédacteur à faibles privilèges capable d'obtenir un jeton API et de créer des pages ;
  • un compte administrateur ;
  • la route de la page cible lisible publiquement.

Ce dépôt à deux fichiers ne provisionne ni Grav, ni PHP, ni plugins, ni comptes.

Exécution

Définissez les identifiants via des variables d'environnement afin qu'ils n'entrent jamais dans le contrôle de source :

export GRAV_BASE_URL=http://127.0.0.1:8080
export GRAV_WRITER_USERNAME=low
export GRAV_WRITER_PASSWORD='local-writer-password'
export GRAV_ADMIN_USERNAME=admin
export GRAV_ADMIN_PASSWORD='local-admin-password'

python3 exploit.py

L'URL de base doit rester en loopback. La route par défaut est aléatoire. Une route fixe peut être sélectionnée lors de la comparaison des exécutions :

python3 exploit.py --route /cookie-proof-24

Résultat vulnérable attendu :

page_create_status=201
admin_login_status=200
victim_page_status=200
attacker_page_status=200
cached_victim_cookie_visible_to_attacker=yes
admin_cookie_value_match=yes
replayed_cookie_api_status=200
result=VULNERABLE

La commande se termine avec le code 0 lorsque le résultat attendu est reproduit, 1 lorsqu'il ne l'est pas, et 2 en cas d'erreur de configuration ou de transport.

Vérification de la version corrigée

Exécutez la même commande contre Grav 2.0.25 :

python3 exploit.py --expect fixed

Comportement corrigé attendu : aucune valeur de session visible par l'attaquant et aucun rejeu de session réussi. Un résultat corrigé propre se termine avec le code 0 avec --expect fixed.

Remédiation

Mettez à niveau vers Grav 2.0.25 ou une version ultérieure. Pour les déploiements plus anciens, l'avis liste ces contrôles temporaires :

  • désactiver le contenu Twig avec security.twig_content.process_enabled: false ; ou
  • définir system.pages.never_cache_twig: true ;
  • vider les caches Grav existants ;
  • renouveler les sessions administrateur.

Ne considérez pas HttpOnly, Secure ou SameSite comme un correctif : la lecture vulnérable du cookie se produit côté serveur pendant le rendu Twig.

Divulgation

Signalé par canhieu. Ce dépôt est une aide à la reproductibilité pour l'avis déjà public, et non un scanner distant ni un outil de collecte d'identifiants.

Télécharger l’outil