CodeQL 2.26.0 开始扫描系统提示词注入:AI 应用安全进入静态分析

GitHub 在 CodeQL 2.26.0 中加入 JavaScript/TypeScript 系统提示词注入查询,并扩展 OpenAI、Anthropic 与 Google GenAI SDK 的危险数据流识别。

浏览 69
CodeQL 2.26.0 开始扫描系统提示词注入:AI 应用安全进入静态分析封面

当生成式 AI 被接入客服、搜索、开发工具和企业工作流后,提示词注入不再只是模型侧的抽象风险,它也可能来自一段普通的应用代码:开发者把用户输入、网页内容或外部数据直接拼进 system prompt,模型随后就可能把不可信文本当作高优先级指令。GitHub 在 2026 年 7 月 10 日发布的 CodeQL 2.26.0 更新 中,第一次把这类数据流纳入 JavaScript/TypeScript 静态分析查询。

这项变化的价值,不是宣称 CodeQL 能解决所有提示词注入,而是让一部分可由代码路径证明的风险进入代码扫描、拉取请求审查和安全告警体系。AI 安全由此更接近传统应用安全的工程流程。

新查询追踪的是“不可信输入如何流进系统提示词”

新加入的查询 ID 为 js/system-prompt-injection。GitHub 对它的定义是:检测不可信、由用户提供的值是否流入 AI 模型的系统提示词,从而让攻击者有机会操纵模型行为。这里的重点是“数据流”,而不是对某段提示词做语义评分。

例如,应用从表单、HTTP 参数、数据库中的用户内容或抓取网页中取出文本,然后未经边界处理就放入 system instruction。CodeQL 可以沿 JavaScript/TypeScript 代码中的来源、传播过程和危险入口建立路径,给出更接近代码位置的告警。它适合发现结构明确的拼接和传递问题,却不能判断所有自然语言是否恶意,也不会替代运行时隔离、权限控制或模型侧防护。

OpenAI、Anthropic 与 Google GenAI SDK 都扩展了危险入口

GitHub 同时扩充了多家主流 SDK 的 prompt-injection sinks。官方列出的范围包括 Sora prompts、OpenAI Realtime session instructions、Anthropic 旧版 completion prompts,以及 Google GenAI 的 cached content 和 system instructions。完整版本说明 还记录了本次语言建模和查询准确性调整。

这说明扫描器不再只认识一种聊天补全调用。实时语音会话、视频生成提示词和缓存系统指令都可能承载高权限上下文;当外部文本进入这些参数时,风险并不会因为接口形态不同而消失。

对开发者来说,更值得检查的并不是“我们有没有 system prompt”这一句,而是三个问题:哪些数据被视为不可信来源、它们经过了哪些转换、最终进入了哪个具有行为控制能力的参数。只有把这条链路画清楚,告警才有可操作性。

CodeQL 把 AI 风险带进现有代码扫描链路

CodeQL 是 GitHub code scanning 背后的静态分析引擎。GitHub 表示,新版本会自动部署到 github.com 上使用 GitHub code scanning 的用户;功能也会进入未来的 GitHub Enterprise Server 版本,较旧 GHES 环境则需要手动升级 CodeQL。

这对安全团队的现实意义是,AI 应用不必另起一套完全孤立的检查流程。团队可以在拉取请求中查看数据流路径、分配告警、记录处置结果,并与 SQL 注入、日志注入等规则一起治理。不过,是否实际运行到这条查询、使用哪套查询包以及企业服务器版本,仍取决于仓库配置,不能把“版本发布”误写成“所有仓库已经自动安全”。

2.26.0 还更新了 Kotlin、Razor、slog 与多语言准确性

AI 提示词注入是最醒目的变化,但并不是全部。GitHub 官方公告确认,CodeQL 现在支持最高 Kotlin 2.4.0;C# 增加 Razor Page handler 参数作为远程数据流来源;Go 增加对 log/slog 的建模;Swift 改进 CryptoKit 弱哈希查询;Python、Go 和 GitHub Actions 的若干查询减少误报或修正文案。

这些更新提醒团队:升级 CodeQL 的收益不仅来自新增规则,也来自框架和标准库建模。安全扫描对代码的理解越完整,越容易发现真实路径,也越少依赖开发者手工猜测输入来自哪里。

对 AI 产品团队,最实用的是重新划定信任边界

产品经理需要先确认哪些功能允许外部内容影响模型行为;开发者要把用户内容、检索结果、工具返回值与系统指令分层;安全人员则应把提示词注入告警放进威胁模型和修复优先级,而不是简单要求“过滤敏感词”。

更稳妥的工程措施通常包括:不要把外部文本直接提升为 system 指令;为工具调用设置最小权限和参数校验;对检索内容做明确的数据标记;对高风险动作设置服务器端授权;用对抗样例和运行时日志验证修复。CodeQL 能帮助找到一部分入口,但无法证明模型行为在所有输入下都安全。

这次发布值得关注,正因为它把提示词注入从安全讨论推进到了可持续执行的代码治理。对正在建设 Agent、RAG 或多模态工作流的团队,下一步不是等待一个“全能防注入”开关,而是让每一条高权限指令的数据来源都能被审查和解释。

本文为公开资料整理与技术学习参考,不提供采编、转载或发布服务。

69