CVE-2025-30065: Apache Parquet Schema Deserialization RCE
Eine Remote-Code-Execution-Schwachstelle mit maximaler Schwere in der Java-Bibliothek von Apache Parquet erlaubt Angreifern, auf jedem System, das eine bösartig präparierte Parquet-Datei liest, beliebigen Code auszuführen. CVSS 10.0. Betrifft praktisch jede Big-Data-Pipeline, die das Parquet-Format nutzt — Spark, Flink, Hive und Cloud-Data-Warehouses.
| Attribut | Wert |
|---|---|
| CVE-ID | CVE-2025-30065 |
| CVSS-Vektor | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-502: Deserialisierung nicht vertrauenswürdiger Daten |
| Veröffentlicht | 1. April 2025 |
| Ausnutzung | Keine aktive Ausnutzung gemeldet (öffentlicher PoC existiert) |
Was ist CVE-2025-30065?
Apache Parquet ist ein spaltenorientiertes Speicherformat, das in Big-Data-Ökosystemen weit verbreitet ist. Das parquet-avro-Modul enthält in Versionen bis 1.15.0 eine Deserialisierungs-Schwachstelle im Schema-Parsing-Code. Wenn eine Java-Anwendung eine Parquet-Datei mit einem präparierten Avro-Schema liest, deserialisiert der Parser angreiferkontrollierte Klassenreferenzen, was zu beliebiger Code-Ausführung im Kontext der lesenden Anwendung führt.
Dies ist besonders gefährlich, weil Daten-Pipelines routinemäßig Parquet-Dateien aus externen Quellen einlesen: S3-Buckets, Datenpartner, Nutzer-Uploads, ETL-Integrationen. Jede Pipeline, die nicht vertrauenswürdige Parquet-Dateien verarbeitet, ist verwundbar.
⚠ Supply-Chain-Angriffsvektor
CVE-2025-30065 schafft ein überzeugendes Supply-Chain-Angriffsszenario: Ein Angreifer, der bösartige Parquet-Dateien in eine Daten-Pipeline einschleusen kann (über einen kompromittierten Datenlieferanten, eine S3-Bucket-Fehlkonfiguration oder einen Man-in-the-Middle-Angriff), erlangt Code-Ausführung in der Datenverarbeitungs-Infrastruktur — potenziell AWS EMR, Databricks, Azure HDInsight oder On-Premises-Hadoop-Cluster, die mit privilegierten Cloud-Credentials laufen.
Betroffene Systeme
| Komponente | Betroffene Versionen | Behobene Version |
|---|---|---|
| parquet-avro (Java) | <= 1.15.0 | 1.15.1+ |
| Apache Spark (nutzt parquet-avro) | Alle mit betroffener Bibliothek | Bibliothek aktualisieren |
| Apache Flink | Alle mit betroffener Bibliothek | Bibliothek aktualisieren |
| Apache Hive | Alle mit betroffener Bibliothek | Bibliothek aktualisieren |
| Amazon EMR | Versionen mit parquet-avro <= 1.15.0 | EMR upgraden oder JAR überschreiben |
| Databricks Runtime | Versionen mit betroffener Bibliothek | Databricks patcht DBR-Versionen |
Technische Details
Die Schwachstelle befindet sich in der Klasse AvroSchemaConverter innerhalb von parquet-avro. Beim Konvertieren des Parquet-Schemas in ein Avro-Schema verarbeitet der Code Schema-Metadaten, die beliebige Klassennamen enthalten können. Diese Klassennamen werden in einer reflektiven Instanziierung ohne Allowlist-Validierung verwendet.
# Conceptual representation of vulnerable code path
public Schema convert(MessageType parquetSchema) {
// Schema metadata can contain attacker-controlled strings
String javaClass = parquetSchema.getField("java_class");
// Dangerous: instantiates arbitrary class from string
Class> clazz = Class.forName(javaClass); // RCE here
return clazz.newInstance();
}
# Crafted Parquet file with malicious schema (conceptual)
{
"schema": {
"type": "record",
"name": "exploit",
"fields": [],
"java_class": "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",
"avro.java.string": "[base64-encoded malicious bytecode]"
}
}
Gadget-Chain-Ausnutzung
Der Angreifer erstellt eine Parquet-Datei, in der die Avro-Schema-Metadaten auf eine Java-Gadget-Chain verweisen — eine Abfolge von Klasseninstanziierungen, die letztlich zu beliebiger Code-Ausführung führt. Commons Collections, Spring Framework und andere gängige Java-Bibliotheken liefern geeignete Gadget-Chains für diesen Angriff.
Wer ist exponiert
Jede Java-Anwendung, die:
- nutzt
parquet-avroVersion 1.15.0 oder früher - Parquet-Dateien aus externen oder potenziell nicht vertrauenswürdigen Quellen liest
- keine Validierung der Dateiquelle implementiert hat
Zu den Hochrisiko-Umgebungen gehören:
- Data Lakes: S3/GCS/ADLS-Buckets, die Partnerdaten einlesen
- Analytics-Plattformen: Self-Service-Datenupload-Funktionen
- ETL-Pipelines: Jede Pipeline, die aus externen Datenquellen liest
- Daten-Marktplätze: Plattformen, die Parquet-Datensätze verteilen
- ML-Trainings-Pipelines: Einlesen von Trainingsdaten aus externen Quellen
Mitigation
- parquet-java auf 1.15.1+ upgraden: Der Fix fügt eine Allowlist-Validierung für Klassennamen in Schema-Metadaten hinzu
- Parquet-Dateiquellen auditieren: Inventarisieren Sie alle Orte, an denen Parquet-Dateien in Ihre Umgebung gelangen
- Dateiquellen-Validierung implementieren: Verarbeiten Sie nur Parquet-Dateien aus kryptografisch verifizierten Quellen
- Daten-Pipelines mit minimalen Rechten betreiben: Begrenzen Sie den Blast-Radius, indem Pipeline-Ausführungsrollen Least-Privilege-IAM-Policies erhalten
- Netzwerk-Egress-Beschränkungen: Datenverarbeitungs-Cluster sollten eingeschränkten ausgehenden Internetzugang haben, um den Post-Exploitation-Impact zu begrenzen
- Java-Deserialisierungs-Schutz einsetzen: Tools wie SerialKiller bieten Defense-in-Depth gegen Deserialisierungs-Angriffe
KENSAI-Erkennungsfähigkeit
- Dependency-Scanning: Der SCA-Scanner von KENSAI identifiziert
parquet-avro-Versionen <= 1.15.0 in Java-Anwendungs-Abhängigkeiten und Maven/Gradle-Build-Dateien - Container-Image-Scanning: Erkennt verwundbare JAR-Dateien in Docker-Images und Kubernetes-Deployments
- Pipeline-Exposure-Assessment: Identifiziert Daten-Pipelines mit extern gerichteten Parquet-Ingestion-Endpoints
- Cloud-Asset-Inventar: Kartiert EMR-Cluster, Databricks-Workspaces und andere Datenverarbeitungs-Infrastruktur zur Versionsbewertung
Ist Ihre Daten-Pipeline für CVE-2025-30065 verwundbar?
KENSAI scannt Ihre Java-Anwendungen, Container-Images und Cloud-Daten-Infrastruktur auf verwundbare Parquet-Versionen. Schützen Sie Ihre Daten-Pipelines, bevor Angreifer sie ausnutzen.
Ihre Daten-Infrastruktur scannen →