1001Ferramentas
🔄 Validadores

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