Apache Spark shell command injection vulnerability via Spark UI
Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.
Apply updates per vendor instructions.
Resumen
Falha de injeção de comando (CWE-78) na Spark UI do Apache Spark que permite execução arbitrária de comandos shell como o usuário que roda o processo Spark. Só afeta instalações com spark.acls.enable=true — configuração que não é padrão —, mas onde essa ACL está habilitada, um usuário não autorizado pode se passar por outro (impersonation) e disparar a execução de comando com uma única requisição, sem interação do usuário legítimo. Está no catálogo KEV da CISA por exploração confirmada em ambiente real, com PoC pública, módulo Metasploit e template Nuclei disponíveis.
Detalle técnico
O componente afetado é o HttpSecurityFilter da Spark UI, usado quando spark.acls.enable está ativado para checar se um usuário autenticado tem permissão de visualizar ou modificar a aplicação Spark em execução. O filtro aceita um parâmetro controlado pelo cliente para impersonar um nome de usuário arbitrário antes de aplicar a checagem de ACL. Como a verificação de permissão roda sobre esse valor forjado — não sobre a identidade real autenticada pelo mecanismo de autenticação subjacente —, o atacante decide qual 'usuário' será checado.
O caminho de código que trata a checagem de permissão, mais adiante, usa o valor de usuário fornecido para montar um comando de shell Unix, que é então executado diretamente pelo processo Spark. Não há sanitização suficiente da entrada antes de ela compor o comando — é uma clássica injeção via construção de string de shell (CWE-78), agravada pelo fato de a etapa de autorização estar quebrada logo antes dela.
O relatório original (CVE-2022-33891) afirmava que a correção cobria a linha 3.1.x a partir da versão 3.1.3. Isso se revelou incorreto: a Apache publicou depois o CVE-2023-32007 reconhecendo que a versão 3.1.3 — e toda a faixa 3.1.1 até antes de 3.2.2 — ainda estava vulnerável ao mesmo mecanismo, porque o patch original não cobriu completamente o code path do HttpSecurityFilter nessa linha, que já estava fora de suporte (EOL) quando isso foi descoberto.
Cómo se explota
O vetor é a Spark UI exposta via HTTP/HTTPS, tipicamente nas portas usadas pelo Web UI do driver Spark (porta padrão 4040 e variações para master/worker/history server). O pré-requisito real — e o ponto mais importante que a manchete 'CVSS 8.8, sem interação de usuário' esconde — é que spark.acls.enable precisa estar habilitado. Em instalações padrão, sem ACL habilitada, esse code path específico de impersonation nem é alcançado; a superfície de exposição só existe em ambientes que ativaram controle de acesso na UI, geralmente multi-tenant ou compartilhados.
Com ACL habilitada e a UI acessível na rede, o atacante não precisa de credenciais válidas: ele explora a falha de impersonation para se apresentar como um usuário com privilégios suficientes para passar a checagem de permissão, e então aciona a rotina que constrói e executa o comando de shell. Não há interação de vítima, a complexidade de ataque é baixa e o resultado final é execução arbitrária de comando com os privilégios do processo Spark — que em muitos deployments roda com privilégios elevados dentro do cluster, dando ao atacante pé inicial para movimento lateral, exfiltração de dados de jobs em execução ou pivô dentro da infraestrutura de dados.
A presença no catálogo KEV da CISA confirma exploração ativa observada; a disponibilidade de PoC pública, módulo Metasploit e template Nuclei reduz a barreira técnica a quase zero para quem já tem acesso de rede à UI exposta.
Versiones
Cómo protegerse
A correção original recomendava atualizar para Spark 3.1.3, 3.2.2 ou 3.3.0, dependendo da linha em uso. Essa recomendação está parcialmente invalidada: o próprio projeto Apache, ao publicar CVE-2023-32007, admitiu que a versão 3.1.3 continuava vulnerável ao mesmo mecanismo, e que toda a linha 3.1.x está fora de suporte (EOL). Quem está em qualquer versão 3.1.x — inclusive 3.1.3 — não está protegido apenas por ter aplicado o patch de 2022; a orientação atual do fornecedor é migrar para uma versão suportada, citando Spark 3.4.0 como referência de linha atualmente mantida. Para quem está na linha 3.2.x, a versão mínima real é 3.2.2 ou superior.
Se a atualização não for viável de imediato, o paliativo real é desabilitar spark.acls.enable (removendo a superfície exposta ao code path vulnerável) ou, quando ACLs forem necessárias por política, restringir o acesso de rede à Spark UI a uma lista estrita de origens confiáveis (firewall, segmentação de rede, proxy de autenticação forte na frente da UI) — isso não corrige a falha, mas reduz drasticamente quem pode alcançá-la. Não depender de autenticação básica do proxy como controle único: a falha está na lógica de impersonation pós-autenticação, então qualquer autenticação fraca ou compartilhada na frente não neutraliza o problema.
O mito a evitar: acreditar que estar em uma versão citada como 'corrigida' pela CVE-2022-33891 original (em especial 3.1.3) resolve o problema — o próprio caso CVE-2023-32007 mostra que isso é falso para a linha 3.1.x. A CISA fixou prazo de correção em 28/03/2023 para entidades sob sua diretriz (BOD 22-01), com a entrada adicionada ao KEV em 07/03/2023, o que reforça a prioridade de tratamento imediato onde a UI com ACL habilitada estiver exposta.
Cómo detectar
Como o vetor passa por parâmetros HTTP na requisição à Spark UI que forjam identidade de usuário, o sinal a procurar em logs de acesso da UI (porta padrão 4040 e portas equivalentes de master/worker/history server) são requisições com parâmetros de impersonation de usuário anômalos, vindos de origens não esperadas, seguidas de comportamento de processo Spark executando shell (fork de /bin/sh, sh -c, ou processos filhos inesperados do JVM do Spark) registrado em auditoria de sistema (auditd, EDR). Não há assinatura de payload única confiável, porque o comando final depende do que o atacante injeta; o indicador mais forte é a combinação de acesso à Spark UI com ACL habilitada partindo de IP externo/não administrativo seguida de execução de processo shell filho do driver/worker Spark — presença de módulo Metasploit e template Nuclei também facilita a geração de tráfego de teste/scan que pode aparecer em logs como tentativas repetidas de acesso à UI antes da exploração efetiva.