Show HN:AIコードベース解析・自動修正ツール
getdebug CLI 0.4.0 は、Python AI アプリ向けの正規表現プリフィルタを追加。プロンプトインジェクション、安全でないロールマージ、プロンプト内のPII、無制限ストリーム、安全でないツール出力を検出する。Bandit、Semgrep、vulnhuntr とのベンチマークでは、合成テストと実コードベースの両方で優れた再現率と AI 特化のカバレッジを示した。
getdebug CLI 0.4.0 がリリースされ、Python AI アプリケーション向けの正規表現プリフィルタが追加されました。これは、0.3.0 で導入された JS/TS プリフィルタに続くものです。このバージョンでは、プロンプトインジェクション、安全でないロールマージ、プロンプト内の個人識別情報(PII)、無制限ストリーム、安全でないツール出力の 5 つのカテゴリをカバーします。すべての検出は決定論的なルールに基づいており、LLM を呼び出さないため高速で、デフォルトの getdebug analyze . は Python リポジトリ上でミリ秒単位で完了し、コストはかかりません。従来のシークレットおよび依存関係の CVE チェックに加え、Python AI アプリのアンチパターンを検出できるようになりました。
興味深いのは、パターン自体ではなく、それらを開発中に行ったベンチマーク結果です。比較対象として、他の 3 つのツール(Bandit、Semgrep、vulnhuntr)を選びました。
4 つのツールの比較
- Bandit(PyCQA):Python のセキュリティリンター、手書きルール、無料で高速、LLM 不要、Python のみ。
- Semgrep:多言語 SAST、コミュニティルールパック、手書きルール、無料で高速、LLM 不要。
- vulnhuntr(Protect AI、オープンソース):LLM 駆動の AI アプリ静的解析、Python のみ、エントリーポイント検出ベース。
- getdebug:パターンベースの正規表現プリフィルタ(JS/TS + Python)に加え、オプションのローカル LLM SAST(Ollama 経由、無料、オンデバイス)およびホスト型 LLM SAST(Claude 経由、有料)を提供。0.4.0 では主に Python の正規表現層が追加されました。
テスト 1:ペアの脆弱/安全フィクスチャ(10 ファイル)
各カテゴリにつき 5 つの脆弱なファイルと 5 つの安全なファイルを作成し、4 つのツールで同じセットを評価しました。
| ツール | 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 がシンク引数に現れることを要求するため、誤検知が少なくなります。ただし、バージョン 0.5.5 では、getdebug も安全なフィクスチャに CRITICAL 警告を発することが確認されています。そのため、現時点の getdebug の適合率は 83% です。
また、Bandit と Semgrep は他の 4 つのカテゴリ(プロンプト内の PII、安全でないロールマージ、プロンプトインジェクション、無制限ストリーム)を完全に見逃しています。これらのルールはルールパックに存在しないためです。
テスト 2:実世界のシグナル/ノイズチェック
合成フィクスチャは動作を固定するだけです。実際のコードベースとして、simonw/llm(49 の Python ファイル、CLI ツール)でテストしました。
- Bandit:1,261 件の検出のうち 1,228 件は
assert_used警告(pytest 関連)、AI アプリの検出はゼロ。 - Semgrep:3 件の汎用 SAST ヒット、AI アプリの検出はゼロ。
- getdebug:7 件の検出のうち 6 件は AI アプリ関連(1 件のプロンプトインジェクション、5 件の無制限ストリーム)、1 件は境界上のロールマージ。
Bandit の大量のノイズは既知の問題です。Semgrep の検出は汎用的です。getdebug の検出はすべて HIGH/MEDIUM レベルで、トリアージのためのコンテキストが提供されます。
vulnhuntr について
vulnhuntr 1.2.2 はインストール可能ですが、そのファイル選択ヒューリスティックは「ネットワーク公開」エントリーポイントのみを対象とします。simonw/llm は CLI ツールであるため、vulnhuntr は分析対象のファイルを 0 件と判定し、結果を何も出力しません。これは vulnhuntr の不具合ではなく、スコープの違いです。getdebug のプリフィルタは、Web アプリか CLI かに関係なく、LLM を使用する任意の Python コードで動作します。
あなたへの推奨
LLM を呼び出す Python アプリを開発している場合、以下の 3 つのツールをすべて実行することを推奨します:
bandit -r .:一般的な Python セキュリティ衛生(.bandit 設定で assert_used をオフに推奨)。semgrep --config auto .:クロス言語 SAST カバレッジ。npx @getdebug/[email protected] analyze .:他のツールではカバーできない AI アプリの行動パターン。
これらは相互補完的であり、いずれも他を代替しません。getdebug は、ユーザーオブジェクト全体を LLM プロンプトにシリアライズするようなクラスのバグを検出することに特化しています。
すべてのベンチマーク結果は getdebug.dev/bench で再現可能です。コーパス、方法論、テストフレームワークはオープンソースであり、貢献を歓迎します。