Validador YAML Anchor Circular
Detecta anchors com referência circular (loop) em documentos YAML, comum em configurações Helm/Kubernetes complexas.
Âncoras, aliases e referências circulares em YAML
O YAML permite reutilizar dados sem repeti-los. Uma âncora &name rotula um nó, um alias *name o referencia, e a chave de merge << incorpora um mapeamento ancorado em outro. Esses recursos são poderosos, mas também abrem a porta para referências circulares — um alias que, no fim das contas, resolve de volta na própria âncora — que podem travar ou paralisar um parser ingênuo.
Como âncoras e aliases funcionam
&anchor— define uma âncora no valor que vem em seguida.*anchor— um alias que insere uma cópia do nó ancorado.<<: *anchor— a chave de merge, que mescla as chaves de um mapeamento ancorado no atual.
Uma referência circular acontece quando um nó ancorado contém um alias que aponta de volta para ele mesmo, direta ou indiretamente por uma cadeia.
O ataque "Billion Laughs"
O abuso clássico é a negação de serviço Billion Laughs / bomba YAML: cada âncora referencia a anterior várias vezes, então um documento minúsculo se expande exponencialmente e esgota memória ou CPU. Uma referência verdadeiramente circular é ainda pior, produzindo uma estrutura infinita. Parsers seguros detectam ciclos e limitam a expansão, rejeitando entradas assim.
Pegadinhas comuns
- Carregar YAML não confiável com um loader completo em vez de
yaml.safe_load. - Supor que aliases são sempre inofensivos — aliases aninhados podem explodir exponencialmente.
- Construir uma estrutura autorreferente por acidente (um alias dentro do próprio nó que ele aponta).
- Depender de um parser que não limita a expansão de aliases ao lidar com entrada externa.
- Confundir a chave de merge
<<com uma chave normal chamada<<.
FAQ
Âncoras e aliases são perigosos por si só? Não inerentemente — são úteis para configurações DRY. O perigo é a expansão descontrolada ou os ciclos ao parsear entrada não confiável.
Como faço parse de YAML com segurança? Use um loader seguro (ex.: yaml.safe_load no PyYAML); muitos parsers também permitem desativar aliasing arbitrário ou limitar a expansão por completo.
Um parser YAML estrito rejeita uma referência circular? Sim — parsers bem comportados detectam o ciclo e levantam um erro em vez de entrar em loop infinito.
Ferramentas Relacionadas
Validador de CPF
Valide CPFs instantaneamente pelo algoritmo oficial da Receita Federal, sem enviar dados para nenhum servidor. Gratuito e sem cadastro.
Validador de CPF em Lote
Valida uma lista de CPFs (um por linha) e mostra quais são válidos e quais são inválidos. Sem envio para servidores.
Validador de CNPJ em Lote
Valida uma lista de CNPJs (um por linha) e mostra resumo: válidos, inválidos e total. Sem envio para servidores.