
Docker-basiertes Labor zur Reproduktion und Validierung von CVE-2026-28496, einer Server-seitigen Template-Injection-Schwachstelle in der Twig-Wiedergabe von FOSSBilling, mit Zielen für den Vergleich von anfälligen und gepatchten Versionen.
Dieses Repository enthält ein lokales Docker-Labor zur Reproduktion und Validierung von CVE-2026-28496, einer Sicherheitslücke durch serverseitige Template-Injection, die das Twig-Template-Rendering-Verhalten von FOSSBilling betrifft.
FOSSBilling ist eine kostenlose Open-Source-Abrechnungs- und Kundenverwaltungsplattform. Versionen vor 0.8.0 sind von unsicherem Twig-Template-Rendering-Verhalten betroffen, das bereitgestellte Template-Ausdrücke auswerten kann. FOSSBilling 0.8.0 wird in diesem Labor als gepatchtes Vergleichsziel verwendet.
Dieses Labor vergleicht zwei FOSSBilling-Versionen:
| Dienst | FOSSBilling-Version | Zweck | URL |
|---|---|---|---|
| vuln | 0.7.2 | Verwundbares Vergleichsziel | http://localhost:8081 |
| patched | 0.8.0 | Gepatchtes Vergleichsziel | http://localhost:8082 |
Der demonstrierte HTTP-Validierungspfad in diesem lokalen Labor ist:```text Unauthenticated HTTP request in this local FOSSBilling 0.7.2 lab → POST /api/system/system/string_render → JSON body contains _tpl={{ 7*7 }} → vulnerable target renders the Twig expression → patched target does not expose the same tested API behavior
Im verwundbaren Ziel gibt der API-Aufruf zurück:```json
{"result":"49","error":null}
Im gepatchten Ziel gibt dieselbe Anfrage zurück:```json {"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}
Diese Laborumgebung validiert das anfällige im Vergleich zum gepatchten HTTP-Verhalten mittels FOSSBilling 0.7.2 und FOSSBilling 0.8.0.
Die Laborumgebung ist absichtlich auf lokale Docker-Dienste beschränkt. Sie richtet sich nicht gegen externe Systeme und enthält keine Webshells, Malware, Persistenz, externe Callbacks, Datenbank-Dumps oder zerstörerische Payloads.
## Verifizierte Fakten
| Behauptung | Nachweis | Wie im Labor zu überprüfen |
| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------- |
| CVE-2026-28496 betrifft FOSSBilling-Versionen vor 0.8.0. | Öffentliche CVE- und Advisory-Metadaten identifizieren FOSSBilling vor 0.8.0 als von Twig SSTI betroffen. | Lesen Sie den Referenzbereich und vergleichen Sie die anfälligen und gepatchten Zielversionen.|
| FOSSBilling 0.7.2 wird als anfälliges Vergleichsziel verwendet. | Der anfällige Dienst wird aus dem offiziellen `fossbilling/fossbilling:0.7.2` Docker-Image erstellt. | Überprüfen Sie `vuln/Dockerfile` und führen Sie `docker compose ps -a` aus. |
| FOSSBilling 0.8.0 wird als gepatchtes Vergleichsziel verwendet. | Der gepatchte Dienst wird aus dem offiziellen `fossbilling/fossbilling:0.8.0` Docker-Image erstellt. | Überprüfen Sie `patched/Dockerfile` und führen Sie `docker compose ps -a` aus. |
| Der anfällige HTTP-Pfad ist `/api/system/system/string_render`. | Das anfällige Ziel gibt JSON mit `result: "49"` für `_tpl={{ 7*7 }}` zurück. | Führen Sie `python3 poc/poc.py --url http://localhost:8081` aus. |
| Das gepatchte Ziel zeigt nicht dasselbe HTTP-Verhalten. | Das gepatchte Ziel gibt `Unknown API call system/system/string_render` zurück. | Führen Sie `python3 poc/poc.py --url http://localhost:8082` aus. |
| Der Proof-of-Concept (PoC) ist rein HTTP-basiert. | `poc/poc.py` sendet HTTP-POST-Anfragen und ruft keine Docker-, Docker-Compose-, Shell-Befehle oder Container-APIs auf.| Überprüfen Sie `poc/poc.py`. |
| Das Labor installiert beide FOSSBilling-Ziele automatisch beim Start von Docker Compose. | Die One-Shot-Installer-Seitencontainer schließen die Einrichtung ab und beenden mit Status 0. | Führen Sie `docker compose ps -a` und `docker compose logs installer-vuln installer-patched` aus.|
| Das anfällige Ziel rendert den harmlosen Twig-Ausdruck. | Die HTTP-Antwort von Port 8081 ist `{"result":"49","error":null}`. | Führen Sie den anfälligen PoC-Befehl aus. |
| Das gepatchte Ziel rendert denselben Ausdruck nicht über den getesteten API-Pfad. | Die HTTP-Antwort von Port 8082 ist ein JSON-API-Fehler mit Code `879`. | Führen Sie den gepatchten PoC-Befehl aus. |
## Annahmen und Unbekanntes
Dieses Labor verwendet FOSSBilling 0.7.2 als anfälliges Vergleichsziel, da öffentliche Sicherheitsforschung FOSSBilling-Versionen vor 0.8.0 als betroffen identifiziert und 0.7.2 die neueste anfällige Version in der getesteten Kette ist.
Dieses Labor verwendet FOSSBilling 0.8.0 als gepatchtes Vergleichsziel, da öffentliche Advisory-Metadaten 0.8.0 als die gepatchte Version ausweisen.
Dieses Labor konzentriert sich auf das beobachtbare HTTP-Verhalten von:```text
POST /api/system/system/string_render
mit diesem JSON-Textkörper:```json {"_tpl":"{{ 7*7 }}"}
Das Labor zeigt, dass FOSSBilling 0.7.2 den bereitgestellten Twig-Ausdruck über den HTTP-API-Pfad rendert, während FOSSBilling 0.8.0 denselben API-Aufruf nicht bereitstellt.
Dieses Labor erhebt nicht den Anspruch, jede FOSSBilling-Vorlagen-Rendering-Funktion zu testen. CVE-2026-28496 bezieht sich auch auf andere Twig-Rendering-Kontexte, wie zum Beispiel Vorlagen-Rendering-Funktionen, die innerhalb der Anwendung verfügbar sind.
Dieses Labor demonstriert nicht die vollständige unauthentifizierte Remote-Codeausführungskette. Es validiert das beobachtete unauthentifizierte HTTP-Verhalten im lokalen FOSSBilling 0.7.2-Ziel und vergleicht es mit FOSSBilling 0.8.0. Die vollständige öffentliche Kette beinhaltet zusätzliches API-Autorisierungsverhalten über die hier gezeigte sichere Twig-Ausdrucksvalidierung hinaus.
Das Labor demonstriert nicht:
* Remote-Befehlsausführung,
* Extraktion von Anmeldeinformationen,
* Datenbank-Dumping,
* Installation von Erweiterungen,
* Beliebiges Dateischreiben,
* Persistenz,
* Web-Shell-Upload,
* Externe Rückrufe,
* Angriffe auf Nicht-Lab-Systeme,
* oder Post-Exploitation-Aktivität.
## Zusammenfassung der Ursache
Die Ursache von CVE-2026-28496 ist unsicheres Twig-Vorlagen-Rendering.
FOSSBilling verwendet Twig, um dynamische Vorlagen zu rendern. In anfälligen Versionen kann ein bereitgestellter Vorlagenstring ohne ausreichende Sandbox-Einschränkungen in die Twig-Rendering-Logik übergeben werden.