
Python-PoC und Exploit-Kette für CVE-2026-82531: Smarty-Template-Cache-Poisoning über gefälschte SmartyNocache-Marker, das zu PHP-Codeausführung führt, mit Check, Payload und Docker-Lab.
Python-3-PoC für CVE-2026-82531 — smarty-php/smarty — Code-Injection (CWE-94) über gefälschte SmartyNocache-Marker in extends + Template-Cache-Regenerierung → RCE beim Cache-include().
| Feld | Wert |
|---|---|
| CVE | CVE-2026-82531 |
| Produkt | Smarty PHP-Template-Engine |
| Betroffen | < 4.5.8; 5.0.0 – 5.8.4 |
| Behoben | 4.5.8, 5.8.5 |
| CWE | CWE-94 — Improper Control of Code Generation |
| CVSS 4.0 | 9.2 Critical (CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N) |
| CVSS 3.1 | 8.1 High |
| PoCbit-Katalog | https://pocbit.org/pocs/ |
| PoCbit-Seite | https://pocbit.org/pocs/cve-2026-82531 |
| Verifikationsmarker | POCBIT-82531-OK (Base64-Befehlsausgabe im HTTP-Body) |
| Advisories | GHSA-3w63-v7pm-cq9x |
Exploit-Fokus: poc.py exploit führt Warmlauf → Cache-Leerung → Poisoning (POST name=) → Auslösung aus; check, payload, Docker-lab/ (Smarty 5.8.4). Ausgaben: hits.txt, exploited.txt.
Smarty kompiliert Templates zu PHP und kann gecachte Ausgaben schreiben. Wenn Templates extends: / Block-Vererbung verwenden, kann die kompilierte Top-Level-Funktion nocache_hash ungesetzt lassen, nachdem ein neuer PHP-Worker kompilierte Dateien von der Festplatte lädt.
Während der Cache-Regenerierung erstellt Smarty_Internal_Runtime_UpdateCache einen Regex, der „nocache“-Bereiche aufteilt. Ein null-Hash erzeugt eine leere Regex-Alternative, sodass vom Angreifer kontrollierte assign()-Daten fälschen können:
/*%%SmartyNocache:%%*/ <?php ... ?> /*/%%SmartyNocache:%%*/
Dieser Block wird wörtlich in die generierte PHP-Cache-Datei kopiert (die normale PHP-Tag-Neutralisierung wird übersprungen). Die nächste Anfrage, die die Cache-Datei einbindet, führt das injizierte PHP aus → Remote Code Execution.
exploit-Unterbefehl)| Phase | Aktion |
|---|---|
| 1 Aufwärmen | Gutartiges name=world → Kompilieren + initialer Cache |
| 2 Leeren | Nur Cache-Dateien entfernen (kompilierte Templates bleiben) — das Lab stellt ?lab_clear_cache=1 bereit |
| 3 Vergiften | name=<gefälschtes SmartyNocache + PHP shell_exec> → vergifteter Cache wird geschrieben |
| 4 Auslösen | Gutartiges name=benign → include() führt injiziertes PHP aus; Body enthält POCBIT-82531-OK:<base64> |
Reale Ziele benötigen: Caching aktiviert, extends-Templates, benutzergesteuertes Assign, Cache-Miss, während das Kompilierverzeichnis befüllt ist (TTL, Neustart oder Admin-Flush).
In Anwendungen, die Smarty extends: / Vererbung + Caching verwenden, wird bei nocache_hash null ein vom Angreifer assign-ter gefälschter SmartyNocache-Block als rohes PHP in die Cache-PHP-Datei geschrieben; beim nächsten Request include → RCE. PoCbit-Paket: Docker-Lab + exploit vollständige Kette.
cd CVE-2026-82531
pip install -r requirements.txt
docker compose up --build -d
python poc.py check http://127.0.0.1:8088
python poc.py exploit --url http://127.0.0.1:8088 -c "id"
python poc.py exploit -i targets.example.txt -w 10 -c id
python poc.py payload -c "id"
Nach dem Patchen: alle Template-Cache-Dateien löschen/neu generieren.
Nur autorisierte Sicherheitsforschung und Systeme, die Sie besitzen oder für die Sie eine Testgenehmigung haben.
NocacheHashInjectionTest.php (Smarty 5.8.5)CVE-2026-82531 — Smarty <4.5.8 / 5.x<5.8.5 cache-poisoning RCE (CWE-94, CVSS 4.0 9.2 AT:P). PoCbit PoC: extends+inheritance null nocache_hash → forged SmartyNocache marker in assign() → PHP in cache include. check/exploit/payload, Docker lab 5.8.4, hits.txt & exploited.txt. Fix 4.5.8 / 5.8.5. Marker POCBIT-82531-OK. https://pocbit.org/pocs/cve-2026-82531