バグハンター合宿」への参加を機に、サイボウズの脆弱性報奨金制度に挑戦した。2017年度に認定されたcybozu.com共通管理でのSSRFの詳細をサイボウズと合意の上で開示する。上で動作する検証環境が提供される。以降の調査は全て検証環境で実施している。各サービスのアカウントやセキュリティ設定などはサービスごとに管理せず、「cybozu.com共通管理」で一元管理する仕様となっている。利用企業の管理者はcybozu.com共通管理から社員のアカウントを発行し、権限などを設定できる。cybozu.com共通管理では、各サービスから送信されるシステムメールも管理できる。自社のメールアドレスからシステムメールを送信したい場合は、以下のページからSMTPサーバーを設定する。SMTPサーバーの設定を保存する際、任意のメールアドレス宛にテストメールを送信できる。不適切な設定によりテストメールの送信が失敗すると、以下のページにエラーが残る。脆弱性はSMTPサーバーの設定処理に存在しており、テストメールのエラーを手がかりに発見した。入力値として受け取ったIPアドレスやURLへサーバー側のアプリケーションがリクエストする処理がある。その際の入力値検証に不備があり、内部ネットワークのホストへのリクエストを偽装される問題がサーバーサイドリクエストフォージェリ(SSRF)である1。インターネットからアクセスできない内部ホストのポート開閉を調査されるクロスサイトポートアタック(XSPA)などに悪用される脆弱性である。システムメールの設定では、テストメールを送信する際にSMTPサーバーへ接続を試みる。サーバー名の入力値検証に不備が存在したためSSRFが可能となった。発見に至るまでの調査を解説していく。内部ホストへリクエストを偽装するため、サーバー名にループバックを設定してサーバー自身への接続を試みる。入力すると以下のエラーにより設定を保存できない。変更してもエラーは発生する。これらのエラーはHTML5やJavaScriptによるブラウザ側での入力値検証ではない。サーバー側でループバックの設定を禁止する入力値検証が実装されている。IPアドレスはループバックとして動作する。入力するとエラーは発生せず、SMTPサーバーの設定を保存できる。テストメールの送信には失敗し、以下のエラーが履歴に残る。接続は確立できていないが、接続リクエストは送信できていることが読み取れる。接続を試みるとエラーの内容が変化する。22番ポートはSSHの標準ポートであるため開いている確率が高い。out」になったと推測される。HTTPが動作する確率が高い8080番ポートへの接続でも同様のエラーが発生する。out」となるポートは開いていると特定できる。本来はアクセスできないはずの内部ホスト(サーバー自身)へリクエストを偽装し、ポート開閉を調査できる状態だった。この挙動は「メールサーバ設定に関する不適切な入力の脆弱性(CyVDB-1687)」として認定された。同一要因の脆弱性IPv4アドレスは10進数での表記が一般的だが、8進数や16進数でも表記できる。オクテットは省略しても動作に影響はない。ループバックアドレスとして解釈される2。設定を禁止しているが、一般的でない形式に変換することで設定できる状態だった。この挙動はIPアドレスの「形式」の検証不備であり、CyVDB-1687の原因となったIPアドレスの「用途」の検証不備とは異なる問題だと考える。設定できるからである。このような理由から形式の検証不備を別の脆弱性として報告したが、評価は同一要因(重複)であった。評価理由についてサイボウズは「どちらも入力されたIPアドレスを適切に検証していないことが問題である」と述べている。同一要因となったIPアドレスの「形式」と「用途」の検証不備を両方とも認定してもらうには、一方の不備を先に報告し、修正された検証をもう一方の不備により回避できることを実証すべきだった。2017年度の報奨金制度の提出期限が迫っていたため、両方を同時に報告してしまった。一方の修正を待ってからもう一方を報告していれば、両方とも認定してもらえただろう。修正を待っている間にもう一方を他のバグハンターに報告されてしまうリスクはある。次年度の報奨金制度では方針が変わってしまうリスクも考えられる。同一処理で発見した類似の脆弱性は報告時期を見計らう必要があることを知り、バグバウンティの奥深さを実感した。エントリーの公開にあたりサイボウズへCyVDB-1687の開示可否を確認し、脆弱性認定ガイドラインの更新後を条件に開示が許可された。この更新によりサイボウズはXSPAを脆弱性として認定しない方針に変わった。今回のような任意のサーバー名とポート番号を設定できる機能でのSSRFの場合、XSPAの実証だけだと今後は認定されないだろう。現実的な脅威を示さなければならない。Abma氏の考えに従い、内部ネットワークへのリクエスト偽装をSSRFとする。寺田さんがループバックとして解釈される形式をまとめている。