CVE-2025-30065: Apache Parquet Schema-deserialisatie RCE
Kort samengevat: Een remote code execution-kwetsbaarheid met maximale ernst in de Java-bibliotheek van Apache Parquet stelt aanvallers in staat willekeurige code uit te voeren op elk systeem dat een kwaadaardig geprepareerd Parquet-bestand leest. CVSS 10.0. Treft vrijwel elke big data-pijplijn die het Parquet-formaat gebruikt — Spark, Flink, Hive en cloud data warehouses.
| Kenmerk | Waarde |
|---|---|
| CVE ID | CVE-2025-30065 |
| CVSS-vector | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-502: Deserialization of Untrusted Data |
| Gepubliceerd | 1 april 2025 |
| Exploitatie | Geen actieve exploitatie gemeld (publieke PoC bestaat) |
CVSS 10.0 — KRITIEK (MAX)
Wat is CVE-2025-30065?
Apache Parquet is een kolomgeoriënteerd opslagformaat dat veel wordt gebruikt in big data-ecosystemen. De module parquet-avro in versies tot en met 1.15.0 bevat een deserialisatiekwetsbaarheid in de schema-parsingcode. Wanneer een Java-applicatie een Parquet-bestand leest met een geprepareerd Avro-schema, deserialiseert de parser door de aanvaller gecontroleerde klasseverwijzingen, wat leidt tot willekeurige code-uitvoering binnen de context van de lezende applicatie.
Dit is bijzonder gevaarlijk omdat datapijplijnen routinematig Parquet-bestanden uit externe bronnen inlezen: S3-buckets, datapartners, gebruikersuploads, ETL-integraties. Elke pijplijn die niet-vertrouwde Parquet-bestanden verwerkt, is kwetsbaar.
CVE-2025-30065 creëert een aantrekkelijk supply chain-aanvalsscenario: een aanvaller die kwaadaardige Parquet-bestanden in een datapijplijn kan injecteren (via een gecompromitteerde dataleverancier, een verkeerd geconfigureerde S3-bucket, of een man-in-the-middle-aanval) verkrijgt code-uitvoering in de dataverwerkingsinfrastructuur — mogelijk AWS EMR, Databricks, Azure HDInsight, of on-premises Hadoop-clusters die draaien met geprivilegieerde cloudcredentials.
Getroffen systemen
| Component | Getroffen versies | Gerepareerde versie |
|---|---|---|
| parquet-avro (Java) | <= 1.15.0 | 1.15.1+ |
| Apache Spark (gebruikt parquet-avro) | Elke versie met getroffen bibliotheek | Bibliotheek bijwerken |
| Apache Flink | Elke versie met getroffen bibliotheek | Bibliotheek bijwerken |
| Apache Hive | Elke versie met getroffen bibliotheek | Bibliotheek bijwerken |
| Amazon EMR | Versies met parquet-avro <= 1.15.0 | EMR upgraden of JAR overschrijven |
| Databricks Runtime | Versies met getroffen bibliotheek | Databricks-patch voor DBR-versies |
Technische details
De kwetsbaarheid bevindt zich in de klasse AvroSchemaConverter binnen parquet-avro. Bij het converteren van Parquet-schema naar Avro-schema verwerkt de code schemametadata die willekeurige klassenamen kan bevatten. Deze klassenamen worden gebruikt bij reflectieve instantiatie zonder allowlist-validatie.
# 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]"
}
}
Exploitatie via gadget chains
De aanvaller maakt een Parquet-bestand waarin de Avro-schemametadata verwijst naar een Java gadget chain — een reeks klasse-instantiaties die uiteindelijk leidt tot willekeurige code-uitvoering. Commons Collections, Spring Framework en andere veelgebruikte Java-bibliotheken leveren geschikte gadget chains voor deze aanval.
Wie is blootgesteld
Elke Java-applicatie die:
parquet-avroversie 1.15.0 of eerder gebruikt- Parquet-bestanden leest uit externe of mogelijk niet-vertrouwde bronnen
- Geen validatie van bestandsbronnen heeft geïmplementeerd
Omgevingen met hoog risico zijn onder andere:
- Data lakes: S3/GCS/ADLS-buckets die partnerdata inladen
- Analyseplatforms: self-service functies voor data-upload
- ETL-pijplijnen: elke pijplijn die leest vanuit externe databronnen
- Datamarktplaatsen: platforms die Parquet-datasets distribueren
- ML-trainingspijplijnen: inname van trainingsdata uit externe bronnen
Mitigatie
- Upgrade parquet-java naar 1.15.1+: de fix voegt allowlist-validatie toe voor klassenamen in schemametadata
- Audit Parquet-bestandsbronnen: inventariseer alle plekken waar Parquet-bestanden uw omgeving binnenkomen
- Implementeer validatie van bestandsbronnen: verwerk alleen Parquet-bestanden uit cryptografisch geverifieerde bronnen
- Draai datapijplijnen met minimale rechten: beperk de impact door pijplijn-uitvoeringsrollen least-privilege IAM-beleid te geven
- Netwerk-egressbeperkingen: dataverwerkingsclusters moeten beperkte uitgaande internettoegang hebben om post-exploitatie-impact te beperken
- Implementeer beschermingen tegen Java-deserialisatie: tools zoals SerialKiller bieden extra verdedigingslagen tegen deserialisatie-aanvallen
KENSAI-detectiemogelijkheden
- Dependency-scanning: de SCA-scanner van KENSAI identificeert
parquet-avro-versies <= 1.15.0 in Java-applicatie-dependencies en Maven/Gradle-buildbestanden - Containerimage-scanning: detecteert kwetsbare JAR-bestanden in Docker-images en Kubernetes-implementaties
- Beoordeling van pijplijnblootstelling: identificeert datapijplijnen met naar buiten gerichte Parquet-inname-endpoints
- Cloud asset-inventarisatie: brengt EMR-clusters, Databricks-workspaces en andere dataverwerkingsinfrastructuur in kaart voor versiebeoordeling
KENSAI scant uw Java-applicaties, containerimages en cloud-datainfrastructuur op kwetsbare Parquet-versies. Bescherm uw datapijplijnen voordat aanvallers ze exploiteren.
Scan uw datainfrastructuur