GHSA-38CW-85XC-XR9X:身份危机:通过 SQL 注入导出 Veramo 的数字钱包
发布: (2026年1月17日 GMT+8 09:03)
3 min read
原文: Dev.to
Source: Dev.to
漏洞概述
- 漏洞编号: GHSA-38CW-85XC-XR9X
- CVE: 无
- CVSS 评分: 6.8(中等)
- 发布时间: 2026-01-16
- CWE: CWE‑89(SQL 注入)
- 攻击向量: 网络(已认证)
- 影响: 高 – 私钥和可验证凭证的机密性与完整性
Veramo 框架的数据存储层存在一个关键的 SQL 注入缺陷。已认证的攻击者可以在 API 请求中操纵 order 参数,使 ORM 执行任意 SQL 并导出整个数据库,包括 DID、私钥和可验证凭证。
受影响的组件
| 包 | 受影响版本 | 已修复版本 |
|---|---|---|
@veramo/data-store | < 6.0.2 | 6.0.2 |
@veramo/data-store-json | < 6.0.2 | 6.0.2 |
存在漏洞的函数是 decorateQB(),位于 data-store-orm.ts 中。
修补细节
--- a/packages/data-store/src/data-store-orm.ts
+++ b/packages/data-store/src/data-store-orm.ts
@@ -1,4 +1,5 @@
+import { ALLOWED_COLUMNS } from './constants'
...
- qb = qb.addSelect(
- qb.connection.driver.escape(tableName) + '.' + qb.connection.driver.escape(item.column),
- item.column,
- )
+ if (!ALLOWED_COLUMNS.includes(item.column)) {
+ throw new Error('Invalid column')
+ }
关键更改
- 新增列名白名单(
ALLOWED_COLUMNS)。 - 当请求的列不在白名单中时,ORM 将抛出错误,从而阻止恶意的排序子句。
修复步骤
-
升级包
# 使用 npm npm install @veramo/data-store@^6.0.2 @veramo/data-store-json@^6.0.2 # 使用 yarn yarn add @veramo/data-store@^6.0.2 @veramo/data-store-json@^6.0.2 -
重启 Veramo Agent 以加载更新后的库。
-
自定义数据存储
如果你覆盖了decorateQB,请确保对列名执行相同的白名单检查。 -
最小权限数据库访问
- 限制 Veramo Agent 使用的数据库用户,使其除必要外无法读取
private-key表。 - 考虑将私钥存放在更为严格受控的后端中。
- 限制 Veramo Agent 使用的数据库用户,使其除必要外无法读取
参考资料
- GitHub 安全通报: GHSA-38CW-85XC-XR9X
- Veramo 框架文档 – https://veramo.io/docs
如需完整的技术分析,包括交互式图表和利用细节,请参阅官方站点上的通报。