AutoTriageとAutoFixで依存関係の脆弱性を解決する
以下が必要です。
- Aikidoアカウント
- 個人のGitHubアカウント(サンプルプロジェクトをフォークするため)
サンプルリポジトリをAikidoに接続する
Section titled “サンプルリポジトリをAikidoに接続する”このチュートリアルでは、セキュリティツールのデモによく使われるDamn Vulnerable Web Applicationの派生版である、Damn Vulnerable Python Web Appというパブリックリポジトリを使用します。
まず、DVPWAリポジトリを自分のGitHubネームスペースにフォークして、作業用の個人コピーを用意します。次にAikidoワークスペースにログインし、Repositories > Manage Reposに移動します。Add Repoをクリックします。プロンプトが表示された場合は、GitHubにリポジトリ選択の権限を付与し、フォークしたDVPWAリポジトリを選択します。
Aikidoにリダイレクトされてスキャン対象リポジトリを尋ねられた場合は、DVPWAリポジトリを選択します。次にNext, Detailsをクリックします。すると、ワークスペースのフィードに移動します。

初期検出結果と誤検知を分析する
Section titled “初期検出結果と誤検知を分析する”フィードには、リポジトリに対するスキャン結果のサマリーが表示されます。デフォルトのフィルターがAikido refinedの検出結果になっている点に注目してください。フィルター選択にカーソルを合わせると、Aikidoが誤検知をどれだけ削減したかを示すファネルチャートが表示されます。このデモアプリには意図的に極めて悪用しやすい脆弱性が含まれているため、トリアージ後もほとんどの検出結果が残ります。しかし、一般的なコードベースでは、Aikidoは通常、誤検知ノイズを90%以上削減します。

右上隅にある1 Auto Ignoredと表示されたタイルを選択します。フィードのIgnoredセクションに移動します。
Issue名(pyyaml)、種類(Pythonパッケージ)、深刻度(Critical)、無視理由に注目してください。これは非常に古いパッケージのCritical脆弱性であるにもかかわらず、Aikidoはこの関数がコードベース内のどこでも(宣言されている以外は)使用されていないと判断しています。

Issueをクリックすると、詳細を表示するドロワーが開きます。宣言されているパッケージバージョン3.13は、サブIssueとしてマークされた2件のCritical CVEの影響を受けています。
公式の修正方法はバージョン5.4へのアップグレードですが、Aikidoはこの問題を無視しても安全とマークしています。いずれかのサブIssueの下にあるAffected function not in useのダウングレードメッセージをクリックします。これにより、Aikidoが到達可能性分析を実行し、このパッケージがコード内のどこでも使用されていないと判断したことを確認できます。

Issueの詳細に戻り、View reachability analysisをクリックします。フローチャートには、影響を受けるバージョンのpyyamlがrequirements.txtに宣言されているものの、コード内のどこでも、またそれに依存する関数のどこからも使用されていないことが示されます。

対照例として、メインのAikido refined Issueフィードに戻ります。深刻な脆弱性を持つaiohttpパッケージのIssueをクリックします。Issueの詳細には多数のCVEが表示されます。CVE-2024-23334について、View reachability analysisをクリックします。ここでは、aiohttpに依存する2つの異なるパッケージが、コードベース内の2つの異なるファイルで使用されていることがわかります。

Issueの詳細に戻り、CVE-2024-23334のUpgradedメッセージをクリックします。Aikidoは深刻度が引き上げられた理由を2つ提示します。(1) GitHub上に悪用コードが存在し発見されやすいこと、(2) この脆弱性が実際に悪用されていること、です。

AutoFixでセキュリティ上の問題を解決する
Section titled “AutoFixでセキュリティ上の問題を解決する”引き続きaiohttpのIssueの詳細ドロワーで、How do I fix it?の隣にあるAutoFixをクリックします。AutoFixページに移動します。ここでAikidoは、requirements.txt内のaiohttpのバージョンを3.5.3から3.12.14へ引き上げることを提案します。
新規プルリクエスト経由で修正を適用するには、ステータス列の隣にあるケバブメニューを開き、Create PRをクリックします。(注: リポジトリへの書き込み権限をAikidoに付与するよう求められる場合があります。これは、Aikidoがあなたに代わってプルリクエストを開くために必要です。)

すべてのパッケージに適用するか特定のパッケージに適用するか尋ねられた場合は、all packagesを選択します。PR作成処理が進む間、Aikidoはダイアログウィンドウを表示します。完了したら、View PRをクリックします。

その後、GitHubリポジトリ(自分のdvpwaフォーク)で開いているPRに移動します。Aikidoは、この変更によって解決される脆弱性についての詳細な説明を記入済みです。Files changedタブをクリックすると、requirements.txt内でパッケージバージョンが引き上げられていることも確認できます。

この時点で、プルリクエストをクローズするか、そのまま放置する(今後のテストのために脆弱性を残しておきたい場合)かを選べます。
お疲れさまでした!このチュートリアルでは、以下を行いました。
- リポジトリをAikidoに接続し、初めてのセキュリティスキャンを実行した
- 深刻度とコードベース内での露出度に基づいて脆弱性を自動トリアージした
- AutoFixを使って、脆弱な依存関係への修正を提案・適用した