Vulnerabilidades no código gerado por IA em sua imagem base

Os patches do php2shell (CVE-2026-109618 e CVE-2026-109619) para o PHP em fim de vida (EOL) já estão disponíveis. Como as respostas do atendimento de vendas estão mais demoradas do que o normal devido à alta demanda, a maneira mais rápida de obter os pacotes corrigidos é adquirir o ELS para Runtimes on-line (abre em uma nova aba). Leia as perguntas frequentes sobre os patches

Vá direto para um resumo gerado por IA desta postagem do blog

  • Resuma esta postagem com o Perplexity
  • Resuma esta postagem com o Gemini

Você já pediu a um LLM para gerar código e se perguntou: será que isso é realmente seguro? Com as empresas contratando “unicórnios da IA” e ferramentas como o Claude ou o Copilot se tornando o padrão, é fácil mergulhar de cabeça. Silenciosamente, há vulnerabilidades escondidas nesses blocos de código. Quando a prática da revisão de código começa a ficar de lado, essas vulnerabilidades se transformam em algo perigoso.

Já vi isso acontecer com Dockerfiles gerados por IA. Você pede um modelo padrão, recebe uma imagem base desatualizada e a implementa. Faça isso em uma dúzia de serviços e você terá uma equipe de segurança afogada em uma “dívida técnica gerada por IA” que ninguém se lembra de ter criado. Como explicarei, o SecureChain foi desenvolvido para lidar com os problemas decorrentes da falta de higiene nas dependências.

O mito de que “a IA salva o dia”

Supostamente, os LLMs são a melhor maneira de lidar com tarefas simples, como escrever um Dockerfile. Para desenvolvedores front-end que mal começaram a se aventurar no mundo do DevOps, um assistente de IA parece um verdadeiro salva-vidas, capaz de criar configurações de contêineres em segundos. Foi isso que pensei quando precisei de um Dockerfile, já que nunca tinha escrito um antes.

Mas temos um problema. Essa ajuda muitas vezes acaba se voltando contra a gente quando aquele código novo e reluzente que ela gerou começa a apresentar falhas, gerar erros ou, pior ainda, é enviado para produção com vulnerabilidades conhecidas.

Pense no código gerado por IA como uma pizza que você não pediu. Você ainda está com fome, mas antes de comê-la, precisa se certificar de que não tem anchovas… a menos que você goste de anchovas. Nesse cenário, você pode comparar esses peixinhos irritantes às versões vulneráveis do Node que você NÃO quer instalar. Verifique o que tem nela antes de dar uma mordida.

A anatomia de uma falha na IA

Aqui, dois problemas são confundidos. A IA pode escrever código inseguro de forma direta e também pode recomendar dependências obsoletas que nunca foram erradas de se escrever, mas que são erradas por ainda estarem em execução. Este artigo trata principalmente do segundo caso, pois é o que mais facilmente passa despercebido.

Pode parecer tão simples quanto isto: node:18-alpine. Uma linha, sintaxe válida, compila sem erros. Por trás disso, há três falhas sistêmicas:

  • Imagens desatualizadas: O assistente sugere uma versão da imagem base que, em algum momento, era uma opção padrão adequada nos dados de treinamento. Ele pode estar se baseando nessa imagem desatualizada ou em um contexto incompleto sobre o que seu projeto realmente oferece.
  • Vulnerabilidades embutidas: Um ambiente de execução em fim de vida (EOL) torna as falhas antigas permanentes, pois as correções do desenvolvedor original deixam de ser disponibilizadas. O Node.js 18 atingiu o fim do ciclo de vida (EOL) em 30 de abril de 2025, e O Docker Hub mostra 18-alpine foi atualizado pela última vez há mais de um ano. O que quer que estivesse naquela versão final é o que você recebe.
  • Confiança cega: os desenvolvedores partem do princípio de que “a IA deve ser boa nisso” e pulam a verificação, pois o resultado parece familiar e a compilação é bem-sucedida.

Nada quebra a ilusão. docker pull node:18-alpine funciona exatamente como funcionava em 2024. O contêiner é iniciado. Ninguém na cadeia de desenvolvimento está aplicando correções nele.

A pesquisa aponta na mesma direção. O Relatório de Segurança de Código de IA Gerativa de 2026 da Veracode estima que a taxa média de aprovação em segurança seja de 56% em mais de 100 modelos ao longo de quatro anos, mantendo-se estável mesmo com a precisão sintática ultrapassando 95%. Trata-se de 80 tarefas de programação sem orientações de segurança no prompt; portanto, é uma referência para resultados não orientados, e não uma taxa de defeitos para tudo o que é lançado.

As ferramentas de IA são ótimas, não me interpretem mal. Elas são, sem dúvida, rápidas, mas não são perfeitas e ainda exigem a intervenção humana e ferramentas adequadas para detectar problemas antes que eles comprometam a base de código.

Por que a disciplina na avaliação entra em colapso

Gerar código hoje em dia é tão fácil que, muitas vezes, deixamos de tratá-lo como “código a ser revisado”. O resultado parece descartável: perguntar, colar, executar, seguir em frente. Quanto mais rápido esse ciclo fica, mais fácil é que a revisão se torne a parte demorada que todos contornam discretamente.

Na prática, a quebra da disciplina costuma se manifestar da seguinte forma:

  1. Confiar incondicionalmente na IA para tarefas rotineiras
  2. Utilização de versões de tempo de execução, como o Node 18, que já atingiram o fim do ciclo de vida (EOL)
  3. Não verificar os resultados gerados pela IA com ferramentas de segurança como o Docker Scout ou o Snyk
  4. Ignorar os avisos do IDE que apontam vulnerabilidades ou dependências de risco no código gerado
  5. Ignorar os arquivos de infraestrutura durante a revisão porque não se trata de código “real” do aplicativo
  6. Priorizar a rapidez do tipo “a IA salva o dia” em detrimento da segurança pronta para produção

É fácil subestimar esse quinto item. É tentador ler cada linha de um componente React e pular o Dockerfile de nove linhas que vem logo abaixo. Esse arquivo não é uma configuração. É a base.

É fundamental compreender as categorias de erros por trás do código gerado por IA:

A “Higiene Alucinada” ocorre quando uma IA sugere uma configuração que parece padrão, mas que se baseia em uma fonte obsoleta ou sem suporte. A formatação está dentro das normas. O código de versão está desatualizado.

A “cegueira de gravidade” ocorre quando os desenvolvedores tratam o código gerado por IA como um problema “resolvido”, em vez de componentes que ainda precisam passar por uma verificação de vulnerabilidades. Uma compilação com status “verde” não significa que esteja livre de problemas.

Contexto: A falha significa que a IA pode não saber quais versões estão no fim do ciclo de vida (EOL), quais apresentam CVEs ativos ou qual é a sua política de versões, a menos que você informe a ela.

Um código nunca é seguro apenas porque foi escrito por um LLM. Trate-o como qualquer código proveniente de uma fonte não confiável: revise-o, verifique se há código malicioso e vulnerabilidades conhecidas e compare as dependências com as informações atualizadas do upstream.

Como é uma vulnerabilidade em código gerado por IA

Abra um Dockerfile gerado por IA no Visual Studio Code com uma extensão de verificação instalada, como o Docker DX (que exibe as descobertas do Docker Scout diretamente no código) ou o Snyk, e você poderá receber um aviso imediatamente. O LLM atribuiu a você uma versão desatualizada do Node sem que você a tenha escolhido. A redação varia de acordo com a ferramenta, mas eis como fica em uma configuração típica do Next.js:

# Use the official Node.js runtime as the base image
FROM node:18-alpine AS builder

# Illustrative scanner warning:
# Image references an End-of-Life Node.js runtime (18.x, EOL 2025-04-30)
# and may include known vulnerabilities.
# Move to a supported LTS line, then rebuild, rescan, and test.

Tradução: a IA indicou o nó:18, que não é apenas antigo. O projeto Node.js não lança mais atualizações de segurança para essa versão, e a imagem publicada não é recompilada há mais de um ano. Sua compilação funciona perfeitamente, embora a base subjacente não tenha mais suporte. Esse é o risco da cadeia de suprimentos de software que passa despercebido quando “a compilação dar certo” se torna o objetivo final.

AI Dockerfile generation
  |-- Base image suggestion (node:18-alpine)
   |-- EOL runtime, no upstream security releases
       |-- Image last rebuilt over a year ago

Recuperando o toque humano no seu processo de revisão

Você pode simplesmente deixar de usar a IA, se quiser, mas, pelo que percebo, o uso vem aumentando a cada dia. No entanto, você pode atualizar seu processo de revisão para que a rapidez não substitua, sem que se perceba, a verificação.

Opção 1. Verificação manual e correções

As ferramentas de “correção rápida” dos IDEs modernos muitas vezes podem substituir uma sugestão desatualizada por uma compatível. Antes de fazer o commit do código gerado pela IA:

  • Verifique o cronograma de lançamentos do projeto de origem, e não apenas o repositório, que disponibilizará sem problemas uma tag cujo suporte já foi descontinuado pelos mantenedores
  • Leia os registros de alterações ou as notas de migração entre a sugestão da IA e a versão de destino
  • Recrie e faça uma nova verificação após a alteração, já que a simples troca da tag não garante, por si só, que a imagem esteja limpa
  • Teste a compilação primeiro em um novo branch, NUNCA diretamente no main
  • Tenha em mente que “agir rapidamente” não significa que você possa pular a etapa de revisão

Opção 2. Atualização do prompt ou da configuração

Dê menos margem para o modelo adivinhar. Se sua equipe tiver uma política de tempo de execução definida, inclua-a no prompt ou nas instruções do seu repositório para que ela seja aplicada sempre, em vez de ter que corrigir a mesma sugestão repetidamente:

# Use a supported Node.js LTS base image
FROM node:24-alpine AS base

É importante saber para qual linha você vai migrar. O Nodo 24 é a linha LTS ativa, que passará para a fase de manutenção em 20 de outubro de 2026 e atingirá o fim de vida útil (EOL) em 30 de abril de 2028. O Nodo 22 já está na fase de manutenção LTS; a data de fim de vida útil (EOL) está indicada como 30 de abril de 2027. O Nó 20 atingiu o EOL em abril de 2026. Um assistente pode recomendar todas as três opções com o mesmo tom de confiança; portanto, verifique você mesmo o cronograma.

Seja claro sobre o que node:24-alpine No entanto, há um porém. Trata-se de uma tag de versão principal dinâmica, não de uma versão fixada. O Docker Hub exibe imagens do Node 24 Alpine atualizadas no último mês, o que é ideal para incorporar correções, mas não para compilações reproduzíveis. Se a reprodutibilidade for importante, fixe a combinação completa de versão e Alpine ou faça referência a um resumo imutável, e assuma a responsabilidade de atualizar essa versão fixada.

Uma recompilação limpa indica que as versões de substituição foram compiladas e que o aviso desapareceu. Isso não significa que a imagem esteja livre de vulnerabilidades nem que o aplicativo continue funcionando corretamente. Ainda é preciso realizar varreduras e testes. A IA é excelente em termos de velocidade, mas ainda é necessário aquele toque humano para detectar essas coisas “sorrateiras”.

Onde você vai dedicar seus esforços é uma questão de critério. O código padrão para uma ferramenta interna precisa passar por uma verificação de tags e uma varredura. Qualquer coisa que envolva tráfego de produção, autenticação, segredos ou sua árvore de dependências passa por uma revisão completa em um branch isolado.

Sempre verifique o resultado. Considere as sugestões da IA como rascunhos, e não como planos definitivos. Silenciar os alertas das ferramentas de segurança não elimina a dívida técnica subjacente.

Ampliando a segurança com o SecureChain

Gerenciar os riscos de dependência em dezenas de serviços pode sobrecarregar qualquer equipe de segurança, especialmente quando a IA gera opções mais rapidamente do que qualquer pessoa consegue analisá-las manualmente. É aí que o SecureChain atua como uma “capa de proteção” sobre sua árvore de dependências.

As imagens de base são apenas uma superfície. O mesmo assistente que escolheu node:18-alpine também preencheu o seu package.json, a partir da mesma imagem desatualizada. O SecureChain cobre essa segunda superfície, substituindo o registro público como o local de onde suas compilações são obtidas. Essa proteção se aplica em dois aspectos:

  • Proteção pré-EOL: Cada pacote é recompilado a partir do código-fonte em ambientes fortificados e isolados e submetido a uma verificação para detectar malware conhecido, padrões de código suspeitos e riscos na cadeia de suprimentos; em seguida, recebe correções de acordo com o SLA à medida que surgem CVEs, incluindo dependências transitivas.
  • Proteção pós-EOL: Quando a manutenção do fornecedor é encerrada, o Endless Lifecycle Support (ELS) continua fornecendo correções, adaptadas às versões exatas que você já utiliza. Sem atualizações forçadas, sem reescritas.

Configure seu gerenciador de repositório — ou diretamente seu gerenciador de pacotes — para o SecureChain e continue trabalhando. Os mesmos pacotes, as mesmas APIs, o mesmo fluxo de trabalho. Cada pacote traz proveniência SLSA Nível 3, uma SBOM e dados VEX — evidências úteis quando alguém perguntar de onde veio uma dependência sugerida pela IA.

Nada disso substitui a revisão de código. Isso significa que a segurança das dependências não depende de um assistente acertar todas as escolhas de versão.

Conclusão

Não entre em pânico quando o LLM conseguir escrever código mais rápido do que você consegue revisá-lo. Basta fazer ajustes no processo. As sugestões devem ser tratadas exatamente como isso: sugestões. Use seu editor de código ou IDE, seus scanners e as outras ferramentas à sua disposição para detectar vulnerabilidades antes mesmo que elas apareçam em produção.

Os cronogramas de lançamento seguem em frente, independentemente de o modelo perceber ou não, e é nessa lacuna que residem as vulnerabilidades do código gerado por IA. Certifique-se sempre de que haja um ser humano envolvido para garantir um lançamento seguro e bem-sucedido.

Resumo
Vulnerabilidades no código gerado por IA em sua imagem base
Nome do artigo
Vulnerabilidades no código gerado por IA em sua imagem base
Descrição
As vulnerabilidades no código gerado por IA geralmente têm origem em uma imagem base desatualizada. Veja como os ambientes de execução em fim de vida útil (EOL) chegam à produção e como detectá-los.
Autor
Nome da editora
TuxCare
Logotipo da editora

Junte-se a mais de 4.500 profissionais de Linux e código aberto!

2 vezes por mês. Sem spam.

Índice
Obtenha as respostas sobre segurança de código aberto de que você precisa

Junte-se a mais de 4.500 profissionais de Linux e código aberto!

2 vezes por mês. Sem spam.