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
pyrocms-ssti-fix — Un correctif prêt à l'emploi pour CVE-2023-29689 - SSTI dans PyroCMS, via une implémentation personnalisée de Twig Sandbox | Kitploit
Outils/GitHubGitHub/ysaxon/pyrocms-ssti-fix
Outils DéfensifsAnalyse des VulnérabilitésAnalyse de CodeExploitation d'Applications WebSécurité WebMauvaise Configuration
GitHubysaxon/pyrocms-ssti-fix

pyrocms-ssti-fix

Un correctif prêt à l'emploi pour CVE-2023-29689 - SSTI dans PyroCMS, via une implémentation personnalisée de Twig Sandbox

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

Packagist Version

🛡️ Correctif SSTI pour PyroCMS

Correctif de sécurité immédiat pour CVE-2023-29689 - Injection de modèles côté serveur conduisant à l'exécution de code à distance dans PyroCMS 3.9.

Le problème

PyroCMS permet aux utilisateurs administrateurs de modifier les modèles stockés dans la base de données. Sans bac à sable, les attaquants disposant d'un accès administrateur peuvent injecter du code Twig malveillant :

root@kitploit:~
{{['id']|map('system')|join}}

Cela exécute des commandes système arbitraires. Les mainteneurs en amont considèrent cela comme « fonctionnant comme prévu » puisque les administrateurs sont considérés comme fiables – mais dans des environnements multi-locataires ou d'entreprise, « administrateur » ne signifie pas « digne de confiance avec un accès shell ».

La solution

Ce paquet met automatiquement en bac à sable les modèles modifiables par l'utilisateur tout en laissant les modèles légitimes de thèmes/extensions sans restriction. Il utilise SourcePolicyInterface de Twig (contribution en amont de l'auteur de ce paquet) pour appliquer sélectivement des restrictions.

Installation

root@kitploit:~
composer require ysaxon/pyrocms-ssti-fix

Malheureusement, en raison du désactiver l'auto-découverte de PyroCMS, vous devrez ajouter vous-même le serviceProvider.

Vous pouvez le faire avec

root@kitploit:~
sed -i "/App\\\Providers\\\AppServiceProvider::class,/a \        YSaxon\\\PyroCmsSstiFix\\\SandboxServiceProvider::class," config/app.php

Prérequis

  • PHP 7.4+ ou 8.0+
  • Twig 2.16+ ou 3.9+ (pour le support de SourcePolicyInterface)
  • Laravel 6.0+ / PyroCMS 3.x

Comment ça fonctionne

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│                    Requête de rendu Twig                      │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    StorageSourcePolicy                       │
│                                                              │
│  Le modèle provient-il du chemin de stockage (base de        │
│  données / modifiable par l'utilisateur) ?                   │
│                                                              │
│     OUI ──────────────────►  Activer le bac à sable          │
│      │                       - Bloquer : map, filter, reduce │
│      │                       - Bloquer : balises dangereuses │
│      │                       - Liste blanche opérations sûres│
│                                                              │
│     NON ───────────────────►  Pas de bac à sable             │
│                              (Les modèles thèmes/extensions   │
│                               fonctionnent normalement)      │
└─────────────────────────────────────────────────────────────┘

Configuration (optionnelle)

Les paramètres par défaut sont sécurisés et fonctionnent pour la plupart des installations. Pour personnaliser :

root@kitploit:~
php artisan vendor:publish --tag=pyrocms-ssti-fix-config

Ceci crée config/pyrocms-ssti-fix.php :

root@kitploit:~
return [
    // Interrupteur principal
    'enabled' => env('PYROCMS_SSTI_FIX_ENABLED', true),

    // Surcharger le chemin de stockage détecté automatiquement
    'storage_path' => env('PYROCMS_SSTI_FIX_STORAGE_PATH', null),

    // Personnaliser les balises/filtres/fonctions/méthodes/propriétés autorisés
    'policy' => [
        'tags' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
        'filters' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
        // ... voir le fichier de configuration pour toutes les options
    ],
];

Ce qui est bloqué

La politique de sécurité par défaut bloque ces fonctionnalités dangereuses dans les modèles en bac à sable :

Filtres (vecteurs d'exécution de code)

  • map - {{['cmd']|map('system')}} exécute des commandes shell
  • filter - Peut appeler des fonctions PHP arbitraires
  • reduce - Peut appeler des fonctions PHP arbitraires

Balises (attaques par inclusion)

  • include, extends, block, macro, import, embed, use

Fonctions

  • source - Lit le contenu de fichiers arbitraires
  • include - Inclut d'autres modèles
  • template_from_string - Crée des modèles à partir de chaînes

Ce qui est autorisé

Les opérations sûres restent disponibles dans les modèles en bac à sable :

root@kitploit:~
{# Variables #}
{{ entry.title }}
{{ user.name|upper }}

{# Boucles et conditions #}
{% for item in items %}
    {% if item.active %}
        {{ item.name }}
    {% endif %}
{% endfor %}

{# Filtres sûrs #}
{{ text|escape }}
{{ date|date('Y-m-d') }}
{{ items|length }}
{{ name|lower|trim }}

{# Fonctions sûres #}
{{ max(a, b) }}
{{ random(['red', 'blue', 'green']) }}

Étendre la liste blanche

Si vos modèles d'administration ont légitimement besoin de fonctionnalités supplémentaires :

root@kitploit:~
// config/pyrocms-ssti-fix.php
'policy' => [
    'filters' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'mon_filtre_personnalisé',  // Ajouter un filtre spécifique
    ],
    'methods' => [
        SecurityPolicyDefaults::INCLUDE_DEFAULTS,
        'App\Models\Post' => ['getTitle', 'getSummary'],
    ],
],

Tester le correctif

Après installation, vérifiez que l'exploit est bloqué :

  1. Allez dans l'admin PyroCMS → Utilisateurs → Rôles
  2. Modifiez le champ description d'un rôle
  3. Saisissez : {{['id']|map('system')|join}}
  4. Enregistrez et visualisez

Avant le correctif : Affiche la sortie de la commande id (ou plante) Après le correctif : Affiche une erreur ou [rendering failed: Filter "map" is not allowed.]

Dépannage

« Twig introuvable dans le conteneur »

Le paquet n'a pas trouvé Twig. Cela signifie généralement que :

  • PyroCMS/streams-platform n'est pas complètement chargé
  • Vous n'êtes pas dans un environnement PyroCMS

Activez le mode débogage pour voir les détails :

root@kitploit:~
PYROCMS_SSTI_FIX_DEBUG=true

Modèles légitimes qui se cassent

Si des modèles modifiables par l'administrateur utilisent des fonctionnalités désormais bloquées :

  1. Consultez les logs pour savoir quelle fonctionnalité a été bloquée
  2. Ajoutez-la à la liste blanche dans la configuration (si sûr)
  3. Ou refactorisez le modèle pour utiliser des fonctionnalités autorisées

Problèmes de performance

Le paquet met en cache toutes les vérifications de chemin et les recherches de méthodes/propriétés. En mode auto, seuls les modèles du chemin de stockage subissent la surcharge du bac à sable.

Notes de sécurité

  • Ce paquet ne corrige pas le problème architectural sous-jacent (Twig rendant une entrée utilisateur)
  • Il atténue l'exploitation en restreignant ce que les modèles en bac à sable peuvent faire
  • Les utilisateurs administrateurs peuvent toujours créer des modèles ennuyeux ; ils ne peuvent simplement pas exécuter de code à distance
  • Envisagez un renforcement supplémentaire (règles WAF, CSP, etc.) pour une défense en profondeur

Crédits

  • Yaakov Saxon - Auteur du paquet, contributeur de SourcePolicyInterface à Twig
  • Twig PR #3893 - Contribution en amont permettant un bac à sable sélectif

Licence

Licence MIT - voir le fichier LICENSE.

Liens connexes

  • CVE-2023-29689 - Entrée NVD
  • GHSA-w7vm-4v3j-vgpw - Avis GitHub
  • Documentation du bac à sable Twig
Télécharger l’outil