Show HN:AI代码库分析器和自动修复工具
getdebug CLI 0.4.0 引入了针对 Python AI 应用的正则表达式预过滤器,能够检测提示注入、不安全角色合并、提示中的 PII、无界流和不安全工具输出等五类问题。在与 Bandit、Semgrep 和 vulnhuntr 的对比基准测试中,getdebug 在合成测试和真实代码库上都表现出更高的准确率和针对 AI 特定模式的覆盖率。
getdebug CLI 0.4.0 版本现已发布,新增了针对 Python AI 应用的正则表达式预过滤器,与 0.3.0 版本中已有的 JS/TS 过滤器相辅相成。该版本涵盖五个类别:提示注入、不安全角色合并、提示中的个人身份信息(PII)、无界流以及不安全工具输出。所有检测均为确定性规则,无需调用 LLM,因此速度极快。在 Python 仓库上运行默认的 getdebug analyze . 命令仅需毫秒级时间,且零成本。现在,除了原有的密钥和依赖 CVE 检查外,它还能检测 Python AI 应用的常见反模式。
有趣的部分并非模式本身——它们是对常见 SDK 习语(如 messages=[{"role": "system"...}]、stream=True、subprocess.run(tool_call.input.command))的直接正则匹配。真正引人关注的是我们在开发过程中针对其他三个同类工具运行的基准测试结果。
四个工具的公正对比
- Bandit(PyCQA):Python 开源安全 linter,手写规则,免费快速,无 LLM,仅支持 Python。
- Semgrep:多语言 SAST 工具,带有社区规则包,手写规则,免费快速,无 LLM,产品形态与 getdebug 类似。
- vulnhuntr(Protect AI,开源):声称是 AI 应用静态分析领域的领导者,基于 LLM,仅支持 Python,基于入口点检测。
- getdebug:提供基于模式的正则预过滤器(JS/TS + Python),以及可选的本地 LLM SAST(通过 Ollama,免费,设备端)和托管 LLM SAST(通过 Claude,付费)。0.4.0 版本主要新增了 Python 正则层。
测试 1:配对的安全/漏洞样本(10 个文件)
我们为每个类别编写了 5 个有漏洞和 5 个安全的 Python AI 应用样本,共 10 个文件。所有四个工具均在相同样本集上运行。
| 工具 | TP | FP | FN | 精确率 | 召回率 | |------|----|----|----|--------|--------| | getdebug | 5 | 1 | 0 | 83% | 100% | | bandit | 1 | 1 | 4 | 50% | 20% | | semgrep | 1 | 1 | 4 | 50% | 20% | | vulnhuntr | — | — | — | 未选择文件 | 未选择文件 |
Bandit 和 Semgrep 仅通过通用的 subprocess.run(shell=True) 规则命中了不安全工具输出样本,但同时也错误地将安全变体报告为风险。它们无法识别 cmd 来自静态字典而非模型输出。而 getdebug 的正则需要 tool_call.input.X 引用出现在 sink 参数中,从而减少了误报。不过,0.5.5 版本的更新显示,getdebug 对该安全样本也发出了严重警告,因为 tool_call.input.tag 进入了 shell=True 的 sink,而工具无法区分是否经过静态白名单。因此当前 getdebug 的精确率为 83%,而非最初报告的无误报。
另外,Bandit 和 Semgrep 完全遗漏了其他四个行为类别:提示中的 PII、不安全角色合并、提示注入和无界流。它们的规则包中没有包含针对 {"role": "system", "content": f"...{'$'}{name}..."} 的模式。
测试 2:真实世界信噪比检查
合成样本只能锁定行为。我们针对 simonw/llm(Simon Willison 的干净、维护良好的 LLM CLI 工具,49 个 Python 文件)运行了所有三个可用的工具。
- Bandit:共发现 1,261 个问题,其中 1,228 个是
assert_used警告(pytest 相关),AI 应用覆盖为零。 - Semgrep:发现 3 个通用 SAST 命中,AI 应用覆盖为零。
- getdebug:发现 7 个问题,其中 6 个是 AI 应用相关(1 个提示注入,5 个无界流),1 个边界角色合并。
Bandit 的大量误报是长期以来的问题。Semgrep 的发现虽然真实但不针对 AI。getdebug 的发现均带有 HIGH/MEDIUM 级别,并附有上下文信息供排查。
关于 vulnhuntr
vulnhuntr 1.2.2 可以正常安装和运行,但其文件选择启发式方法仅针对“网络暴露”的入口点。由于 simonw/llm 是 CLI 而非 Web 应用,vulnhuntr 未选择任何文件进行分析,因此未产生任何结果。这并不意味着 vulnhuntr 损坏,而是其适用范围不同。getdebug 的 AI 应用预过滤器可运行在任何涉及 LLM 的 Python 代码上,无论是 Web 应用还是 CLI。
这对你的意义
如果你开发的是调用 LLM 的 Python 应用(如聊天封装器、代理框架、工具调用后端或批量摘要器),建议同时运行以下三个工具:
bandit -r .用于通用 Python 安全卫生(建议先通过 .bandit 配置关闭 assert_used)。semgrep --config auto .用于跨语言 SAST 覆盖。npx @getdebug/[email protected] analyze .用于其他工具无法覆盖的 AI 应用行为模式。
它们互为补充,各自不可替代。getdebug 专注于检测将整个用户对象序列化到 LLM 提示中这类难以通过通用 SAST 可持续维护的漏洞。
所有基准测试结果均可通过 getdebug.dev/bench 复现。语料库、方法和测试框架均已开源,欢迎贡献。