
SecureAI-Scan v0.3.1
SecureAI-Scan 是一款 CLI 工具,用于扫描 TypeScript 和 JavaScript 代码库中 AI 应用特有的安全问题——提示注入、MCP 工具滥用、RAG 数据投毒、智能体信任违规等。
SecureAI-Scan
离线 CLI 工具,用于扫描 TypeScript、JavaScript 和 Python 中的 LLM、MCP、Agent Skill 及 RAG 风险——基于 import 解析的数据流证据,默认零误报,并映射至 OWASP LLM/ASI/MCP Top 10。
该领域的多数扫描器只是匹配关键词便将其视为发现项。SecureAI-Scan 则通过真实、经 import 解析的代码,追踪实际的 来源 → 流向 → 汇点 路径——默认扫描仅展示其能够证明的内容。无需账户、无需云端上传,一切都不会离开你的机器。
覆盖官方 OWASP Top 10 for LLM Applications 2026、Top 10 for Agentic Applications (2026) 以及发布周即纳入的 MCP Top 10。
30 秒快速上手```bash
npx --yes [email protected] scan .
无需账户、云上传、Python 解释器或配置。TypeScript、JavaScript、Python、MCP 配置和 Agent Skill 包会自动检测。
**实测 `0.9.0` 候选版本:** 136/136 项测试 · 88.08% 语句覆盖率 · 覆盖 9 个公共仓库中的 12,676 个文件 · 与已审查基线相比,0 个新增默认层级指纹。[证据](https://github.com/akanthed/secureai-scan/blob/main/docs/benchmarks/v0.9.0.json) · [方法论与限制](https://github.com/akanthed/secureai-scan/blob/main/docs/ReleaseAssurance.md)```
▌ HIGH AI001 Prompt injection via user input
PROVEN LLM01:2026 Prompt Injection
source src/chat.ts:8 request data `req.body.input`
flow src/chat.ts:13 passed as `systemPrompt`
sink src/chat.ts:10 openai.chat.completions.create — system role (OpenAI)
fix Keep system prompts static; pass user input as a user-role message.
这适合你吗? SecureAI-Scan 刻意将范围限定在 LLM、MCP 和 RAG/代理风险——提示注入、工具投毒、不安全的输出处理、向量存储访问控制、代理技能投毒。它不是通用的 SAST 或密钥扫描器,也不试图成为其中之一;一个已知的恶意包如果没有 LLM 形态的载荷(例如电子邮件 API 调用中硬编码的泄露地址),会由离线公告列表(DEP003)捕获,而不是由模式规则捕获。如果你的代码库与 LLM、MCP 服务器、向量存储通信,或附带 Agent Skills,这就是为你构建的。
新增:针对 LiteLLM Proxy(config.yaml)的静态配置扫描——硬编码密钥、明文提供商端点、缺失护栏。参见 规则(LLC001–LLC003)。
目录
- 为什么这个扫描器与众不同
- 它如何比较
- 30 秒快速上手
- 查看实际效果
- 命令
- GitHub Action
- Pre-commit 钩子
- 规则
- 架构
- MCP 服务器(从 Claude 使用)
- Claude 技能
- 信任与发布保障
- 精度契约
- 测试与基准测试
- 路线图
- 贡献
为什么这个扫描器与众不同
- 证据分级,而非噪音。 每个发现都是
proven(追踪数据流或解析的配置事实)、likely(已解析的接收器,一次启发式跳跃)或heuristic。默认扫描仅显示 proven + likely。 启发式结果通过--paranoid选择启用。 - 导入解析的检测。 只有当调用解析到真实的 SDK 导入(
openai、@anthropic-ai/sdk、ai、@google/genai、LangChain、Bedrock 等)时,它才是“LLM 调用”。你的 Google Maps 客户端永远不会再被标记为 LLM。 - 精度门控,并针对真实仓库进行基准测试。 测试套件断言每个易受攻击的测试夹具都会触发并且每个安全的测试夹具保持干净——安全语料库上的误报会导致构建失败。除此之外,
npm run regression会扫描真实的公共仓库(OpenAI/Anthropic/Vercel AI SDK、官方 MCP 服务器、LlamaIndex),对照已提交且经人工审查的基线,并且在任何新的proven/likely发现上失败。参见 测试与基准测试 了解实际的对比数字,或参见 扫描真实仓库的发现 了解背后的故事——在标记的恶意技能语料库上 6/6 的捕获率,以及为什么我们不因为一个诚实的库级发现而称 llama_index 为“易受攻击”。讨论文章 → - 用于 GitHub 代码扫描的 SARIF。
--output report.sarif将发现内联显示在拉取请求和 Security 选项卡中。 - AI-BOM。
secureai-scan bom .构建 SDK、模型 ID、向量存储、代理框架和 MCP 服务器的语法派生清单,映射到 OWASP LLM Top 10 / EU AI Act 文档需求。 - MCP 配置扫描。 解析
.mcp.json、claude_desktop_config.json、.cursor/mcp.json:未固定版本的npx -y服务器、内联密钥、明文 HTTP 传输。 - MCP 工具投毒检测。 捕获 WhatsApp MCP 撤资事件和 postmark-mcp 后门背后的模式——不可见 Unicode、面向代理的注入短语,以及工具名称/描述中的跨工具遮蔽,在运行服务器之前以静态方式完成。
- MCP 命令注入检测。 标记由请求数据构建的 MCP stdio 传输
command/args——这是 2026 年 MCP STDIO RCE 披露背后的模式。 - Agent 技能投毒检测。 将相同的不可见 Unicode、注入短语和遮蔽检查应用于
SKILL.md文件——Agent Skills 会整体加载到上下文中,因此被投毒的技能本质上就是被投毒的工具描述。 - 抗规避的技能扫描。 技能包作为目录进行扫描,而不仅仅是其中的
SKILL.md,并且每个内容检查都针对文本的去混淆变体运行。这针对的是已公开的技术——同形字、零宽字符拆分、暂存在.git/或build/中的载荷、隐藏在*.test.ts文件中的泄露——这些技术绕过了 Cloak and Detonate(arXiv:2607.02357)中调查的九个扫描器中 >90% 的扫描器。参见 抗规避能力。 - 已知易受攻击和已知恶意的包公告,版本感知。 对照捆绑的公告快照检查每个依赖项和每个由 MCP 启动的包——一份手工整理的已记录在野后门列表,外加针对 LLM/MCP/RAG 包观察列表的 HIGH/CRITICAL OSV 公告,由
scripts/sync-advisories.js重新生成。每次扫描都离线运行,无需任何标志。只有当你的固定版本可证明位于受影响范围内时,CVE 才会触发;文档记录的恶意包即使在模糊范围内也会触发,因为安装后门是不可恢复的。 - 本地优先。 没有任何内容离开你的机器。
它如何比较
SecureAI-Scan 不是通用 SAST 工具或容器/IaC 扫描器的替代品——请与它并行运行,而不是替代它。它是为 LLM/MCP/RAG 攻击面专门构建的,强调数据流证据而非扁平的关键词发现。
| SecureAI-Scan | Semgrep(OSS 规则) | Trivy | GitHub Advanced Security | |
|---|---|---|---|---|
| 提示注入(源→接收器追踪) | ✅ 导入解析的数据流 | ⚠️ 仅模式规则,社区维护 | ❌ | ⚠️ CodeQL 可以,但没有 AI 特定规则集 |
| MCP 工具投毒 / 配置风险 | ✅ MCP007–010,配置扫描器 | ❌ | ❌ | ❌ |
Agent 技能投毒(SKILL.md) | ✅ 抗规避、包感知 | ❌ | ❌ | ❌ |
| RAG / 向量存储配置错误 | ✅ VEC001–004 | ❌ | ❌ | ❌ |
| 已知恶意 AI 包公告 | ✅ DEP003,离线、版本感知 | ❌ | ⚠️ 通用 CVE 源,非 AI 特定 | ⚠️ Dependabot,通用 CVE 源 |
| 通用 SAST(SQLi、XSS、路径遍历) | ❌ 按设计超出范围 | ✅ | ❌ | ✅ |
| 容器 / IaC 扫描 | ❌ | ❌ | ✅ | ⚠️ 通过 CodeQL/Actions |
| 证据分级(proven/likely/heuristic) | ✅ | ❌ 发现是扁平的 | ❌ | ⚠️ CodeQL 有一些,但非 AI 调优 |
| SARIF 输出(GitHub 代码扫描) | ✅ | ✅ | ✅ | 原生 |
| 离线运行,无需账户 | ✅ | ✅(OSS 规则) | ✅ | ❌ 需要 GitHub |
如果你已经在运行 Semgrep 或 GHAS,请保留它们——为它们完全未建模的风险面添加 SecureAI-Scan。
想先提问?试试免费的 SecureAI-Scan AI 安全顾问(ChatGPT 版)。
即将运行你在 GitHub 或 Twitter 上找到的 MCP 服务器?先将它的工具描述粘贴到 MCP X-Ray——在浏览器中检查隐藏的 Unicode、注入指令和已知恶意包,无需安装。
查看实际效果
secureai-scan scan . 端到端运行,针对一个真实(小型、故意易受攻击的)文件的真实输出——源代码:
扫描器端到端追踪的攻击形态:
| MCP 工具投毒数据流 | RAG 上下文注入数据流 |
|---|---|
![]() | ![]() |
命令
你 95% 的时间需要的那个:```bash secureai-scan scan .
其他内容在你需要时都会显示。`secureai-scan scan . --help` 会在终端中显示所有这些选项,并按相同方式分组:
**日常使用**
| 标志 | 作用 |
|------|---------------|
| *(无)* | `proven` + `likely` 级别的发现——默认选项,无需任何标志 |
| `--paranoid` | 同时包含 `heuristic` 级别的发现 |
| `-s, --severity <level>` | 仅显示达到/高于 `low`\|`medium`\|`high`\|`critical` 级别的发现 |
| `--output <file>` | 写入完整报告——`.sarif`(GitHub 代码扫描)、`.json`、`.md` 或 `.html` |
**限定运行哪些规则**
| 标志 | 作用 |
|------|---------------|
| `-r, --rules <list>` | 仅运行这些规则 ID,例如 `AI001,MCP007` |
| `--only-ai` / `--only-mcp` / `--only-vec` / `--only-skl` | 仅运行一个规则类别 |
| `--check-dependencies` | 同时将 `package.json`/`requirements.txt` 与 npm/PyPI 注册表比对,检查拼写错误和幻觉包(`DEP001`/`DEP002`)。如果你通过 `-r` 直接选择这些规则,会自动启用——你无需记得同时传递两者。`DEP003`(已知恶意包)不需要此选项,它始终离线运行 |
**CI / 工作流**
| 标志 | 作用 |
|------|---------------|
| `--fail-on <severity>` | 如果存在达到/高于此严重级别的发现,则退出并返回 `1` |
| `--baseline <file>` | 对照已保存的基线,仅跟踪新增/变更的问题 |
| `--policy <file>` | 从 `.secureai-policy.json` 加载阈值、跳过的路径和被阻止的规则(若存在则自动检测——`secureai-scan init` 会创建一个) |
**高级**

