
Ein Drop-in-Fix für CVE-2023-29689 - SSTI in PyroCMS, mittels einer benutzerdefinierten Twig-Sandbox-Implementierung
Einsatzbereiter Sicherheitsfix für CVE-2023-29689 – Serverseitige Template-Injection, die in PyroCMS 3.9 zu Remote Code Execution führt.
PyroCMS erlaubt Admin-Benutzern, in der Datenbank gespeicherte Templates zu bearbeiten. Ohne Sandboxing können Angreifer mit Admin-Zugriff bösartigen Twig-Code einschleusen:
{{['id']|map('system')|join}}
Dies führt die Ausführung beliebiger Systembefehle aus. Die Upstream-Maintainer betrachten dies als "working as intended" (absichtlich so vorgesehen), da Admin-Benutzern vertraut wird – aber in Multi-Tenant- oder Unternehmensumgebungen gilt: "Admin" ≠ "vertrauenswürdig für Shell-Zugriff".
Dieses Paket sandboxt automatisch benutzerbearbeitbare Templates, während legitime Theme-/Addon-Templates uneingeschränkt bleiben. Es verwendet Twigs SourcePolicyInterface (vom Autor dieses Pakets als Upstream-Beitrag eingebracht), um selektiv Einschränkungen anzuwenden.
composer require ysaxon/pyrocms-ssti-fix
Leider müssen Sie aufgrund der Deaktivierung der Autoerkennung durch PyroCMS den ServiceProvider selbst hinzufügen.
Das können Sie tun mit
sed -i "/App\\\Providers\\\AppServiceProvider::class,/a \ YSaxon\\\PyroCmsSstiFix\\\SandboxServiceProvider::class," config/app.php
SourcePolicyInterface-Unterstützung)┌─────────────────────────────────────────────────────────────┐
│ Twig Render Request │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ StorageSourcePolicy │
│ │
│ Is template from storage path (database/user-editable)? │
│ │
│ YES ──────────────────► Enable Sandbox │
│ │ - Block: map, filter, reduce │
│ │ - Block: dangerous tags │
│ │ - Whitelist safe operations │
│ │
│ NO ───────────────────► No Sandbox │
│ (Theme/addon templates work │
│ normally) │
└─────────────────────────────────────────────────────────────┘
Die Standardeinstellungen sind sicher und funktionieren für die meisten Installationen. Zur Anpassung:
php artisan vendor:publish --tag=pyrocms-ssti-fix-config
Dies erzeugt config/pyrocms-ssti-fix.php:
return [
// Master switch
'enabled' => env('PYROCMS_SSTI_FIX_ENABLED', true),
// Override auto-detected storage path
'storage_path' => env('PYROCMS_SSTI_FIX_STORAGE_PATH', null),
// Customize allowed tags/filters/functions/methods/properties
'policy' => [
'tags' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
'filters' => [SecurityPolicyDefaults::INCLUDE_DEFAULTS],
// ... see config file for full options
],
];
Die standardmäßige Sicherheitsrichtlinie blockiert diese gefährlichen Funktionen in gesandboxten Templates:
map – {{['cmd']|map('system')}} führt Shell-Befehle ausfilter – Kann beliebige PHP-Funktionen aufrufenreduce – Kann beliebige PHP-Funktionen aufrufeninclude, extends, block, macro, import, embed, usesource – Liest beliebige Dateiinhalteinclude – Bindet andere Templates eintemplate_from_string – Erstellt Templates aus ZeichenkettenSichere Operationen bleiben in gesandboxten Templates verfügbar:
{# Variables #}
{{ entry.title }}
{{ user.name|upper }}
{# Loops and conditionals #}
{% for item in items %}
{% if item.active %}
{{ item.name }}
{% endif %}
{% endfor %}
{# Safe filters #}
{{ text|escape }}
{{ date|date('Y-m-d') }}
{{ items|length }}
{{ name|lower|trim }}
{# Safe functions #}
{{ max(a, b) }}
{{ random(['red', 'blue', 'green']) }}
Wenn Ihre Admin-Templates legitimerweise zusätzliche Funktionen benötigen:
// config/pyrocms-ssti-fix.php
'policy' => [
'filters' => [
SecurityPolicyDefaults::INCLUDE_DEFAULTS,
'my_custom_filter', // Add specific filter
],
'methods' => [
SecurityPolicyDefaults::INCLUDE_DEFAULTS,
'App\Models\Post' => ['getTitle', 'getSummary'],
],
],
Überprüfen Sie nach der Installation, ob der Exploit blockiert wird:
{{['id']|map('system')|join}}Vor dem Fix: Zeigt Ausgabe des id-Befehls (oder Absturz)
Nach dem Fix: Zeigt Fehler oder [rendering failed: Filter "map" is not allowed.]
Das Paket konnte Twig nicht finden. Das bedeutet normalerweise:
Aktivieren Sie den Debug-Modus, um Details zu sehen:
PYROCMS_SSTI_FIX_DEBUG=true
Wenn admin-bearbeitbare Templates Funktionen verwenden, die nun blockiert werden:
Das Paket cacht alle Pfadprüfungen sowie Methoden-/Eigenschaftsabfragen. Im auto-Modus verursachen nur Storage-Path-Templates Sandbox-Overhead.
SourcePolicyInterface zu TwigMIT-Lizenz – siehe Datei LICENSE.