ONCALL://19
INC-13 · Vyper

Vyper 编译器错误编译与常量篡改缺陷

Vyper 在 2026 年 10 月发布 5 项 GHSA 公告,涉及数组错误编译、优化器把表达式错编成常量、以及多字节字符和行分隔符导致的常量篡改。部分问题还没有正式补丁版本。

INC-13中危看配置软件漏洞P3排期披露 2026-10-02
段子原句“公司的 Vyper 智能合约”
编号
GHSA-cw3h-xwxq-8cx2GHSA-6j9c-gvcw-74fjGHSA-2489-32vh-8rrcGHSA-r3c7-7xwm-6vfwGHSA-wvx7-39qj-2g9v
严重度
GHSA 评级 Moderate 或 Low;无 CVE 和 CVSS
利用状态
有公开 PoC有公开 PoC:公告里的 PoC 证明编译结果会偏离代码意图。未发现在野利用或资金损失。
对段子公司
只有用受影响版本、并满足触发条件编译部署的合约才相关。
影响范围
行分隔符公告扫描了 45,774 个已部署合约,没有发现触发字符。官方未公布受影响协议或损失金额。
修复版本
  • →3 项 Moderate 问题暂无已发布的修复版本
  • →数组问题已合入 master,未发正式版
处置清单见处置顺序 · P3

结论

2026 年 10 月,Vyper 官方披露多项编译器缺陷,涉及错误编译和常量值篡改。[1] [2] [3]官方公告未给出 CVE,也未公布资金损失或确认在野利用。[1] [2] [3]这不是证据支持的单一“Vyper 事故”,而是一组 GHSA 公告。段子只在公司用受影响 Vyper 版本编译并部署合约时相关。

事件经过

Vyper 官方公告列出多个在 2026 年 10 月披露的编译器问题。[1]其中包括嵌套数组三元表达式读错内存、优化器错误折叠表达式、源代码字符偏移问题,以及标识符绑定错误。[2] [3] [4] [5]这些问题可能使编译后的行为与源代码意图不同。公告未将这些问题标记为 CVE,也未报告确证的在野攻击。[2] [3] [4] [5]

此处将重点按与部署代码风险相关的多个公告汇总。这可避免把段子中的“Vyper 编译器漏洞”误当作已证实的单一事件。这些公告均显示严重度为 Moderate 或 Low,未列 CVSS 数值。[2] [3] [4] [5]

技术细节

公告机制官方严重度版本与修复
GHSA-cw3h-xwxq-8cx2三元表达式选窄内层数组时,编译器按宽数组内存步长读取,导致后续元素错位Moderate0.3.8 至 0.5.0b1;公告暂未列修复版本
GHSA-6j9c-gvcw-74fj默认优化器把三元表达式分支中的 `msg.valueK或len(msg.data)K错编成常量1`
GHSA-r3c7-7xwm-6vfw多字节标识符或 BOM 令源代码查找偏移错位,数字字面量值或类型可被改变Low多个旧版本区间及 0.4.1 以上;公告给出旧版修复 0.1.0b12、0.1.0b15,未列新版本修复
GHSA-wvx7-39qj-2g9v行分隔符处理不一致,字符累计偏移令字面量解析和验证读取错误文本Low0.1.0b1 至 b16、0.4.1 以上;公告列旧版修复 0.1.0b17
GHSA-2489-32vh-8rrc展开导入常量或默认参数时,函数局部同名变量覆盖原绑定Moderate0.4.0b1 及以上;公告暂未列修复版本

三元数组问题中,官方 PoC 将 [[6, 4], [7, 3]] 错误存为 [[6, 4], [0, 0, 0]]。[2]优化器问题在 -O gas 或 -O codesize 下触发,-O none 的示例结果正确。[3]源字符问题可能令看似无害的格式字符或同形字改变地址、选择器或数值字面量。[4] [5]

影响范围

公开公告没有给出受影响用户数、下载量或损失金额。[2] [3] [4] [5]行分隔符公告报告扫描了 45,774 个已部署合约及仓库源文件,未发现八种触发字符。[5]该数字仅适用于公告所述扫描数据,不代表所有部署合约。[5]官方公告没有列出受影响协议名称,也没有给出遭利用资金总额。[2] [3] [4] [5]

公告 PoC 证明编译结果可偏离意图,但 PoC 不等于真实攻击证据。[2] [3] [4] [5]截至本报告核验的公开原文,未找到确证在野利用或协议资金损失的记录。因此损失和实际受影响合约数量均未验证。

时间线

  1. 2026-10-02(日期;官方页面未标时区)
    GHSA-6j9c-gvcw-74fj 发布。[3]
  2. 2026-10-05(日期;官方页面未标时区)
    GHSA-cw3h-xwxq-8cx2 发布。[2]
  3. 2026-10-06(日期;官方页面未标时区)
    GHSA-r3c7-7xwm-6vfw 与 GHSA-wvx7-39qj-2g9v 发布。[4][5]
  4. 2026-10-07(日期;官方页面未标时区)
    GHSA-2489-32vh-8rrc 发布。[6]

修复与缓解

官方公告页面对部分问题仍写明无已发布补丁版本。[2] [3] [6]数组问题的公告指出修复已进入 master,但没有提供受影响发布线的修复版本号。[2]因此不要把提交合并等同于可用的正式修复版。

建议先确认编译器精确版本、优化选项和构建输入,再逐项比对上述触发条件。对部署合约,应比较源代码、编译器版本、优化参数和链上字节码。若确认受影响,应暂停依赖相关逻辑的部署,并评估升级或重新部署。字符相关问题可在编译前拒绝非 ASCII 字符及八种公告列出的行分隔符。[4] [5]优化器问题公告指出 -O none PoC 结果正常,可作为审计与复现的临时对照,不应代替正式修复。[3]

对段子中公司的影响

段子称公司用 Vyper 智能合约,并部署在 Docker、Kubernetes 和 Traefik 上。若公司以公告所列受影响 Vyper 版本编译生产合约,缺陷会进入生成的字节码。Docker、Kubernetes、Ingress 和 mTLS 不会修复编译器生成的错误字节码。真实影响取决于源码是否命中具体触发条件、编译器版本、优化等级和链上合约逻辑。段子未提供这些资料,因此公司是否受影响未验证。

存疑与未验证

  • 官方公告没有公开 CVE 编号,也没有提供 CVSS 数值。[2] [3] [4] [5] [6]
  • 未找到公告证明这些缺陷已被攻击者在野利用。
  • 未找到可归因于这些公告的真实资金损失或受影响协议清单。
  • “45,774 个文件未检出触发字符”不能证明全部部署均安全。[5]
  • 修复提交与正式发行版之间的对应关系未全部验证。
  • 披露页面只给日期,未提供发布时间时区。

参考资料

调研截止 2026-10-22 UTC+8 · 未验证的内容已在正文中标注 · 数字以原始来源为准

本页目录