
Lab basato su Docker per riprodurre e validare CVE-2026-28496, una vulnerabilità Server-Side Template Injection nel rendering Twig di FOSSBilling, con target di confronto vulnerabili e patchati.
Questo repository contiene un laboratorio Docker locale per riprodurre e validare CVE-2026-28496, una vulnerabilità di Iniezione di Template Lato Server che colpisce il comportamento di rendering dei template Twig di FOSSBilling.
FOSSBilling è una piattaforma di fatturazione e gestione clienti gratuita e open-source. Le versioni precedenti alla 0.8.0 sono affette da un comportamento non sicuro nel rendering dei template Twig, in grado di valutare espressioni di template fornite. In questo laboratorio, FOSSBilling 0.8.0 viene utilizzato come target di confronto corretto.
Questo laboratorio confronta due versioni di FOSSBilling:
| Servizio | Versione FOSSBilling | Scopo | URL |
|---|---|---|---|
| vuln | 0.7.2 | Target di confronto vulnerabile | http://localhost:8081 |
| patched | 0.8.0 | Target di confronto corretto | http://localhost:8082 |
Il percorso di validazione HTTP dimostrato in questo laboratorio locale è:```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
Nel target vulnerabile, la chiamata API restituisce:```json
{"result":"49","error":null}
Nel target corretto, la stessa richiesta restituisce:```json {"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}
Questo laboratorio convalida il comportamento HTTP della versione vulnerabile rispetto a quella corretta utilizzando FOSSBilling 0.7.2 e FOSSBilling 0.8.0.
Il laboratorio è intenzionalmente limitato ai servizi Docker locali. Non ha come bersaglio sistemi esterni e non include web shell, malware, persistenza, callback esterni, dumping di database o payload distruttivi.
## Fatti verificati
| Affermazione | Prova | Come verificare in questo laboratorio |
| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- |
| CVE-2026-28496 colpisce le versioni di FOSSBilling precedenti alla 0.8.0. | Il CVE pubblico e i metadati degli advisory identificano FOSSBilling precedente alla 0.8.0 come colpito da Twig SSTI. | Rivedere la sezione Riferimenti e confrontare le versioni vulnerabile e corretta del target. |
| FOSSBilling 0.7.2 è utilizzato come target vulnerabile di confronto. | Il servizio vulnerabile è costruito dall'immagine Docker ufficiale `fossbilling/fossbilling:0.7.2`. | Ispezionare `vuln/Dockerfile` ed eseguire `docker compose ps -a`. |
| FOSSBilling 0.8.0 è utilizzato come target corretto di confronto. | Il servizio corretto è costruito dall'immagine Docker ufficiale `fossbilling/fossbilling:0.8.0`. | Ispezionare `patched/Dockerfile` ed eseguire `docker compose ps -a`. |
| Il percorso HTTP vulnerabile è `/api/system/system/string_render`. | Il target vulnerabile restituisce JSON con `result: "49"` per `_tpl={{ 7*7 }}`. | Eseguire `python3 poc/poc.py --url http://localhost:8081`. |
| Il target corretto non espone lo stesso comportamento HTTP. | Il target corretto restituisce `Unknown API call system/system/string_render`. | Eseguire `python3 poc/poc.py --url http://localhost:8082`. |
| Il PoC è solo HTTP. | `poc/poc.py` invia richieste HTTP POST e non chiama Docker, Docker Compose, comandi shell o API dei container. | Ispezionare `poc/poc.py`. |
| Il laboratorio installa automaticamente entrambi i target FOSSBilling all'avvio di Docker Compose. | I container sidecar installer one-shot completano la configurazione ed escono con stato 0. | Eseguire `docker compose ps -a` e `docker compose logs installer-vuln installer-patched`. |
| Il target vulnerabile renderizza l'espressione Twig innocua. | La risposta HTTP dalla porta 8081 è `{"result":"49","error":null}`. | Eseguire il comando PoC vulnerabile. |
| Il target corretto non renderizza la stessa espressione attraverso il percorso API testato. | La risposta HTTP dalla porta 8082 è un errore API JSON con codice `879`. | Eseguire il comando PoC corretto. |
## Ipotesi e incognite
Questo laboratorio utilizza FOSSBilling 0.7.2 come target vulnerabile di confronto perché la ricerca pubblica sulle vulnerabilità identifica le versioni di FOSSBilling precedenti alla 0.8.0 come colpite, e la 0.7.2 è l'ultima release vulnerabile utilizzata nella catena testata.
Questo laboratorio utilizza FOSSBilling 0.8.0 come target corretto di confronto perché i metadati degli advisory pubblici identificano la 0.8.0 come la versione corretta.
Questo laboratorio si concentra sul comportamento HTTP osservabile di:```text
POST /api/system/system/string_render
con questo corpo JSON:```json {"_tpl":"{{ 7*7 }}"}
Il laboratorio dimostra che FOSSBilling 0.7.2 renderizza l'espressione Twig fornita attraverso il percorso API HTTP, mentre FOSSBilling 0.8.0 non espone la stessa chiamata API.
Questo laboratorio non sostiene di testare tutte le funzionalità di rendering dei template di FOSSBilling. CVE-2026-28496 riguarda anche altri contesti di rendering Twig, come le funzionalità di rendering dei template disponibili all'interno dell'applicazione.
Questo laboratorio non dimostra l'intera catena di esecuzione remota di codice non autenticata. Valida il comportamento HTTP non autenticato osservato nel target locale FOSSBilling 0.7.2 e lo confronta con FOSSBilling 0.8.0. L'intera catena pubblica coinvolge comportamenti aggiuntivi di autorizzazione API oltre alla validazione sicura dell'espressione Twig mostrata qui.
Il laboratorio non dimostra:
* esecuzione remota di comandi,
* estrazione di credenziali,
* dump del database,
* installazione di estensioni,
* scrittura arbitraria di file,
* persistenza,
* upload di web shell,
* callback esterni,
* attacchi contro sistemi non di laboratorio,
* o attività di post-exploitazione.
## Root Cause Summary
La causa principale di CVE-2026-28496 è il rendering non sicuro dei template Twig.
FOSSBilling utilizza Twig per renderizzare template dinamici. Nelle versioni vulnerabili, una stringa di template fornita può essere passata nella logica di rendering di Twig senza sufficienti restrizioni di sandbox.