O Bun reescrito por agentes, e a ferramenta virando alvo

Neri Filho

A semana teve dois fios, e eles se encontram no meio.

O primeiro é que a ferramenta de quem constrói virou alvo. O GitLab levou correção fora do calendário para uma falha que deixa atacante sem autenticação apagar projeto, o Ray entrou no catálogo de exploração ativa da CISA por um furo que dispara pelo navegador de quem abre o dashboard, e o Next.js avisou com seis dias de antecedência que tem uma falha crítica para publicar. Nenhum desses três é servidor de produção. São o repositório, o orquestrador de job e o framework: as coisas que a gente instala e esquece porque são "infraestrutura interna".

O segundo é que a IA parou de ser assunto de release e virou método de trabalho. O Bun 1.4 saiu com o runtime inteiro portado de Zig para Rust por dezenas de agentes rodando em paralelo por onze dias, e a Z.AI publicou um modelo que ela mesma decidiu não abrir os pesos ainda, porque ele achou vulnerabilidade demais em software de verdade durante a avaliação. É o mesmo fato visto de dois lados: modelo que escreve código de sistema é modelo que encontra falha em código de sistema. Oito itens. Três desenvolvidos, e o do Next.js tem data marcada.

Destaques

O Bun foi reescrito em Rust por 64 agentes, e a conta está publicada

Em 20 de agosto saiu o Bun 1.4, a primeira versão com o runtime escrito em Rust. Vem junto uma lista grande de API embutida: Bun.Image para processar imagem, Bun.WebView para automação de navegador sem cabeça, Bun.markdown, Bun.cron(), Bun.Terminal, JSON5 e JSONL, bun run --parallel, bun test --parallel, bun audit fix e bun dedupe. Os números que eles publicam: uso de CPU ocioso 5 vezes menor, memória de servidor HTTP de 13% a 48% menor, inicialização 2 vezes mais rápida no Linux e 2,5 no Windows, binário até 17% menor, mais 1.517 testes do Node passando.

O que me interessa não é a lista, é como o porte foi feito. São 535.496 linhas de Zig, portadas arquivo por arquivo em 6.502 commits ao longo de onze dias, com até 64 instâncias do Claude Code rodando ao mesmo tempo em quatro worktrees separados, a cerca de 1.300 linhas por minuto no pico, e um custo de API perto de 165 mil dólares. Não foi um prompt gigante: teve guia de porte escrito antes, tabela de mapeamento de lifetime, três arquivos de teste como piloto, e uma segunda leva de agentes cuja única tarefa era assumir que o código estava errado e listar por que. O post nomeia três bugs pegos assim antes do merge.

O que muda na prática são duas coisas, e nenhuma delas é "use IA para reescrever seu sistema". A primeira é que o que tornou isso possível não foi o modelo, foi a suíte de teste. O Bun tinha um conjunto de testes independente de linguagem, com um milhão de asserções, que continuava valendo depois de trocar Zig por Rust. Sem isso o exercício inteiro é impossível, porque não existe forma de saber se o porte manteve o comportamento. Se você olhou para essa notícia e pensou no seu monólito de dez anos, a pergunta anterior é se você tem esse tipo de teste, e a resposta quase sempre é não. É aí que o trabalho começa, não no agente.

A segunda é o que sobra depois. A crítica que apareceu na discussão no Lobsters não é sobre o resultado ter funcionado, é sobre quem consegue ler meio milhão de linhas geradas assim quando der problema às três da manhã. Vale registrar que o próprio anúncio é honesto sobre limite: o Bun ainda não é 100% compatível com Node, o HTTP/3 é experimental e eles escrevem, com todas as letras, para não mandar http3: true para produção. Eu adotaria a versão como se fosse major, com canary em serviço não crítico primeiro, e não porque foi IA que escreveu: porque é uma troca de linguagem no runtime inteiro.

GitLab self-managed: correção fora de hora, exploração em dias

Em 17 de agosto o GitLab publicou 19.2.4, 19.1.6, 19.0.8 e 18.11.11 fora do calendário normal de patch. A CVE-2026-19478 tem CVSS 9,4 e é injeção de código por uma diretiva de GraphQL: remota, baixa complexidade, sem privilégio nenhum e sem interação de usuário. O que ela permite é modificar ou apagar projeto público e dado de usuário. Na mesma leva veio a CVE-2026-19650, CVSS 7,1, um CSRF no tratamento de consulta multiplexada de GraphQL. A faixa afetada é ampla: da 18.2 até antes da 18.11.11, e cada linha 19.x antes da sua correção.

Dias depois a falha apareceu sendo explorada. Esse intervalo entre publicar a correção e ver o exploit rodando encolheu de semanas para dias faz tempo, e a lição prática é que "vou aplicar na janela do mês que vem" deixou de ser uma decisão defensável para esse tipo de nota.

O que muda na prática depende de onde seu GitLab roda. GitLab.com e GitLab Dedicated já estavam corrigidos e não pedem ação nenhuma. Quem tem self-managed carrega o problema inteiro, e é justamente o grupo com mais chance de ter uma instância que ninguém atualiza há meses porque "está atrás do VPN". Diretiva de GraphQL não autenticada não liga para a sua topologia de rede se qualquer coisa alcança a instância. Eu trataria como item de hoje, e aproveitaria para responder uma pergunta que muita empresa não sabe responder: quem é o dono da atualização dessa máquina.

O Next.js marcou dia para uma falha crítica, e isso é a parte boa

Em 20 de agosto a equipe do Next.js publicou um aviso de release de segurança: no dia 26 de agosto saem a 16.3.3 e a 15.5.24, corrigindo uma falha de severidade crítica. O aviso não descreve a falha, e não deveria mesmo. Ele existe para dar tempo de organizar o caminho até o deploy antes de o detalhe virar público.

Isso faz parte do programa de segurança que eles anunciaram em julho, e é o tipo de mudança de processo que eu gosto de ver. O padrão antigo era a correção e o advisory saírem juntos, com o relógio do atacante e o do defensor começando no mesmo instante. Com aviso prévio, quem opera ganha alguns dias de vantagem, desde que use.

O que muda na prática é o que você faz até quarta. Descubra em que versão suas aplicações estão de verdade, não a que está no package.json do repositório principal: conte também o painel interno que ninguém toca desde o ano passado. Se o caminho de deploy tem etapa manual, um teste de fumaça travado ou uma aprovação que demora, esse é o momento de destravar, com o dia da correção ainda no futuro. Publicar uma correção crítica é fácil quando o pipeline já foi exercitado na véspera.

Em nota

  • Uma falha de 2025 no Ray entrou no catálogo de exploração ativa. A CVE-2025-62593, CVSS 9,4, corrigida na versão 2.52.0, permite execução remota de código a partir do navegador por rebind de DNS, aproveitando endpoints como /api/jobs sem autenticação. A CISA colocou no KEV em 18 de agosto, com prazo federal para o dia 20. Já tem botnet usando: o RondoDox incorporou em dois dias e o ShadowRay 2.0 mira cluster com GPU NVIDIA para minerar. Se você tem Ray em qualquer lugar, inclusive numa máquina de experimento, confira a versão e quem alcança o dashboard. Rebind de DNS ignora "está só na rede interna".
  • Rust 1.98 trouxe operação algébrica de ponto flutuante. A versão saiu em 20 de agosto com algebraic_add, algebraic_sub, algebraic_mul, algebraic_div e algebraic_rem em f32 e f64. Elas liberam o compilador a reordenar a conta usando propriedade algébrica de número real, que é o que permite vetorizar laço, no espírito do -ffast-math. O resultado vira não determinístico, mas a documentação é explícita em que não há comportamento indefinido. Também entraram format_into com NumBuffer para formatar inteiro sem passar pelo caminho do write!, substr_range e Atomic::from_mut.
  • O text-box-trim virou Baseline. O Firefox 154, de 18 de agosto, ligou text-box-trim e text-box-edge por padrão. Como Chrome e Edge têm desde a 133 e o Safari desde a 18.2, a propriedade passou a Baseline newly available neste mês. É o fim do padding vertical chutado em botão e em card, porque agora dá para cortar o meio entrelinha que a fonte injeta acima e abaixo do texto. Na mesma versão vieram sibling-index() e sibling-count() no CSS, line-clamp sem prefixo e Iterator.prototype.chunks() e windows().
  • A OpenAI cortou preço do GPT-5.6 Sol e passou a aceitar região por requisição. O changelog de 21 de agosto traz o modelo a 4 dólares por milhão de token de entrada e 20 por milhão de saída, queda de 20% e 33%, em preço promocional até 21 de novembro de 2026. Marque a data: preço promocional que ninguém anota vira surpresa na fatura. No mesmo dia entrou processamento regional escolhido por requisição, com domínio prefixado, para projeto em geografia Global. Isso é o tipo de coisa que decide se um cliente com restrição de dado aceita ou não o projeto, e antes exigia separar conta.
  • A Z.AI segurou os pesos do GLM-5.3 por causa de capacidade ofensiva. A nota de release é de 18 de agosto e fala em ganho de 50% em código sobre o GLM-5.2, com o detalhe de que o modelo base é o mesmo: o ganho veio só de escalar pós-treino. O que muda o padrão é a decisão sobre os pesos. Como o Nathan Lambert registrou, a linhagem vinha publicando peso aberto no lançamento, e desta vez a publicação ficou para cerca de duas semanas depois, esperando avaliação de segurança, por causa da melhora em descoberta de vulnerabilidade e análise de exploit. Vale acompanhar se isso vira norma na faixa aberta, porque muda o cálculo de quem planeja produto em cima de peso aberto com data.

O que eu faria com isso esta semana

  1. Atualizar GitLab self-managed hoje, antes de qualquer outro item da lista. A correção é de 17 de agosto, a exploração apareceu em dias e a falha não pede autenticação. Se a instância está atrás de VPN, ótimo, atualize mesmo assim.
  2. Usar os dias até 26 de agosto para exercitar o caminho de deploy do Next.js. Levante em que versão cada aplicação está de verdade, incluindo as esquecidas, e garanta que sai um deploy no mesmo dia em que a 16.3.3 e a 15.5.24 forem publicadas.
  3. Procurar dashboard de Ray exposto, mesmo em rede interna. Rebind de DNS transforma o navegador de quem trabalha na sua rede em ponte para dentro. A versão precisa ser 2.52.0 ou maior, e o dashboard não deveria estar acessível a partir de um navegador comum.
  4. Se a história do Bun te animou a portar alguma coisa com agente, começar pela suíte de teste. O que segurou aquele porte não foi o modelo, foi um milhão de asserções que continuavam válidas depois da troca de linguagem, mais uma leva de revisores instruídos a procurar defeito. Sem as duas peças, o que você vai ter é código novo sem forma de saber se ele faz o que o antigo fazia.

Radar é a newsletter semanal deste blog: o que aconteceu na semana em tecnologia, com comentário sobre o que muda para quem constrói e opera software.

Tem um desses rodando — ou pra construir?

Me conte em duas linhas. Respondo em até 24h dizendo se é o tipo de coisa que eu faço bem — e se não for, digo isso também.

Outros textos