CVE-2025-30065: RCE por desserialização de esquema no Apache Parquet
Uma vulnerabilidade de execução remota de código de gravidade máxima na biblioteca Java do Apache Parquet permite que invasores executem código arbitrário em qualquer sistema que leia um arquivo Parquet especialmente criado. CVSS 10.0. Afeta praticamente todos os pipelines de big data que usam o formato Parquet — Spark, Flink, Hive e data warehouses em nuvem.
| Atributo | Valor |
|---|---|
| ID do CVE | CVE-2025-30065 |
| Vetor CVSS | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-502: desserialização de dados não confiáveis |
| Publicado | 1º de abril de 2025 |
| Exploração | Nenhuma exploração ativa relatada (existe PoC público) |
O que é CVE-2025-30065?
Apache Parquet é um formato de armazenamento colunar amplamente utilizado em ecossistemas de big data. O parquet-avro O módulo em versões até 1.15.0 contém uma vulnerabilidade de desserialização no código de análise de esquema. Quando um aplicativo Java lê um arquivo Parquet contendo um esquema Avro criado, o analisador desserializa as referências de classe controladas pelo invasor, levando à execução arbitrária de código no contexto do aplicativo de leitura.
Isso é particularmente perigoso porque os pipelines de dados ingerem rotineiramente arquivos Parquet de fontes externas: buckets S3, parceiros de dados, uploads de usuários, integrações ETL. Qualquer pipeline que processe arquivos Parquet não confiáveis é vulnerável.
⚠ Vetor de ataque à cadeia de suprimentos
CVE-2025-30065 cria um cenário atraente de ataque à cadeia de suprimentos: um invasor que pode injetar arquivos Parquet maliciosos em um pipeline de dados (por meio de fornecedor de dados comprometido, configuração incorreta do bucket S3 ou ataque man-in-the-middle) obtém execução de código na infraestrutura de processamento de dados – potencialmente AWS EMR, Databricks, Azure HDInsight ou clusters Hadoop locais executados com credenciais de nuvem privilegiadas.
Sistemas afetados
| Componente | Versões afetadas | Versão corrigida |
|---|---|---|
| parquet-avro (Java) | <= 1.15.0 | 1.15.1+ |
| Apache Spark (usa parquet-avro) | Qualquer versão que use a biblioteca afetada | Atualizar biblioteca |
| Apache Flink | Qualquer versão que use a biblioteca afetada | Atualizar biblioteca |
| Apache Hive | Qualquer versão que use a biblioteca afetada | Atualizar biblioteca |
| Amazon EMR | Versões usando parquet-avro <= 1.15.0 | Atualize o EMR ou substitua o JAR |
| Tempo de execução do Databricks | Versões que usam a biblioteca afetada | Versões DBR corrigidas pelo Databricks |
Detalhes técnicos
A vulnerabilidade está no AvroSchemaConverter classe dentro parquet-avro. Ao converter o esquema Parquet em esquema Avro, o código processa metadados do esquema que podem conter nomes de classe arbitrários. Esses nomes de classe são usados na instanciação reflexiva sem validação de lista de permissões.
# 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]"
}
}
Exploração da cadeia de gadgets
O invasor cria um arquivo Parquet onde os metadados do esquema Avro fazem referência a uma cadeia de gadgets Java – uma sequência de instanciações de classe que, em última análise, leva à execução arbitrária de código. Commons Collections, Spring Framework e outras bibliotecas Java comuns fornecem cadeias de gadgets adequadas para esse ataque.
Quem está exposto
Qualquer aplicativo Java que:
- Usos
parquet-avroversão 1.15.0 ou anterior - Lê arquivos Parquet de fontes externas ou potencialmente não confiáveis
- Não implementou a validação da origem do arquivo
Ambientes de alto risco incluem:
- Lagos de dados: Buckets S3/GCS/ADLS ingerindo dados de parceiros
- Plataformas analíticas: Recursos de upload de dados de autoatendimento
- Pipelines ETL: Qualquer leitura de pipeline de fontes de dados externas
- Mercados de dados: Plataformas que distribuem conjuntos de dados Parquet
- Pipelines de treinamento de ML: Ingestão de dados de treinamento de fontes externas
Mitigação
- Atualize parquet-java para 1.15.1+: A correção adiciona validação de lista de permissões para nomes de classes em metadados de esquema
- Audite as fontes de arquivos Parquet: Faça um inventário de todos os locais onde os arquivos Parquet entram em seu ambiente
- Implemente a validação da origem do arquivo: Processe apenas arquivos Parquet de fontes verificadas criptograficamente
- Execute pipelines de dados com privilégios mínimos: Limite o impacto garantindo que as funções de execução do pipeline tenham políticas IAM de privilégio mínimo
- Restrições de saída de rede: Os clusters de processamento de dados deveriam ter acesso restrito à Internet de saída para limitar o impacto pós-exploração
- Implante proteções de desserialização Java: Ferramentas como o SerialKiller podem fornecer defesa em profundidade contra ataques de desserialização
Capacidade de detecção KENSAI
- Verificação de dependência: O scanner SCA do KENSAI identifica
parquet-avroversões <= 1.15.0 em dependências de aplicativos Java e arquivos de construção Maven/Gradle - Varredura de imagens de contêiner: Detecta arquivos JAR vulneráveis em imagens Docker e implantações Kubernetes
- Avaliação da exposição dos pipelines: Identifica pipelines de dados com endpoints de ingestão do Parquet externos
- Inventário de ativos em nuvem: Mapeia clusters EMR, espaços de trabalho do Databricks e outras infraestruturas de processamento de dados para avaliação de versão
Seu pipeline de dados é vulnerável a CVE-2025-30065?
KENSAI verifica seus aplicativos Java, imagens de contêiner e infraestrutura de dados em nuvem em busca de versões vulneráveis do Parquet. Proteja seus pipelines de dados antes que invasores os explorem.
Analise sua infraestrutura de dados →