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 復現。語料庫、方法和測試框架均已開源,歡迎貢獻。