substrate-vulnerability-scanner
作成者 trailofbitssubstrate-vulnerability-scanner は、Substrate と FRAME の pallet を監査し、算術オーバーフロー、panic による DoS、不適切な origin チェック、誤った weight、unsafe な unsigned extrinsics などの重大な問題を洗い出すのに役立ちます。ランタイム、pallet extrinsics、weight ロジックの Security Audit レビューで、この substrate-vulnerability-scanner スキルを活用してください。
このスキルの評価は 78/100 で、ディレクトリ利用者にとって十分有力な掲載候補です。Substrate に特化した明確なセキュリティ用途があり、実行手順を追うのに十分な手続き情報も備えており、リポジトリとしての実体もインストール検討に値します。ただし、インストールコマンドがなく、ワークフローがツール自動化ではなくドキュメント主導であるため、導入時には一定の手間が残る点には注意が必要です。
- Substrate/FRAME の pallet 監査に明確に焦点を当てており、ランタイムレビュー、リリース前評価、dispatchable の検証など用途が具体的です。
- 7 つの Substrate 特有のパターンに対する脆弱性カバレッジがあり、検出パターンと緩和策をまとめた専用の参照ファイルで裏付けられています。
- プラットフォーム判定の目印、コード例、制約などの実用的な運用ガイダンスが充実しており、エージェントの試行錯誤を減らせます。
- インストールコマンドや自動化スクリプトが用意されていないため、利用者側でワークフローへ手動統合する必要があります。
- 内容は実行型というよりドキュメント型に見えるため、結果は実行可能なパイプラインをたどるというより、エージェントがパターンを正しく解釈できるかに左右される可能性があります。
substrate-vulnerability-scanner スキルの概要
substrate-vulnerability-scanner ができること
substrate-vulnerability-scanner スキルは、Substrate と FRAME のコードを監査し、クラッシュ、サービス拒否、または不正な状態変更につながりうる 7 種類の高リスクでプラットフォーム特有のバグを洗い出すのに役立ちます。一般的な Rust レビューではなく、Security Audit のワークフローに絞った substrate-vulnerability-scanner が必要なときに最も効果を発揮します。
こんな人に向いている
Polkadot のパラチェーンやスタンドアロンの Substrate チェーンで、カスタム pallet、runtime extrinsics、weight ロジック、unsigned transaction の検証を確認しているなら、このスキルが適しています。セキュリティエンジニア、プロトコル開発者、そして深い手動解析の前に素早く一次チェックを入れたいレビュー担当者に特に向いています。
何を見つけるのが得意か
このリポジトリは、通常のコードレビューでは見落とされがちなパターン、たとえば算術オーバーフロー、panic 起因の DoS、不適切な origin チェック、誤った weight、危険な unsigned extrinsics、そしてそれに関連する FRAME 特有のミスに合わせて調整されています。主な価値は広範なコード理解ではなく、Substrate の runtime コードで特に重要なセキュリティクラスを見極めることにあります。
substrate-vulnerability-scanner スキルの使い方
インストールしてレビュー範囲を絞る
trailofbits の skills パッケージを使って substrate-vulnerability-scanner install を実行し、monorepo 全体ではなく runtime か pallet の境界に対して適用してください。入力には、何を監査するのか、どの pallet か chain が対象なのか、そして exploitability、修正提案、チェックリスト形式の確認のどれを重視するのかをはっきり書くと、最もよい結果が得られます。
先に読むべきファイル
まず SKILL.md を読んで検出ロジックを把握し、続いて resources/VULNERABILITY_PATTERNS.md で実際のチェックパターンと緩和策を確認してください。リポジトリに複数の pallet がある場合は、まず pallet の lib.rs か mod.rs、それに weight ファイルと unsigned transaction の検証コードを確認しましょう。こうした場所こそ、このスキルが最も価値を出しやすい箇所です。
スキルに十分なプロンプトを与える
弱いプロンプトは「この pallet をスキャンして問題を見つけてください」です。より強いプロンプトは「pallet_balances の Substrate 特有の脆弱性をレビューしてください。extrinsics、storage mutation、weight 計算、origin checks に注目してください。未チェックの算術、ユーザー入力から到達可能な panic 経路、unsigned extrinsic の検証不足があれば指摘してください。結果はファイルパス、影響を受ける関数名、悪用時の影響、修正提案つきで返してください。」です。こうした指示を出すと、substrate-vulnerability-scanner usage の再現性が上がり、何を優先して、どの形式で出力してほしいかがモデルに伝わります。
シグナルを上げるワークフローのコツ
このスキルは構造化された一次スクリーニングとして使い、その後、指摘された経路を runtime の文脈に照らして必ず検証してください。コードを貼るときは、周辺の型定義やヘルパー関数も含めましょう。Substrate のバグは、config traits、origin types、weight の前提条件に依存していて、1 つの関数だけでは見えないことが多いからです。リポジトリに複数の pallet があるなら、単一の全体判定を求めるより、pallet ごとにスキルを回したほうが精度が上がります。
substrate-vulnerability-scanner スキルの FAQ
substrate-vulnerability-scanner は Substrate 専用ですか?
はい。generic な Rust アプリケーションではなく、Substrate/FRAME のパターン向けに作られています。通常のプロンプトでもコードの違和感は拾えますが、pallet の意味論や dispatchable behavior に結びついた chain-runtime のセキュリティ判断が必要なら、substrate-vulnerability-scanner のほうが適しています。
Substrate の専門家である必要はありますか?
いいえ。ただし、runtime ロジックと off-chain tooling のどちらなのかを見分けられると、結果はかなり良くなります。初心者でも、正確な pallet パスを指定し、広い助言ではなく具体的な指摘を求めれば、このスキルを十分使えます。
どんなときに使うべきではありませんか?
ビジネスロジック、暗号、off-chain services の監査を、このスキルだけで完結させてはいけません。危険箇所が runtime pallets の外にある場合、検出ルールは FRAME と dispatchable functions に最適化されているため、本当の問題を見落とす可能性があります。
一般的なセキュリティプロンプトと何が違いますか?
一般的なプロンプトは広めのレビューコメントを返すかもしれませんが、このスキルは、厳選された Substrate の脆弱性パターンと、それらが現れやすい場所に基づいています。そのため、runtime コードに対してセキュリティ重視の一次確認をしたいとき、substrate-vulnerability-scanner guide は推測を減らし、判断しやすくしてくれます。
substrate-vulnerability-scanner スキルの改善方法
まず適切な文脈を与える
最良の入力は、pallet 名、chain の種類、そして特に気になるコードパスを明示します。コードが balances、rewards、fees、governance、unsigned transactions、root-only calls のどれを扱うのかも含めてください。これらの情報によって、重要になる脆弱性が変わります。
単なる一致ではなく、悪用可能な経路を尋ねる
よくある失敗は、怪しい行だけが並んでセキュリティ上の意味が分からない出力になることです。そのパターンが実際に到達可能か、どの入力で発火するか、影響は何か、そして config traits や upstream の invariant が原因で false positive なのかを説明するように求めてください。そうすると、substrate-vulnerability-scanner usage はトリアージに使いやすくなります。
一次結果のあとでレビューを絞り込む
最初の出力がノイズっぽいなら、範囲を 1 つの pallet、1 つの extrinsic、または ensure_* チェック、weight 計算、storage arithmetic など 1 つの論点に絞ってください。逆に浅すぎる場合は、resources/VULNERABILITY_PATTERNS.md のパターンと、周辺の trait bounds を照合する二次レビューを依頼しましょう。そうした詳細が、実際のバグと安全な抽象化を分けることが多いからです。
