As vulnerabilidades de desserialização YAML representam uma classe crítica de falhas de segurança em aplicações que analisam arquivos de configuração YAML. Quando aplicações usam funções inseguras de carregamento YAML - particularmente yaml.load() do Python sem especificar um loader seguro - os atacantes podem incorporar código executável em documentos YAML que roda durante o processo de análise. Esta vulnerabilidade é cada vez mais relevante à medida que as organizações adotam práticas de configuração como código e o YAML se torna o formato dominante para configuração de aplicações, definições de infraestrutura e pipelines CI/CD.
YAML (YAML Ain't Markup Language) é um formato de serialização de dados legível por humanos amplamente usado em ferramentas DevOps como Kubernetes, Docker Compose, Ansible e GitHub Actions. A especificação YAML inclui um recurso poderoso mas perigoso: a capacidade de representar objetos arbitrários de linguagens de programação usando tags de tipo. Na biblioteca PyYAML do Python, a função yaml.load() com o Loader padrão pode instanciar qualquer objeto Python, incluindo aqueles que executam comandos durante a construção.
Um payload YAML malicioso pode usar construtores de tipo específicos do Python para executar comandos arbitrários quando o arquivo YAML é analisado. Isso significa que qualquer aplicação que aceite entrada YAML de fontes não confiáveis - portais de upload de configuração, endpoints de API, sistemas CI/CD ou processadores de arquivos - pode ser explorada para execução remota de código se usar desserialização insegura.
Vulnerabilidades de desserialização YAML afetaram grandes plataformas e ferramentas. Incidentes notáveis incluem vulnerabilidades no Ruby on Rails (CVE-2013-0156), SnakeYAML para Java, e numerosas aplicações Python usando PyYAML. O impacto é particularmente severo em ambientes DevOps onde arquivos YAML frequentemente rodam com privilégios elevados para gerenciamento de infraestrutura. Um arquivo de configuração comprometido pode levar à tomada de controle completa da infraestrutura.
A correção para aplicações Python é simples: sempre usar yaml.safe_load() em vez de yaml.load(). O loader seguro só permite tipos YAML básicos (strings, números, listas, dicionários) e recusa construir objetos Python arbitrários. Para aplicações que precisam de suporte a tipos personalizados, usar yaml.load com um SafeLoader explicitamente configurado e construtores registrados fornece uma alternativa controlada. Revisão de código e análise estática devem sinalizar qualquer uso de funções inseguras de carregamento YAML.
Escolha como deseja começar
Entre na sua conta