2019 的時候 Amazon EC2 推出了 IMDSv2 (Instance Metadata Service):「Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the EC2 Instance Metadata Service」。
舊版 v1 的 IMDS 可以直接拿到很多東西,像是這樣:
curl -v http://169.254.169.254/latest/dynamic/instance-identity/document
對於有使用 IAM Role 授權 EC2 instance 操作的,還可以參考「How to hack AWS instances that have the metadata service (IMDSv1) enabled」這邊的方法取得對應的 AWS credential。
當攻擊者可以「操弄」時 (像是 proxy server 或是 crawler),就會蠻危險的。
而 IMDSv2 則是多了一個步驟,你要先拿到 token,再把這個 token 帶到之後的 HTTP request header 裡面,而蠻多可以「操弄」的情境下是無法修改 HTTP request header 的:
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") curl http://169.254.169.254/latest/meta-data/profile -H "X-aws-ec2-metadata-token: ${TOKEN}"
而這次 2023 年則是推出了對應的計畫,將在 2024 年年中把預設值改成只提供 IMDSv2:「Amazon EC2 Instance Metadata Service IMDSv2 by default」。
Effective mid-2024, newly released Amazon EC2 instance types will use only version 2 of the EC2 Instance Metadata Service (IMDSv2). We are also taking a series of steps to make IMDSv2 the default choice for AWS Management Console Quick Starts and other launch pathways.
舊的 IMDSv1 還是可以開,但需要指定才會啟用。
Mentions