脆弱性についてまとめてみるぼっちアドカレ10日目の記事です。
(書ききったのは22日目...学校のレポートが...)
概要
SSRFとは公開されているサーバーから本来アクセスできてはならない内部サーバーに対して通信を発生させる脆弱性です。
主にパブリック環境からプライベートな環境へのアクセスが多いイメージですがパブリック環境からパブリック環境でもSSRFに該当します。
悪用方法について
SSRFはクラウド環境において特に脅威になりえます。
たとえば下記のように指定したWebサイトのアーカイブを取り表示してくれるサイトがあったとします。
http://example.com?archive=http://example.net
このような場合に内部からしかアクセスできないAWSのクレデンシャルをうまくいけば取得できてしまいます。
http://example.com?archive=http://169.254.169.254/latest/meta-data/iam/security-credentials/
またクラウド環境でなくとも内部情報の漏洩につながります。
Webサイト側での対応について
APIなど特定のエンドポイントへのアクセスしか想定しない場合ホワイトリスト形式でフィルタリングすることで対策できます。
上記の例のようにグローバルなインターネットへのアクセスが必要な場合iptables等を用いてプライベートなインターネットへのアクセスを禁止することが一番の対策です。
文字ベースでフィルタリングするとlocalhostに解決されるドメインを利用したりできてしまうのでiptablesなどでアクセス自体できなくするのが最適です。
HackerOneレポート
1. Server Side Request Forgery (SSRF) via Analytics Reports
リンク: https://hackerone.com/reports/2262382
これはHackerOneに対して提出されたものでレポートを作成する際のテンプレート機能に脆弱性がありました。
検証環境がないため憶測ですがこのテンプレート機能はテンプレートの固有IDをクライアントからサーバーに送っておりこの値が不正なものであればエラーメッセージに送られたIDを含むた状態でクライアントへ返答していました。
そのためBurpsuite等の中継ソフトを利用しクライアントから送信されたテンプレートの固有IDを偽造しiframeを送信しsrcに内部ネットワークを指定することで本来アクセスできないAWSのメタデータを取得することに成功しました。
この問題はエラーメッセージにIDを含めないようにする形で対策されました。
個人的にこの問題はエラーメッセージに送信された内容を含めてしまう初歩的な問題に感じたのでこれでCVSS 10.0のcriticalの脆弱性になっているのがびっくりしました。
Reflected XSSも活用しているようなのでXSS対策の方も大事だなと感じました。
2. SSRF in Exchange leads to ROOT access in all instances
リンク: https://hackerone.com/reports/341876
これはShopifyに対して提出されたレポートです。
Shopifyが過去運用していたShopify Exchangeのスクリーンショット機能に脆弱性が存在しました。
攻撃者はまず検証用のストアを作成しテンプレートとして下記のようなものを埋め込みます。
<script>
window.location="http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token";
// iframes don't work here because Google Cloud sets the `X-Frame-Options: SAMEORIGIN` header.
</script>
このスクリプトではGoogle Cloudのメタデータを取得できるエンドポイントへリダイレクトするようになっています.
このようなテンプレートを作成後Exchangeに公開することで自動的にサムネイルの画像が作成されるのですが対策が甘かったためリダイレクトした先のGoogle Cloudのメタデータを画像として出力してしまいました。
このレポート内ではSSHキーの追加こそはできなかったもののk8sの認証情報は取得できました。
最初取得した認証情報ではコマンドは実行できませんでしたがpodを作成しその中からsecretを取得することでサービスアカウントのトークンを取得しすべてのコンテナのシェルを入手するところまで行きました。
ShopifyはRCEとして処理し$25,000の報奨金をあたえたみたいです。
最後に
SSRFはやっぱりクラウド環境のメタデータの漏洩がかなりきついですね。
RCEにつながることが多くて自分もクラウドを使うときは気をつけたいなと感じました。
またGoogle Cloudのメタデータですが現状はMetadata-Flavor: Googleとヘッダーに入れなと取得できないようになっています。Shopifyのレポートが提出された時点でもこれ自体は有効ではあったものの後方互換性の為2020年9月30日まではヘッダーがいらないバージョンのエンドポイントも非推奨になりながらも利用できる状態でした。