
Una correzione pronta all'uso per CVE-2023-29689 - SSTI in PyroCMS, tramite un'implementazione personalizzata del Sandbox di Twig
Correzione di sicurezza immediata per CVE-2023-29689 - Iniezione di template lato server che porta all'esecuzione di codice remoto in PyroCMS 3.9.
PyroCMS consente agli utenti amministratori di modificare i template memorizzati nel database. Senza sandboxing, gli aggressori con accesso admin possono iniettare codice Twig dannoso:
{{['id']|map('system')|join}}
Questo esegue comandi di sistema arbitrari. I manutentori a monte considerano questo comportamento come "funzionante come previsto" poiché gli utenti admin sono considerati affidabili - ma in ambienti multi-tenant o aziendali, "admin" non significa "affidabile per l'accesso alla shell".
Questo pacchetto applica automaticamente il sandboxing ai template modificabili dall'utente, lasciando illimitati i template legittimi di temi/plugin. Utilizza SourcePolicyInterface di Twig (contribuito a monte dall'autore di questo pacchetto) per applicare selettivamente le restrizioni.
composer require ysaxon/pyrocms-ssti-fix
Purtroppo, a causa della disattivazione dell'autodiscovery da parte di PyroCMS, dovrai aggiungere tu stesso il serviceProvider.
Puoi farlo con
sed -i "/App\\\Providers\\\AppServiceProvider::class,/a \ YSaxon\\\PyroCmsSstiFix\\\SandboxServiceProvider::class," config/app.php
SourcePolicyInterface)┌─────────────────────────────────────────────────────────────┐
│ 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) │
└─────────────────────────────────────────────────────────────┘
Le impostazioni predefinite sono sicure e funzionano per la maggior parte delle installazioni. Per personalizzare:
php artisan vendor:publish --tag=pyrocms-ssti-fix-config
Questo crea 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
],
];
La politica di sicurezza predefinita blocca queste funzionalità pericolose nei template con sandbox:
map - {{['cmd']|map('system')}} esegue comandi di shellfilter - Può chiamare funzioni PHP arbitrariereduce - Può chiamare funzioni PHP arbitrarieinclude, extends, block, macro, import, embed, usesource - Legge il contenuto di file arbitrariinclude - Include altri templatetemplate_from_string - Crea template da stringheLe operazioni sicure rimangono disponibili nei template con sandbox:
{# 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']) }}
Se i tuoi template admin necessitano legittimamente di funzionalità aggiuntive:
// 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'],
],
],
Dopo l'installazione, verifica che l'exploit sia bloccato:
{{['id']|map('system')|join}}Prima della correzione: Mostra l'output del comando id (o crash)
Dopo la correzione: Mostra un errore o [rendering failed: Filter "map" is not allowed.]
Il pacchetto non è riuscito a trovare Twig. Questo di solito significa:
Abilita la modalità debug per vedere i dettagli:
PYROCMS_SSTI_FIX_DEBUG=true
Se i template modificabili dagli admin utilizzano funzionalità ora bloccate:
Il pacchetto memorizza nella cache tutti i controlli dei percorsi e le ricerche di metodi/proprietà. In modalità auto, solo i template nel percorso di storage subiscono l'overhead del sandbox.
SourcePolicyInterface a TwigLicenza MIT - vedi file LICENSE.