Bitget App
Trade smarter
行情交易合约跟单策略理财Web3

击破 XSS 漏洞:CertiK 同 WalletConnect 一起守护用户安全

CertiKCertiK2024/03/04 04:41
作者:CertiK

Web3.0 是一个创新机遇与安全挑战并存的新时代。本篇文章中,我们将带大家了解 CertiK 团队如何发现与解决 Web3.0 常用协议–WalletConnect 中存在的 Web2.0 漏洞。

Web3.0 是一个创新机遇与安全挑战并存的新时代。它带来了区块链技术、智能合约、DeFi、DePIN 等全新概念,却也浮现出多种多样的恶意攻击、漏洞与诈骗等安全问题。另一方面,由于当前 Web3.0 产品往往融入许多 Web2.0 元素,这使得传统的 Web2.0 的安全风险也成为威胁 Web3.0 世界的重要因素。


作为全球领先的 Web3.0 安全机构,CertiK 团队一直以来都在主动关注各种原生和衍生的潜在风险,保护成千上万的客户免受损失。


本篇文章中,我们将带大家了解 CertiK 团队如何发现与解决 Web3.0 常用协议–WalletConnect 中存在的 Web2.0 漏洞。


WalletConnect 与 VerifyAPI​


WalletConnect 是 Web3.0 最受欢迎的开源协议之一,用于将各种 dApp 与去中心化钱包连接起来。用户可以通过扫描 dApp 提供的二维码来建立新的连接。虽然二维码上会显示 dApp 的名称、图标和来源等详细信息,但是这些信息均由 dApp 单方面提供,无需经过钱包验证,因此存在网络钓鱼攻击的风险,这也是包括 CertiK 在内的众多安全团队所重点关注的问题。


为此,WalletConnect 推出了“VerifyAPI”。


“VerifyAPI”是 WalletConnect 针对与其集成钱包推出的主动安全增强措施,会对用户尝试连接的可疑或恶意域名发出警报,从而防止网络钓鱼攻击。该 API 利用 WalletConnect 的域名注册表和 Blowfish 的域名扫描仪来审查连接请求。当用户尝试与 dApp 连接时,VerifyAPI 可使钱包呈现四种状态,来帮助用户评估该域名的安全性并识别潜在风险。




发现漏洞


WalletConnect 协议中的漏洞是团队在为客户产品进行例行渗透测试时无意发现的。在渗透测试的初始阶段,团队通常会通过全面的探索流程来了解应用程序的功能和与之交互的各种服务。本案例中,客户产品的网络应用程序使用了 WalletConnect。我们对 HTTP 流量的监控获取了向 WalletConnect 端点发出的请求信息,而其中一条请求引起了我们的特别注意。


在深入研究这个漏洞的具体细节之前,让我们从 dApp 的角度来看看 VerifyAPI 的 HTTP 请求工作流:


1.内嵌的 WalletConnectSDK 向 verify.walletconnect.com 发送请求,并在路径中包含项目 ID。如果该 ID 已在 WalletConnect 注册,服务器将回复一个指向 index.js 文件的链接和 CSRF 标记。


2.然后,SDK 会执行 GET 请求,利用之前获得的路径和 CSRF 标记获取验证请求的 JavaScript 代码片段。


3.用户确认通过 WalletConnect 连接钱包并生成 QR 码后,SDK 会向 /attestation 端点发送 POST 请求,匹配 id,并完成初始 dApp 设置。



在检查 HTTP 响应时,我们注意到 HTML 主体中包含一个直接嵌入 JavaScript 代码块的标记值。对于经验丰富的 Web2.0 安全专家来说,这种模式表明存在 HTML 注入或 XSS(跨站脚本)攻击的潜在漏洞。为了验证这一猜想,我们将上图请求中的标记值修改为 XSS 有效载荷<svg/onload=alert(document.domain)>,脚本成功执行了,这说 XSS 漏洞确实存在。https://verify.walletconnect.com/index.js?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9


XSS 是一种注入式攻击,可以在可信网站中嵌入恶意脚本。


在 Web2.0 应用中,攻击者通常利用 XSS 漏洞访问用户 cookie,劫持用户的网络会话和账户控制权。其他攻击包括把用户重定向到有害网站,或发起未经授权的请求。在 Web3.0 环境中,XSS 攻击可以操纵去中心化钱包连接,诱骗用户签署有害交易,从而盗取资产。


接着,我们对 XSS 问题展开了进一步调查,包括测试各种有效载荷,来评估此漏洞是否会演变为 SQL 注入或远程代码执行等更严重的风险。


VerifyAPI 是开源代码,在查看其代码后,我们了解了 XSS 漏洞的根本原因——该漏洞来自于 validate_format 函数验证标记值格式的方式。

if!CsrfToken::validate_format(&query.token){


虽然它检查了标记值是否具有有效的 JWT 标头,但未能彻底检查整标记值,因此攻击者仍可以通过给 JWT 标记值附加有效载荷来进行 XSS 攻击。

fnvalidate_format(s:&str)->bool{jsonwebtoken::decode_header(s).is_ok()}


概念验证


为了验证潜在威胁,我们的安全团队利用以上的 XSS 漏洞创建一个演示用的有效载荷。一旦被使用在钓鱼网站上,用户将会收到一个资产授权提示,如果不仔细检查交易数据而点击确认,就会把资产控制权授权给攻击者。


由于用户看到的依然是 https://verify.walletconnect.com/ 域名,对交易签名的警惕程度会大大降低。而对于非专业出身的用户来说,很难去验证交易的全部细节,很有可能会在无意中签署恶意交易,造成损失。



另一方面,我们在研究中没有发现任何可以放大该漏洞影响的方法,例如入侵 WalletConnect 的其他模块或发起用户被动操作。


解决方案


在检测到 XSS 漏洞后,我们的团队迅速向 WalletConnect 团队提供了一份详细报告。WalletConnect 团队迅速确认了我们的发现,并制定了解决问题的时间表。


WalletConnect 的补救措施包括更新 validate_format 函数。此更新采用了白名单方法,标记值只允许使用字母、数字,以及符号 -、.和_。虽然理论上仍有可能进行文本注入,但这一关键更新大大降低了 XSS 攻击的风险。


时间线


2023 年 10 月 14 日:CertiK 向 WalletConnect 报告该漏洞。

2023 年 10 月 16 日:WalletConnect 确认收到报告并确认问题。

2023 年 10 月 20 日:WalletConnect 更新了源代码,并推送至 VerifyAPI。

2023 年 10 月 20 日:CertiK 确认 XSS 问题已得到缓解。


写在最后


此次事件为我们带来一个重要提示:Web2.0 所特有的漏洞不仅会在 Web3.0 环境中持续存在,而且还会不断演变,以更新的表现形式造成更大的安全威胁。因此,主动防护至关重要。定期审计、渗透测试、谨慎的漏洞评估以及实时跟进最新的安全动态,走在攻击者前面,是 Web3.0 企业守护安全的最佳做法。对于 DeFi 用户来说,保持警惕在任何时候都至关重要。


一定要仔细验证网站或平台的 URL,特别是看起来相似的数字与字母。诈骗者经常通过高仿 URL 欺骗用户。

进行交易时,请仔细查看交易的所有详细信息。钱包应用都会不时针对新的诈骗手法推出新的提示。在点击确认前确保理解钱包的所有提示,并确认目标地址的准确性。


在本篇文章中,我们详细介绍了在 WalletConnect 的 VerifyAPI 中发现的 XSS 漏洞及其影响,强调了 Web2.0 攻击在 Web3.0 环境中带来的安全风险。感谢 WalletConnect 团队的快速反应和有效补救,体现了他们对用户与 Web3.0 行业安全的强大责任感。

0

免责声明:文章中的所有内容仅代表作者的观点,与本平台无关。用户不应以本文作为投资决策的参考。

PoolX:质押赚新币
CEC、QTLX、GDV等热门新币火热进行中!
立即质押!

你也可能喜欢

REEFUSDT 现已上线合约交易

Bitget 已于2024年9月20日(UTC+8)上线 REEFUSDT 合约交易,最大杠杆为50倍。 欢迎通过我们的官方网站或 Bitget APP 开始合约交易。 REEF U本位永续合约: 合约参数 详情 上线时间 2024年9月20日 18:30(UTC+8) 合约标的 REEF 结算资产 USDT 最小变动价位 0.000001 最高杠杆倍数 50x 资金费用结算频率 每八个小时 交易时间 7*24 根据市场风险状况,Bitget可能调整包括最小变动价格、最高杠杆倍数、维持保证金率等重要合约参数; 【合约】 Bitget 的合约包括:U本位合约、币本位合约和 USDC 合约。 合

Bitget Announcement2024/09/20 10:35