在 Hacker News 上看到「How to find the AWS account ID of any S3 bucket (tracebit.com)」這篇,作者利用不同的額外條件,讓 S3 bucket 產生不同的 response,進而取得 AWS 的 Account ID。
首先是先確定 S3 bucket 在哪一區,這個部分比較簡單,即使是 denied response 也會附上 x-amz-bucket-region
這個資訊。
接下來是在對應的區域建立 VPC 以及 VPC Endpoint for S3,接著準備一台 EC2 instance 確認是否透過 VPC Endpoint for S3 存取 Amazon S3 的資料。
接下來的重點就在「Modify the VPC Endpoint policy to determine whether the account ID of the target bucket starts with "0"」這段了,建立一個 policy,限制只能存取 Account ID 是 0*
的 S3 bucket:
{ "Version": "2012-10-17", "Statement": [ { "Action": "s3:*", "Effect": "Allow", "Resource": "*", "Principal": "*", "Condition": { "StringLike": { "s3:ResourceAccount": "0*" } } } ] }
然後發 request 去要檔案,理論上在 command line 這邊都會收到 denied 的訊息,但在 CloudTrail 裡面會有兩種不同的情境,如果 CloudTrail 裡面有這筆記錄,表示 Account ID 是 0*
;如果沒有的話,表示 Account ID 不是 0*
:
If we find our request in CloudTrail, it means that the VPC Endpoint policy permitted the request - i.e. the Account ID of the bucket starts with 0. If we don't find the request, then the VPC Endpoint policy blocked the request - i.e. the Account ID of the bucket does not start with 0.
有了這個破口後,後續的事情就可以自動化了,平行測試以及二分搜尋法拿出來用就可以加速進行。
而 AWS 的 Account ID 雖然不是敏感資訊,但能挖出來還是頗... 有趣的?