深翼判例库DeepWing Case Library · INC-034 · 工具层Tool
Cline 的分类机器人被提示注入劫持:未授权的 cline@2.3.0 上架约 8 小时,约 4,000 次下载(第三方估算)Cline's triage bot was hijacked through prompt injection: an unauthorised cline@2.3.0 sat on npm for about eight hours and was downloaded roughly 4,000 times (third-party estimate)
本条在判例库中的登记行This entry in the Case Library: deepwingai.com/cases#INC-034
时间线Timeline
已证实事实Confirmed facts
研究员 Adnan Khan 演示的链条是:Cline 的 Issue 分类机器人触发权限配置为通配符,任何 GitHub 账号都能触发;机器人自带 Bash 执行与文件读写权限;Issue 标题的原始文本被直接拼进提示词。发布令牌位于夜间发布流程,低权限的分类流程与之共享 GitHub Actions 缓存作用域,缓存投毒可以跨流程触及令牌。
厂商自身的失效是直接成因:2026-02-09 凭证轮换时删错了令牌,被暴露的令牌没有撤销。2 月 17 日,未经批准的 cline@2.3.0 被发布至 npm 并挂约 8 小时,约 4,000 次下载(StepSecurity 估算,非官方数字)。
The chain researcher Adnan Khan demonstrated: Cline's issue-triage bot had wildcard trigger permissions, so any GitHub account could invoke it; the bot itself carried Bash execution and file read/write powers; and raw issue-title text was pasted straight into the prompt. The release token lived in the nightly release workflow, which shared a GitHub Actions cache scope with the low-privilege triage workflow, so cache poisoning could reach across workflows to the token.
The vendor's own failure was the direct cause: during the 2026-02-09 credential rotation it deleted the wrong token, and the exposed token was never revoked. On February 17 an unapproved cline@2.3.0 was published to npm and stayed up for about eight hours, with roughly 4,000 downloads (a StepSecurity estimate, not an official figure).
失效机制Failure mechanism深翼分析DeepWing analysis
低权限入口握着高权限钥匙:谁都能触发的分类流程,与发布令牌之间只隔着一层共享缓存;再加上轮换时删错令牌且无人核验撤销是否生效。注入只是引信,权限结构才是火药。
因此本案归入工具层:分类机器人按分类任务配权,本不该有执行与发布的任何可能。
A low-privilege entrance held a high-privilege key: a triage workflow anyone could trigger sat one shared cache away from the release token, and a rotation that deleted the wrong token went unverified. The injection was only the fuse; the permission structure was the powder.
The case therefore belongs to the Tool layer: a triage bot equipped for its triage task should have no path to execution or release at all.
工程启示Engineering lessons
按任务最小配权:分类机器人只给分类所需的读与标注能力。
触发与执行分权:谁都能触发的入口不能握能落地的执行权限,发布令牌放在机器人运行环境之外。
不可信文本不直拼提示词:Issue 标题等外部文本不得原文进入提示词。
轮换后逐把核验:凭证轮换后逐把确认旧令牌确已撤销。
Least privilege per task: a triage bot gets only the read and labelling powers triage needs.
Separate triggering from executing: an entrance anyone can trigger must not hold powers that land anywhere, and release tokens live outside the bot's runtime.
Never paste untrusted text into prompts: external text such as issue titles does not enter prompts verbatim.
Verify every rotation: after a credential rotation, confirm token by token that the old ones are actually revoked.
你的系统里,Agent 的对外动作有人盯着吗?Is anyone watching what your agents do outside your system?
做 17 题免费自检Take the free 17-question self-check