Ir para o conteúdo principal
ArchPrompts
Voltar ao blog
Caderno técnico / Nota de campo

Radar Tech: a cadeia de exploração que foi de uma imagem HEIC ao repositório interno em menos de 72 horas

Um decodificador de mídia sem backport, um SSO mal configurado e conectores pré-autorizados: quatro camadas, um ataque. O resumo do dia em segurança e o que isso muda na sua arquitetura.

João Gabriel
6 min de leitura
Radar Tech: a cadeia de exploração que foi de uma imagem HEIC ao repositório interno em menos de 72 horas
AP / Prancha visual 01
Leitura principal

O resumo do dia

A notícia de segurança mais discutida das últimas 24 horas não é uma CVE isolada: é uma cadeia de exploração que atravessou quatro camadas de arquitetura diferentes até chegar a repositórios internos de uma grande empresa de IA. O relatório técnico descreve algo que todo arquiteto deveria estudar, porque nenhum dos elos individuais é exótico — todos são falhas que existem em milhares de sistemas hoje.

O ataque começou, literalmente, com o upload de uma imagem.

Os quatro elos

1. O vetor de entrada. A aplicação aceitava uploads de imagens em formato HEIC/HEIF. Esse formato não era suportado pela biblioteca de verificação rápida usada pela aplicação, então os arquivos eram repassados para um binário externo de conversão (ImageMagick). Isso expôs o parser nativo de decodificação diretamente a arquivos controlados pelo atacante. Um único formato exótico aceito na borda abriu toda a cadeia.

2. O decodificador desatualizado. A biblioteca de decodificação instalada (libheif 1.19.7, em uma imagem baseada em Debian 12) continha um heap buffer overflow que permitia leitura e escrita fora dos limites durante a decodificação de HEIC. O detalhe mais importante: a correção já existia no upstream. O commit foi feito no ano anterior, mas não foi documentado como correção de segurança e por isso nunca recebeu um CVE. Resultado: a correção nunca foi retroportada para o pacote da distribuição, e nenhum scanner de vulnerabilidade acusou — a versão simplesmente parecia estar em dia.

Esse é o elo mais perigoso da história inteira, porque é invisível. "Atualize suas dependências" não resolve um problema que o próprio ecossistema não marcou como problema.

3. O parser sem isolamento. O decodificador rodava dentro do mesmo processo da aplicação web, sem sandbox e sem namespace dedicado. Isso significa que uma corrupção de memória no parser não era um problema do parser — era um problema do serviço inteiro. Os pesquisadores obtiveram execução remota de código no host do fórum a partir desse elo.

4. A confusão de identidade. Com o serviço comprometido, o próximo passo foi o SSO. A troca de código no fluxo OIDC tinha validação insuficiente (redirect/audience), e a aplicação federava identidade com o provedor corporativo. O resultado foi a tomada de conta de um usuário real da plataforma. E aqui está o detalhe que amplifica tudo: a conta comprometida já carregava conectores pré-autorizados. Não foi o login que causou o dano — foram as permissões que vinham penduradas nele. Com a sessão da vítima, os atacantes puderam usar o agente de código da própria conta para abrir um pull request em um monorepo interno.

Do primeiro achado ao acesso ao repositório interno: menos de 72 horas. A correção do lado do provedor levou cerca de 14 horas depois do relatório.

Por que isso é uma lição de arquitetura, não de patch

O instinto comum diante de um caso desses é "atualize a biblioteca". Isso resolve 1 dos 4 elos — e apenas temporariamente, porque os outros três são estruturais:

  • Aceitar formatos de arquivo que o sistema não precisa aceitar aumenta superfície de ataque sem contrapartida de valor.
  • Executar parser de dado não confiável no mesmo processo da aplicação é transformar qualquer bug de decodificação em comprometimento total do serviço.
  • Federar identidade entre serviços de confiança desigual, com validação frouxa de redirect e sessões longas, é criar uma ponte entre um fórum e um repositório de código.
  • Autorizar escopo amplo em conectores "por conveniência" transforma um roubo de sessão em comprometimento da cadeia produtiva.

Arquitetura de segurança não é sobre ter as bibliotecas certas. É sobre assumir que cada camada vai falhar em algum momento e projetar para que a falha de uma camada não valide a próxima.

O que fazer nesta semana

  • Reduza a superfície de entrada. Faça uma whitelist de formatos que a aplicação realmente precisa processar e rejeite o resto na borda. Se ninguém pediu HEIF/AVIF, eles não deveriam ser aceitos.
  • Isole o processamento de mídia. Conversão e decodificação devem rodar em serviço dedicado, com usuário não privilegiado, sistema de arquivos somente leitura e sem acesso à rede interna. Um teste de egress que falha é o critério de aceite.
  • Endureça o fluxo OIDC. PKCE, validação de redirect_uri por correspondência exata, TTL de sessão curto e reautenticação obrigatória para ações sensíveis (acesso a código-fonte, por exemplo).
  • Trate agentes de IA como novos pontos de enforcement. Se um agente de código tem permissão de escrita em repositório, ele precisa de branch protection, revisão humana obrigatória e um token com escopo mínimo auditável. O caso mostra que o agente da conta comprometida virou o caminho de acesso ao código.
  • Verifique backports, não só versões. Um inventário de dependências que compara número de versão não detecta uma correção que nunca foi retroportada. Se você roda imagem de container baseada em distro, o rebuild periódico não é opcional.

O ponto central

Nenhuma dessas quatro falhas é, isoladamente, um desastre. A combinação delas é. E é exatamente por isso que modelagem de ameaças em formato de cadeia — elo por elo, com o controle ausente nomeado em cada um — é mais útil do que uma lista de CVEs. Você não consegue corrigir "o ataque"; consegue quebrar cada elo, e quebrar os primeiros é sempre mais barato.

Publicamos hoje no catálogo um pacote para arquitetos de segurança que faz exatamente isso: transforma um relatório de incidente em um threat model de cadeia de exploração e um ADR de mitigação com plano de implementação verificável. O tema do pacote é esta cadeia — mas o ferramental serve para o próximo incidente.

Bônus do radar: o que mais foi discutido hoje

  • Harness de agentes de código fechado enviando código para a nuvem. Outro relatório da janela mostrou um aplicativo de codificação com IA empacotando o workspace inteiro — incluindo histórico .git completo, cache LFS e reflogs — e enviando cifrado para armazenamento em nuvem, com a chave privada retida apenas no servidor. Os toggles da interface não impediam o comportamento. O histórico do git carrega segredos apagados em commits posteriores e nomes de branches não publicadas: é uma superfície de vazamento que quase ninguém audita.
  • O debate sobre confiar em harnesses fechados de IA. A reação ao caso acima consolidou uma posição que aparece cada vez mais: os pesos podem ser abertos, mas o harness é onde seus dados vivem. Vale a auditoria.
  • Falhas em bibliotecas de parsing de mídia como classe de vulnerabilidade. A mesma equipe expandiu a pesquisa para outros serviços populares e confirmou que uma quantidade surpreendente de software depende do mesmo decodificador. Se a sua aplicação aceita .heic, .heif ou .avif de usuários, vale revisar a rota.

Fechamento

Segurança virou um problema de arquitetura de dados e identidade, não de perímetro. A notícia de hoje é um lembrete caro disso.

Do conceito à execução

Ferramentas práticas para levar as decisões desta nota ao seu próximo projeto.

12 / selecionados
SPA tradicional (REST + JSON) vs HTML over WebSockets: quem renderiza, quem guarda o estado e onde mora a latência em cada abordagem.
Event-Driven
01 / 03

HTML over WebSockets vs SPA — Pacote Multi-Arquivo para ADR de Adoção de Server-Driven UI (Event-Driven) — 5 Arquivos

por João Gabriel

gpt-4GPT-4oClaude+3
(0)
0 vendas
R$ 54,90
Pipeline de Desenvolvimento Seguro na Era da IA: estágios planejamento→implementação→verificação→entrega com feedback loop e papéis IA/humano.
Segurança
01 / 02

SSDLC na Era da IA: ADR + pipeline seguro para times que adotam copilotos e agentes de código (pacote de 5 arquivos)

por João Gabriel

gpt-4ClaudeGemini+1
(0)
0 vendas
R$ 49,90
Fluxo do envenenamento de build no incidente arrayref (20/08/2026): atacante com credencial/autor comprometido publica versão maliciosa no crates.io; o build script baixa payload (infostealer) durante o cargo build, na máquina dev/CI com privilégio; resposta do Rust Security Response Team retira os
Segurança
01 / 03

Plano de Endurecimento de Cadeia de Suprimentos com ADR e Runbook — Pacote Multi-Arquivo para Defesa em Profundidade de Dependências (âncora: incidente arrayref do Rust, 20/08/2026)

por João Gabriel

gpt-4ClaudeGemini
(0)
0 vendas
R$ 59,90
Diagrama do ataque: backdoor time-release em modelo open-source. O harness injeta a data no system prompt a cada turno; nos dias normais o modelo responde normalmente, mas no dia-gatilho um comando malicioso substitui a resposta e é executado pelo shell do agente sem confirmação.
Segurança
01 / 02

Revisão de Segurança e ADR de Adoção de Modelo de IA de Código (contra weight poisoning e backdoor time-release)

por João Gabriel

gpt-4ClaudeGemini+1
(0)
0 vendas
R$ 59,90
Fluxo de redefinição de credenciais: jornada legítima x jornada do atacante explorando o bypass (CVE-2026-18963, CVSS 9.1).
Segurança
01 / 02

ADR de Mitigação de Vulnerabilidade no Fluxo de Redefinição de Credenciais (CVE-2026-18963) — Pacote 5 Arquivos

por João Gabriel

gpt-4GPT-4oClaude+3
(0)
0 vendas
R$ 59,90
Cadeia de ataque: site legítimo publica llms.txt com comando non-dono; agente executa e cai em slot de registro reivindicado por atacante; EDR não alerta.
Segurança

Plano de Mitigação: Agentes de IA Instalando Código Não-Dono em Rede Corporativa

por João Gabriel

gpt-4ClaudeGemini
(0)
0 vendas
R$ 54,90
O clock do embargo colapsou: no modelo clássico, dias entre bug e exploit; hoje agentes transformam uma pista em exploit em menos de um minuto.
Segurança
01 / 03

ADR Reakt: decisão de arquitetura para o fim do embargo de vulnerabilidades (rumor virou exploit em minutos)

por João Gabriel

gpt-4ClaudeGemini+1
(0)
0 vendas
R$ 49,90
Arquitetura de sandbox para agentes de IA: agente não-confiável → orquestrador de política → sandbox descartável com controles de rede/credenciais e auditoria.
Segurança
01 / 02

ADR de adoção de sandbox seguro para agentes de IA (pacote multi-arquivo: prompt + guardrails + exemplos + harness de verificação)

por João Gabriel

gpt-4gpt-4-turboGPT-4o+3
(0)
0 vendas
R$ 49,90
Cadeia de ataque: entrada não confiável → Marshal.load → gadget chain universal → RCE, com o caminho de mitigação por ADR.
Segurança
01 / 03

ADR de Mitigação de RCE por Deserialização no Ruby 4.x — pacote multi-arquivo (prompt principal + regras + exemplos few-shot + harness de verificação + variações de stack)

por João Gabriel

gpt-4GPT-4oclaude-3-5-sonnet+3
(0)
0 vendas
R$ 59,90
Cadeia de ataque do incidente Snowflake×Wiz: do PR gerado por IA ao roubo do token Jira via injeção em GitHub Actions.
Segurança
01 / 02

Harness de Revisão de Segurança para Patches Gerados por IA (Injeção em CI/CD) — 5 arquivos

por João Gabriel

gpt-4ClaudeGemini
(0)
0 vendas
R$ 49,90
Fluxo de adoção: desenvolvedor → agente → guardrails → aprovação humana → deploy
Agentes
01 / 02

Adoção de Agentes de Código: Pacote Completo para Decisão Arquitetural com Guardrails

por João Gabriel

gpt-4GPT-4oclaude-3-opus+3
(0)
0 vendas
R$ 29,94
Antes: reservas em Redis + ledger em MySQL sem atomicidade entre o claim (UPDATE + DEL) - origem do oversell/undersell.
ADR
01 / 03

ADR de Simplificacao de Stack: Consolidar Reservas de Inventario no Banco Relacional (ACID) - Pacote Multi-Arquivo com Few-shot e Harness

por João Gabriel

GPT-4oclaude-3-5-sonnetgemini-1.5-pro
(0)
0 vendas
R$ 49,90