RTK(CVE-2026-45792):不可信过滤配置可对 AI 评审隐藏后门
Pillar Security 于 2026 年 5 月 20 日披露了 Claude Code 令牌优化过滤工具 RTK 的一处缺陷:仓库提供的 .rtk/filters.toml 可在模型读取前悄悄从命令输出中剥离后门。攻击目标是智能体的感知,而非其执行。
这是什么?
2026 年 5 月 20 日,Pillar Security 公开披露了 CVE-2026-45792,这是与 Claude Code 配合使用的开源令牌优化工具 **RTK(Rust Token Killer)**中的一处漏洞。RTK 位于 AI 编程助手与开发者 shell 之间:它拦截命令输出,并在输出到达模型之前用正则过滤器剥离噪声,从而节省上下文窗口令牌。缺陷在于:RTK 会自动从项目本地的 .rtk/filters.toml 加载过滤规则——该文件存在于任何被克隆的仓库中,且具有最高优先级、不请求批准、不发出警告。因此,任何能向仓库提交代码的人,都能决定 AI 被允许看到什么。
这一发现的意义,与其说在于其机制,不如说在于其类别。它并非针对智能体能够执行什么的攻击,而是针对它能够观察什么的攻击。发现者将其评为 CVSS 4.0 6.9(中危);GitLab 公告数据库则列为 CVSS 3.1 8.2(高危)。该 CVE 于 5 月 14 日分配,维护者已发布修复,因此整个时间线已完全披露并修补。
工作原理
RTK 按优先级从低到高从三个来源加载配置:内置过滤器、用户全局配置(~/.config/rtk/filters.toml)以及项目本地配置(.rtk/filters.toml)。前两者在你的掌控之下;第三者随仓库而来——可能由维护者、贡献者或攻击者编写。RTK 并不区分它们:仓库提供的过滤文件继承了与你亲手编写者相同的权限,并悄然生效。该公告将其归类为 CWE-345(数据真实性验证不足)和 CWE-426(不可信搜索路径)。
攻击链很短。此处不提供任何可用的载荷;关键在于其形态:
# 仅为概念示意——非可用配置。
1. 攻击者将 .rtk/filters.toml 与后门一同提交
2. 受害者克隆仓库,并使用 Claude Code + RTK 在其中工作
3. 攻击者控制的正则在模型读取前,从 cat / git diff / 扫描器
的输出中剥离后门所在的行
4. 模型审查的是被过滤后的视图,并报告“无问题”
由于 RTK 的引擎是通用且由正则驱动的,攻击者可以抑制命令输出中出现的任何内容:从 cat 中删去恶意行、从扫描器结果中移除告警、在 git diff 中隐藏后门代码、从 grep 中过滤掉失陷指标。过滤文件看起来平平无奇——名称如 reduce_noise,注释如“strip ANSI escape sequences”——从而在众目睽睽之下隐身。模型收到的是过滤后的输出,却无从得知有行被删除,因为 RTK 运行在其观察层之下。
为什么重要
Pillar 将根因描述为信任洗白(trust laundering):来自远程仓库、由开发者素未谋面之人编写的内容,获得了与本地安装配置相同的权限。信任边界依据的是内容类型(“这是有效的过滤器吗?”),而非来源(“是开发者把它放在这里的吗?”)。同样的模式在 AI 开发工具链中反复出现——.bashrc、shell 配置文件、智能体指令文件如 AGENTS.md 与 CLAUDE.md——一个看似惰性的文件被自动加载,并以消费工具所赋予的权限运行。
RTK 为该模式增添了一个新的攻击面:观察层。一个控制模型能看到什么的工具,即便从不执行任何东西,也具有安全意义,因为看不见后门的智能体无法标记它。在同一智能体既写代码又评审代码的工作流中,这一效应会叠加:单个 .rtk/filters.toml 即可同时蒙蔽两道环节,受损代码便可能通过 AI 评审与自动扫描、进入生产,而开发者没有理由怀疑那份“干净”的结果。所需的唯一权限:提交一个小配置文件的能力——贡献者、外包人员或被攻陷的账户都触手可及。
防御
- 升级 RTK。 发现者称完整的信任模型修复落地于 v0.33.0;GitLab 公告则将 0.32.0 列为修复版本。无论如何都应升级到最新版本,并核实团队实际运行的版本。
- 在来源处而非内容处划定信任边界。 来自仓库的配置应默认不可信,并要求按仓库逐一显式启用——这正是 RTK 修复如今所强制执行的:向用户与模型发出警告,并以 SHA-256 完整性校验,在文件于
git pull后发生变化时撤销信任。 - 将观察层视为供应链的一部分。 任何在输出到达编程智能体之前对其进行预处理、过滤或转换的工具,都在塑造模型可据以行动的内容。请清点这些工具并审查其信任模型,即便它们从不执行代码。参见技能/注册表供应链的相关风险。
- 不要让单个智能体成为其自身输出的唯一评审者。 在可行时,使用未过滤的视图或独立的流水线进行评审,使单一被投毒的配置无法同时蒙蔽生成与评审。
- 在代码评审中审计仓库本地的智能体配置。
.rtk/filters.toml、智能体指令文件及其他 dotfile,应与构建脚本受到同等审视:它们是可执行的信任,而非装饰。
状态
| 项目 | 详情 |
|---|---|
| CVE | CVE-2026-45792(GHSA-fvvm-949w-qj4w) |
| 组件 | RTK(Rust Token Killer),Claude Code 的过滤钩子 |
| 弱点 | CWE-345(数据真实性)· CWE-426(不可信搜索路径) |
| 严重性 | CVSS 4.0 6.9 中危(发现者)· CVSS 3.1 8.2 高危(GLAD) |
| 修复版本 | v0.33.0(发现者)· 0.32.0(GLAD)——默认拒绝不可信项目过滤器 + 基于哈希的信任 |
| 披露 | 2026 年 3 月 15 日上报 · 3 月 25 日补丁 · 5 月 14 日分配 CVE · 5 月 20 日公开 |
要点不是“RTK 特别不安全”——维护者在 24 小时内便完成了修复。要点在于这一攻击类别:在 AI 辅助开发中,攻击面包括那些没有到达模型的东西。控制过滤层的攻击者无需向智能体的上下文注入任何内容;他只需抹去自己所植入之物的痕迹。