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.26.0.2
@veramo/data-store-json< 6.0.26.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 将抛出错误,从而阻止恶意的排序子句。

修复步骤

  1. 升级包

    # 使用 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
  2. 重启 Veramo Agent 以加载更新后的库。

  3. 自定义数据存储
    如果你覆盖了 decorateQB,请确保对列名执行相同的白名单检查。

  4. 最小权限数据库访问

    • 限制 Veramo Agent 使用的数据库用户,使其除必要外无法读取 private-key 表。
    • 考虑将私钥存放在更为严格受控的后端中。

参考资料

如需完整的技术分析,包括交互式图表和利用细节,请参阅官方站点上的通报。

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...