
(`-. ('-.
_(OO )_ _( OO)
.-----,--(_/ ,. (,------. .-----. .----. .-----..------. .-----. .----. .----. ,--. .------.
' .--.\ \ /(__/| .---' .-')/ ,-. \/ .. \/ ,-. | ___| .-') / -. \/ .. \ / .. \ / .' | ___|
| |('-.\ \ / / | | _( OO'-' | . / \ '-' | | '--. _( OO)'-' _' . / \ . / \ . / -. | '--.
/_) |OO )\ ' /,(| '--(,------. .' /| | ' | .' /`---. '(,------. |_ <| | ' | | ' | .-. '`---. '.
|| |`-'| \ /__)| .--''------.' /__' \ / '.' /__.- | |'------.-. | ' \ / ' \ / ' \ | .- | |
(_' '--'\ \ / | `---. | |\ `' /| | `-' / \ `-' /\ `' / \ `' /\ `' /| `-' /
`-----' `-' `------' `-------' `---'' `-------'`----'' `----'' `---'' `---'' `----' `----''
Canary Exploit Generator - https://github.com/F5-Labs/parquet-canary-exploit-rce-poc-CVE-2025-30065
最低限の手順(README を読まずに進めると自己責任となります):
mkdir -p build/libs
curl -o build/libs/parquet_canary_exploit-fat.jar \
-L https://github.com/F5-Labs/parquet-canary-exploit-rce-poc-CVE-2025-30065/blob/main/build/libs/parquet_canary_exploit-fat.jar
java -jar build/libs/parquet_canary_exploit-fat.jar --mode=generate YOUR_CALLBACK_URL
コンプライアンス担当者? AppSec 担当者? 脆弱性管理担当者? F5 Labs はあなたのためにこれを作りました。この CVE は CVSS 10 をスコアしており、通常は迅速な対応が求められることを意味します。私たちはこのツールを jar ファイルとして同梱し、parquet ファイルを生成できるようにしました。それを自身のシステムに読み込ませて脆弱かどうかを判断できます。これは修正前と修正後の両方で役立ちます。
この PoC の 内部実装 の功労者は Mouad Kondah 氏です。2025-04-07 付の記事 で、この CVE と PoC について解説しています。
この parquet ファイルは、parquet-avro の、信頼できない Java の String を任意の Java クラスコンストラクタに渡せるという挙動を悪用します。コールバック URL を指定すると、システムが parquet ファイルを読み込んだ際に、javax.swing.JEditorPane オブジェクトがその URL へのアクセスを試みます。これは無害です。
カナリアエクスプロイトツールを手早くおさらいしたいですか? ライブデモはこの 2 分間の YouTube Short をご覧ください: [デモ動画]。
F5 Labs が把握している parquet-avro モジュールの脆弱なシナリオは 2 つあることに注意してください:
String オブジェクトを別の型に強制変換するためのパッケージ許可リストという概念がなかったため。org.apache.parquet.avro.SERIALIZABLE_PACKAGES が * のような寛容な値に設定されている場合に限り脆弱です。これは、システムが(DNS または HTTP(S) で)外部接続できるすべての宛先に対して使用できます。インターネット全体へのいずれかの種類の外部接続がない場合は、データセンター内から到達可能で、DNS または HTTP アクセスログを取得できるものを検討してください。これを間違えると偽陰性になることに注意してください。org.apache.parquet.avro.SERIALIZABLE_PACKAGES の非常に標準的でない設定も、同様に偽陰性を引き起こす可能性が考えられます。前のサブセクションを参照してください。
コードを読んで理解し、自分でビルドすることをお勧めします。便宜上、このリポジトリ内にコードの配布ビルドを jar として提供しています。
ジェネレータをビルドまたは実行するには、JDK 21 以降が必要です(「OpenJDK21 install」などの検索語が役立つかもしれません)。JDK のインストールに慣れている場合は、以下がショートカットです:
brew install openjdk@21sudo apt install openjdk-21-jdksudo yum install java-21-openjdkjar をダウンロードするか、リポジトリをクローンするかのいずれかです。
mkdir -p build/libs
curl -o build/libs/parquet_canary_exploit-fat.jar \
-L https://github.com/F5-Labs/parquet-canary-exploit-rce-poc-CVE-2025-30065/blob/main/build/libs/parquet_canary_exploit-fat.jar
git clone https://github.com/F5-Labs/parquet-canary-exploit-rce-poc-CVE-2025-30065.git
cd parquet-canary-exploit-rce-poc-CVE-2025-30065
file build/libs/parquet_canary_exploit-fat.jar
shasum build/libs/parquet_canary_exploit-fat.jar
想定される出力:
build/libs/parquet_canary_exploit-fat.jar: Zip archive data, at least v1.0 to extract, compression method=deflate
19ae361d589a9cd476bee31ba3f437094a8a6440 build/libs/parquet_canary_exploit-fat.jar
java -jar build/libs/parquet_canary_exploit-fat.jar -h
想定される出力:

まず、YOUR_CALLBACK_URL を何にするか決めてください。parquet 処理バックエンドが URL のドメイン名を解決するか、Web サーバーに URL をリクエストしたときに、それを検出できる必要があります。このために canarytokens.org の「Web bug」または「DNS」を検討しても構いません。詳細は上記の「注意点」セクションを参照してください。
次のコマンドを実行します:
java -jar build/libs/parquet_canary_exploit-fat.jar --mode=generate YOUR_CALLBACK_URL
これにより poc.parquet が生成されます。次のように検証してください:
file poc.parquet
次のように出力されるはずです:
poc.parquet: Apache Parquet
このファイルをシステムに読み込ませることができます。システムに脆弱性がある場合、コールバックが届きます。注意点のセクションも参照してください。
便宜上、ファイルがまだ存在しない場合もこのコマンドが生成します。
java -jar build/libs/parquet_canary_exploit-fat.jar --mode=test YOUR_CALLBACK_URL
python3 -m http.server --bind 127.0.0.1 9090 &
java -jar build/libs/parquet_canary_exploit-fat.jar --mode=test http://localhost:9090
parquet ファイルの読み方については CanaryExploitGenerator.testParquetFile() を参照してください。これは、システムの内部で実行されるコードがどのようになるかを示しています:
ParquetReader reader = AvroParquetReader.builder(inputFile).build();
// enough to trigger the construction of javax.swing.JEditorPane
Object object = reader.read();
このツールは、許可されたセキュリティテスト環境でのみ使用することを目的としています。該当する管轄区域の法令を把握してください。法的詳細については LICENSE.md を参照してください。