AWS EC2では、インスタンスメタデータサービス(IMDS)を通じて、EC2インスタンスに関連する情報やIAM認証情報を取得できます。IMDSには主に以下の2つのバージョンがあります。v1のリスクがいまいちわからなかったので調査した記録です。
- IMDSv1:2006年から存在する古い方式。HTTPリクエストだけで情報が取得可能。
- IMDSv2:新しい方式。セッショントークンを用いたアクセスが必要。
IMDSv1を残すとどうなるか
IMDSv1はHTTPヘッダーなしでアクセスできるため、アプリケーションに任意のリクエストを送信できる場合、IAMロールの認証情報を搾取できます。
具体的には、以下のリクエストを送信します。
http://169.254.169.254/latest/meta-data/iam/security-credentials/
アプリケーション任意のリクエストを送信できるケースはまれですが、SSRF(Server-Side Request Forgery)の脆弱性がある場合、脆弱性を利用して内部からリクエストを送ることで情報を搾取できる可能性があります。
IMDSv2の利用を強制する方法
Amazon Web Services ブログ デフォルトでの Amazon EC2 インスタンスメタデータサービス IMDSv2に解説があります。EC2インスタンスの設定で、IMDSv2がOptionalになっている場合、どちらのバージョンが利用されるかはクライアントの実装に依存します。一方でRequiredになっている場合は、IMDSv2が強制されます

アプリケーションにSSRFがなければ安全か
アプリケーションにSSRFの脆弱性がなければIMDSv1を利用した攻撃は成立する可能性が低いです。ただし、IMDSv1を残す合理的な理由は基本的にありません。