本文讲述了使用X-Ray工具在Solana的一个智能合约中发现和报告漏洞的过程,包含了对X-Ray工具的介绍,以及在智能合约审计过程中如何快速识别潜在安全问题的案例。这篇文章对于开发者进行合约安全审计具有重要参考价值。
最近,我们使用 X-Ray 发现了一个在链上的 Solana 智能合约( jet-v1)中的漏洞,并通过 Immunefi 获得了错误赏金。我们感谢 Jet Protocol 团队和 Immunefi 的快速响应和慷慨支持。修复已应用于 此提交。
本文分享了我们使用 X-Ray 的错误猎捕体验。
X-Ray 是一个由 GreenCore 技术 支持的自动化验证工具。它扫描合约的源代码,寻找常见的陷阱,如 缺少所有权检查、缺少签名检查、Solana 账户混淆、任意签名程序调用和 整数溢出/下溢。
X-Ray 目前正在积极开发中,更多漏洞检查器正在添加中。更多细节和教程可以在 [ X-Ray — Solana 智能合约的漏洞扫描器] 中找到。
X-Ray 集成在合约构建过程中。获取潜在缺陷列表只需一个命令行。
假设我们已经获得了合约的新副本。我们只需在存在构建配置文件 Xargo.toml 的 Solana 程序目录中调用 X-Ray . 或 x-ray -analyzeAll .
分析速度非常快,X-Ray 将报告一系列问题,我们可以进一步查看。在我们的情况下,在 X-Ray 报告的四个问题中,以下两个特别有趣。
在上面的内容中,X-Ray 报告了问题类型、问题位置以及演示问题可能发生的堆栈跟踪。下一步是审查代码并找出这些问题是否会导致安全漏洞。
抵押品和贷款的类型都是 usize。如果列表中的贷款过多,指示的加法操作可能会溢出。因此,从理论上讲,这是真阳性。然而,漏洞取决于状态而不是用户输入。由于它不是(直接)用户可控的,因此它不是适合漏洞概念验证(PoC)创建的理想候选项。
在 borrow.rs 中,借款请求金额 X 的总Token金额 Y 的计算可能会溢出。此溢出的潜在后果包括:
特别地:
找到适当的输入并满足合约中的所有健全性检查是 PoC 创建的主要挑战。在我们的情况下,我们必须准备适当的存款和抵押金额,以使智能合约满意。经过几次尝试,我们找到了神奇的数字,以下截图演示了溢出以及在储备 total_deposits 中的持有损失。
我们与开发者报告了我们的发现和 PoC。开发者承认了我们的发现,并给予了奖励,并表示:
“……虽然这在我们已部署的程序中并不可被利用,并且通常需要在 Jet 的储备中不太可能的代币供应集中,但原则上这是一个问题,我们将进行补丁,并审查整个代码库中是否存在其他实例。”
“我们非常感谢你花时间分析我们的代码。”
在报告后不久,该问题已被修复。
有关 X-Ray 的所有博客,请访问 https://www.sec3.dev/blog
- 原文链接: sec3.dev/blog/solana-bug...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!