HashEx安全警报 - 单一签名可能会耗尽您的钱包 - 每日Hodl

HodlX 客户投稿提交您的文章

DeFi 领域的零日无事故。这一次,该漏洞是在广泛使用的“椭圆库”中发现的。

更糟糕的是,这种利用可能导致黑客控制用户的私钥并耗尽钱包。

通过用户签署的简单欺诈信息。 这是一个严重的问题吗?

首先要考虑的是,像 elliptic 这样的库为开发者提供了现成的代码组件。

这意味着开发者不需要从头开始编写代码并在过程中检查,而是直接借用他们所需的元素。

虽然这被认为是一种更安全的做法,因为这些库不断被使用和测试,但如果有一个漏洞被漏掉,这也会增加风险。

Elliptic库在JavaScript生态系统中被广泛使用。它为许多知名区块链项目、Web应用程序和安全系统提供加密功能。

根据NPM统计,包含错误的包每周大约下载1200万到1300万次,超过3000个项目直接将其列为依赖项。

这种广泛的使用意味着该漏洞可能影响大量应用程序——特别是加密货币钱包、区块链节点和电子签名系统——以及任何依赖于ECDSA签名的服务,尤其是在处理外部提供的输入时。

此漏洞允许远程攻击者在没有适当授权的情况下完全破坏敏感数据。

这就是该问题获得极高严重性评级的原因——在CVSS评分中大约为9分(满分10分)。

重要的是要指出,利用此漏洞需要一系列非常特定的操作,并且受害者必须签署攻击者提供的任意数据。

这意味着一些项目可能会保持安全,例如,如果一个应用程序仅签署预定的内部消息。

然而,许多用户在通过加密钱包签署消息时并没有像签署交易时那样多加关注。

每当一个Web 3.0网站要求用户签署服务条款时,用户往往会忽略阅读这些条款。

同样,用户可能会在没有完全理解影响的情况下快速为空投签署一条消息。

技术细节

问题出在未能在创建ECDSA (椭圆曲线数字签名算法)签名时正确处理错误。

ECDSA通常用于确认消息,例如区块链交易,是真实的。

要创建一个签名,您需要一个秘密密钥——只有拥有者知道它——以及一个称为‘nonce’的唯一随机数。

如果同一个随机数被多次用于不同的消息,某人可能会通过数学推导出秘密密钥。

通常,攻击者无法从一个或两个签名中推导出私钥,因为每个签名都使用一个独特的随机数(nonce)。

但是椭圆曲线库存在一个缺陷——如果它接收到一种奇怪类型的输入(,例如一个特殊字符串,而不是预期的格式),它可能会为不同的消息生成两个具有相同随机数的签名。

这个错误可能会泄露私钥,这在正确使用ECDSA时是绝对不应该发生的。

要利用这个漏洞,攻击者需要两个条件。

  • 用户的有效消息及其签名 – 例如,来自之前的任何交互
  • 用户需要签署第二条信息,该信息明确创建用于利用该漏洞

通过这两个签名,攻击者可以计算用户的私钥,从而获得对与之相关的资金和操作的完全访问权限。详细信息可在 GitHub 安全公告中找到。

利用场景

攻击者可能通过多种方式利用此漏洞,包括以下几种。

  • 网络钓鱼攻击将用户引导至假网站并请求消息签名
  • 恶意 DApps (去中心化应用)伪装成无害服务,例如签署使用条款或参与空投
  • 社会工程诱使用户签署看似无害的消息
  • 妥协服务器的私钥,这些私钥用于签署用户的消息

一个特别令人担忧的方面是用户在签署消息时的态度普遍较为松懈,相较于交易。

加密项目经常要求用户签署服务条款或空投参与消息,这可能使得被利用变得更容易。

所以,想想看——你会签署一条消息以领取免费代币吗?如果那份签名可能会让你失去全部加密资产呢?

建议

用户必须及时将所有使用椭圆曲线库进行签名的应用程序和钱包更新到最新的安全版本。

在签署消息时要谨慎,特别是来自不熟悉或可疑来源的消息。

钱包和应用程序的开发者应验证他们的椭圆曲线库版本。

如果任何用户可能受到易受攻击版本的影响,开发者必须通知他们紧急更新的必要性。


Gleb Zykov 是 HashEx 区块链安全公司的联合创始人兼首席技术官。他在 IT 行业拥有超过 14 年的经验,在互联网安全方面有超过 8 年的经验,并且在区块链技术方面拥有强大的技术背景 (比特币、以太坊和基于 EVM 的区块链)。

查看原文
本页面内容仅供参考,非招揽或要约,也不提供投资、税务或法律咨询。详见声明了解更多风险披露。
  • 赞赏
  • 评论
  • 分享
评论
0/400
暂无评论
交易,随时随地
qrCode
扫码下载 Gate.io APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • ไทย
  • Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)