Pular para o conteúdo

Incidente · Pleno

Cloudflare: uma regex esgota a CPU

Uma regra de WAF com backtracking chegou a toda a rede de uma vez. O que faltou no rollout.

11 min de leitura · Incidente em 2019-07-02, durou ~30 min · Fonte: Cloudflare · Conteúdo revisado em 23 de outubro de 2026

Resposta curta

Uma regra de WAF com backtracking chegou a toda a rede de uma vez. O que faltou no rollout. No post-mortem oficial, a Cloudflare conta que implantou uma regra nova nas Managed Rules do WAF, o firewall de aplicações web que inspeciona requisições HTTP.

01 · CONTEXTO

Uma regra nova no WAF, enviada ao mundo todo

No post-mortem oficial, a Cloudflare conta que implantou uma regra nova nas Managed Rules do WAF, o firewall de aplicações web que inspeciona requisições HTTP. A regra continha uma expressão regular que fez o processamento retroceder enormemente e esgotou a CPU usada para servir HTTP e HTTPS. O efeito foi a CPU dos servidores da rede chegar perto do limite em todo lugar, e os clientes (e os clientes deles) viram uma página de erro 502 ao visitar qualquer domínio da empresa.

  1. Em operação normal, cada requisição chega a um servidor de borda e passa pelo WAF antes de seguir adiante.

    Diagrama da arquitetura: Requisição na borda com WAF
    CLVisitantes
    EDGServidor de borda
    NWWAF
  2. Com a regra nova, o WAF passa a consumir CPU demais em cada servidor de borda, e as requisições terminam em erro.

    Diagrama da arquitetura: Requisição na borda com WAF
    CLVisitantes
    EDGServidor de bordaerro ao cliente
    NWWAFCPU esgotada

02 · A REGEX

Backtracking: quando casar texto custa tempo demais

O post descreve a causa como uma expressão regular mal escrita, que criou retrocesso excessivo (backtracking). A parte crítica citada é um trecho em que se combina, de forma gulosa, zero ou mais caracteres seguidos de outro zero ou mais caracteres e de um sinal de igual. Gulosa significa casar o máximo possível. Esse é um exemplo clássico de antipadrão de desempenho: o custo de uma operação aparentemente simples depende do formato da entrada.

  1. Cada requisição é comparada com as regras, incluindo a expressão regular nova.

    Diagrama da arquitetura: Avaliação da regex no servidor
    CLRequisição
    CPMotor de regex
    CPCPU do servidor
  2. O motor de regex tenta muitas combinações antes de decidir, e o trabalho recai sobre a CPU do servidor.

    Diagrama da arquitetura: Avaliação da regex no servidor
    CLRequisição
    CPMotor de regexretrocesso
    CPCPU do servidor
  3. A CPU fica saturada e não sobra capacidade para atender o tráfego legítimo.

    Diagrama da arquitetura: Avaliação da regex no servidor
    CLRequisição
    CPMotor de regex
    CPCPU do servidorsaturada

03 · PUBLICAÇÃO

Um caminho de mudança que pulava o rollout em etapas

A regex ruim só virou incidente global por causa de como foi publicada. O procedimento padrão para mudança de regra permitia, segundo o post, que ela fosse enviada globalmente, e deixou uma mudança não emergencial entrar em produção no mundo todo sem rollout em etapas. O WAF não usa o processo em etapas por projeto, devido à necessidade de responder rapidamente a ameaças. Além disso, o conjunto de testes não tinha como identificar consumo excessivo de CPU, e a regra passou por ele sem sinal de problema. Faltou aqui uma prática de padrões de disponibilidade muito comum: limitar o raio de impacto de uma mudança antes de ela alcançar toda a frota.

AspectoSoftware comum da empresaRegras do WAF
PublicaçãoEm etapas, conforme o postGlobal e imediata, pelo procedimento da época
MotivaçãoLimitar o impacto de defeitosResponder rapidamente a ameaças
  1. O engenheiro publica a regra e o mecanismo de distribuição a envia a toda a frota de servidores de uma vez.

    Diagrama da arquitetura: Publicação global de regras
    CLEngenheiro
    QDistribuição de regrasglobal
    EDGFrota de borda
  2. Sem etapa intermediária para observar o efeito, todos os servidores recebem a regra ao mesmo tempo.

    Diagrama da arquitetura: Publicação global de regras
    CLEngenheiro
    QDistribuição de regras
    EDGFrota de bordatoda a frota

04 · RECUPERAÇÃO

Desligar o componente em vez de consertá-lo

Segundo o post, a mudança foi feita às 13:42, e o primeiro alerta do PagerDuty indicando falha no WAF saiu três minutos depois. Nos primeiros momentos houve especulação de um ataque de um tipo nunca visto, o que mostra como um sintoma de CPU saturada pode ser confundido com agressão externa. A saída foi um mecanismo já existente para desativar um único componente no mundo todo: um membro da equipe executou o desligamento global do WAF às 14:07, e às 14:09 tráfego e CPU estavam normais em toda parte. A empresa resume o episódio como 27 minutos fora do ar. Esse tipo de interruptor de emergência é uma forma de monitoramento e observabilidade levada à ação: o alerta aponta o componente suspeito, e o desligamento limita o dano.

  1. O alerta aponta falha no WAF e a equipe começa a investigar, considerando inclusive um ataque.

    Diagrama da arquitetura: Detecção e desligamento global
    NWAlertaalerta
    CLEquipe de plantão
    NWInterruptor do WAF
    EDGFrota de borda
  2. A equipe aciona o interruptor global que desativa o WAF em toda a rede.

    Diagrama da arquitetura: Detecção e desligamento global
    NWAlerta
    CLEquipe de plantão
    NWInterruptor do WAFWAF desligado
    EDGFrota de borda
  3. Sem o WAF consumindo CPU, a frota volta ao comportamento esperado.

    Diagrama da arquitetura: Detecção e desligamento global
    NWAlerta
    CLEquipe de plantão
    NWInterruptor do WAF
    EDGFrota de bordanormalizada

05 · LIÇÕES

O que levar para o seu projeto

Entre as ações de remediação listadas no post estão reintroduzir a proteção contra uso excessivo de CPU que havia sido removida, incluir perfilamento de desempenho de todas as regras na suíte de testes e mudar o procedimento para que as regras passem por rollout em etapas, como o restante do software da empresa. Pelo ângulo de engenharia do caos, vale perguntar que falhas do seu próprio caminho de publicação você já ensaiou.

Perguntas frequentes

O que é Cloudflare: uma regex esgota a CPU?

Uma regra de WAF com backtracking chegou a toda a rede de uma vez. O que faltou no rollout.

O que o design de Cloudflare: uma regex esgota a CPU cobre?

Ele está organizado nestas seções: Uma regra nova no WAF, enviada ao mundo todo, Backtracking: quando casar texto custa tempo demais, Um caminho de mudança que pulava o rollout em etapas, Desligar o componente em vez de consertá-lo e O que levar para o seu projeto.

Quanto tempo leva Cloudflare: uma regex esgota a CPU e qual é o nível?

Leva cerca de 11 minutos para ler e tem nível Pleno.

Agora projete você mesmo

Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.