はじめに
ペネトレーションテストは外部に依頼すると数週間単位で時間がかかりがちだけども、AWS Continuum(Security Agent)を使うと手元でさくっとできるのでデモアプリで試し。
発見から緩和・修復まで対応してるけど今回はとりあえず検出結果を出すところまで。
検証環境
| 項目 | 内容 |
|---|---|
| 対象アプリ | OWASP Juice Shop(公式 Docker イメージ bkimminich/juice-shop) |
| 実行基盤 | Amazon ECS Express Mode(Fargate) |
| リージョン | ap-northeast-1(東京) |
| ターゲット URL | 独自ドメイン(例: https://) |
| テストツール | AWS Security Agent(AWS Continuum の一部) |
なぜ OWASP Juice Shopを対象アプリにするのか
SQLインジェクションや XSSなどOWASP Top 10 相当の脆弱性が多数含まれている(わざとそう作られている)ので、AIがどこまで見つけられるかのテストとしてgood。
1. Continuumワークスペースのセットアップ
Security Agentのコンソール画面。Continuumに統合されたのでSecurity Agent関連のドキュメントでも「Continuumの一部」という文言がよく出てくる

エージェントスペース(テストの実行・管理単位)の名前はよしなに

IAM Identity Centerが推奨だったけどぱぱっとやりたかったので、エージェントスペースの認可はIAMで実施

2. デモアプリのデプロイ
OWASPのjuice shopをECS Expressでデプロイ

3. エージェントスペース設定・テスト実行
マネジメントコンソールから、「ウェブアプリで開始」をクリックしてSecurity Agentのウェブアプリを開く

ここからはウェブアプリ側で設定。今回はペネトレーションテストを選択。

テスト実行対象のターゲットドメインを入力。※所有権を検証済みのドメインでないとテストを実行できないため、検証は予め済ませておく

課金は実際の実行時間ではなく、タスク時間(エージェントが推論・行動していた時間の合計)で計算される。

4. 実行結果
実行の概要
| 項目 | 値 |
|---|---|
| 実行時間(実時間) | 2 時間 6 分 52 秒 |
| タスク時間(累積) | 8 時間 26 分 |
| 最大タスク時間(上限設定) | 30 時間 |
| 検出結果 | 9 件(+ 低信頼度・情報レベル 8 件) |
| ステータス | Failed(※後述) |
検出結果
信頼度「高」の検出結果 9 件の内訳は Critical 2 件・High 4 件・Medium 3 件
信頼度高の検出結果一覧
| # | 脆弱性 | 重大度 |
|---|---|---|
| 1 | Pug のサーバーサイドテンプレートインジェクション(/profile の username) → Node.js の任意コード実行・シークレット漏えい |
Critical(リスクスコア 9.9) |
| 2 |
/rest/user/login の email 欄の SQL インジェクション → 認証回避(admin としてログイン) |
Critical |
| 3 |
/ftp の Poison Null Byte による LFI → 二重 URL エンコードした NULL バイトで拡張子ホワイトリスト(.md/.pdf)を回避し、バックアップやソースファイルを取得 |
High |
| 4 |
GET /rest/track-order/:id の NoSQL インジェクション($where によるサーバーサイド JavaScript) → 認証なしで他ユーザーの注文情報を取得 |
High |
| 5 | 商品検索 /rest/products/search?q= の UNION ベース SQL インジェクション → 認証情報テーブルの全件取得 |
High |
| 6 | ユーザー登録 POST /api/Users/ での role の Mass Assignment → 垂直権限昇格 |
High |
| 7 |
/api/BasketItems のオブジェクトレベル認可の欠如 → 他ユーザーのカート内商品を閲覧・変更 |
Medium |
| 8 |
PATCH /rest/products/reviews のオブジェクトレベル認可の欠如 → 他ユーザーの商品レビューを上書き |
Medium |
| 9 |
GET /rest/basket/{id} のオブジェクトレベル認可の欠如 → 他ユーザーのカートを閲覧 |
Medium |

