Segurança e governança de IA
Injeção de prompt explicada
Injeção de prompt faz um texto da entrada de um LLM agir como instrução. Veja ataques diretos e indiretos e as defesas em camadas.
Os quatro riscos principais de assistentes de IA na segurança, um método para controlá-los e um laboratório que confere um resumo de CVE com NVD e KEV.
Um assistente de IA resume um registro de CVE em segundos. Ele também pode dar a versão corrigida errada no mesmo tom tranquilo que usa para a certa. Este artigo trata dessa diferença: os quatro riscos mais importantes no trabalho de segurança, um método para deixá-los pequenos e um laboratório em que você confere um resumo de exemplo, escrito por IA, com o registro do NVD, o catálogo Known Exploited Vulnerabilities (KEV) da CISA e a página de segurança do Apache Log4j.
A resposta curta: use o assistente em trabalhos que você consegue conferir, mantenha dados sensíveis e ações reais fora do alcance dele, a menos que alguém tenha aprovado, e deixe uma pessoa decidir cada passo que altera alguma coisa.
Um assistente é um modelo de linguagem com uma caixa de texto e, muitas vezes, algumas ferramentas conectadas: busca, leitor de arquivos, shell. Quatro riscos aparecem sempre.
Um modelo de linguagem produz as palavras mais plausíveis que vêm em seguida. Muitas vezes, a resposta plausível também é verdadeira. Às vezes é um número de versão que soa certo e não é. O perfil de IA generativa do NIST, o NIST AI 600-1, chama isso de confabulação: conteúdo apresentado com segurança, mas errado ou falso. O mesmo documento explica que a confabulação decorre de como esses modelos são construídos, não de um defeito raro.
Os identificadores são o ponto mais frágil. Números de CVE, versões de pacote, datas, nomes de função, números de RFC e de porta parecem estruturados, então um erro nelas parece verificado. É fácil copiar para um ticket e difícil de notar depois.
Tudo o que você cola num prompt sai do seu controle quando chega a um serviço que você não opera. O que acontece depois depende do serviço, das configurações e dos termos dele. O texto pode ser armazenado, registrado em log ou revisado. Na segurança, o material de risco é conhecido: nomes de clientes, nomes de host e faixas de IP internas, tokens que aparecem em logs, achados ainda não publicados e dados pessoais de um incidente. A OWASP classifica isso em LLM02:2025 Sensitive Information Disclosure, que cobre tanto o que o modelo revela quanto o que a aplicação ao redor expõe.
Um assistente só com caixa de texto dá, no pior caso, uma resposta ruim. Um assistente com shell, token de API ou permissão de escrita num repositório pode fazer algo ruim de verdade. A OWASP descreve o problema em LLM06:2025 Excessive Agency: o sistema tem mais funções, permissões ou autonomia do que a tarefa exige. Quando o modelo entende mal um pedido, o estrago depende do que ele podia tocar.
A injeção de prompt acontece quando um conteúdo que o sistema lê como dado traz instruções, e o modelo passa a segui-las. Esse conteúdo pode ser uma página web que você pediu para resumir, um e-mail da sua fila, uma linha de log com um user agent forjado ou um README de um repositório que você mandou revisar. A OWASP trata isso em LLM01:2025 Prompt Injection. O perfil do NIST descreve a forma indireta, em que um atacante deixa instruções em dados que o assistente provavelmente vai recuperar. O assistente pode não distinguir o seu pedido do texto que acabou de ler.
Analistas são quem copia o resultado da IA para relatórios, regras de detecção, tickets e mensagens a clientes. O erro vai junto com a cópia. Uma versão corrigida errada no seu resumo vira uma decisão errada de patch na janela de mudança de outra pessoa.
O AI Risk Management Framework do NIST, publicado em 26 de janeiro de 2023, organiza o trabalho em quatro funções: GOVERN, MAP, MEASURE e MANAGE. Você não precisa ter um programa de IA para usar essa ideia. Para um analista, ela significa saber para que a ferramenta serve, quais dados ela pode ver, com que frequência erra no seu tipo de tarefa e quem aprova uma ação. O framework é voluntário, e tudo bem. As perguntas continuam valendo.
Cinco regras, aplicadas nessa ordem toda vez.
Antes de colar qualquer coisa, separe o material em três grupos:
O material restrito fica de fora, a menos que o dono dos dados tenha aprovado esse uso e a sua organização tenha aprovado a ferramenta para essa classe de dado. Se você quer que o assistente raciocine sobre um log, anonimize antes. Um sed resolve um caso rápido:
sed -E 's/([0-9]{1,3}\.){3}[0-9]{1,3}/10.x.x.x/g; s/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/user@example/g' incident.log > redacted.logRode isso numa cópia, leia a saída e procure o que a expressão não pega: nomes de host, usuários, tokens e domínios internos. A regex não sabe como o seu cliente chama os servidores dele.
Peça ao assistente que liste cada afirmação factual com a fonte de onde ela veio e que escreva "sem fonte" quando não tiver uma. Depois trate cada afirmação sem fonte como uma pergunta que você precisa responder.
Uma citação na resposta não prova nada. O modelo pode produzir um link plausível ou uma frase atribuída a um documento que nunca abriu. Abra o link. Leia o parágrafo. Se o parágrafo não diz o que a resposta diz, a resposta está errada.
Dados primários são o registro sobre o qual a afirmação fala: a entrada do NVD para um CVE, o aviso do fornecedor, a entrada do KEV da CISA, o texto da norma, o resultado do seu próprio teste. Outra resposta de IA não conta, porque a segunda pode repetir o mesmo erro com a mesma confiança. Use o assistente para descobrir onde olhar. Use a fonte para decidir.
Comece com acesso somente leitura. Se a ferramenta pode rodar comandos, dê a ela uma conta com o mínimo de permissões, uma máquina virtual ou contêiner descartável e uma lista de comandos permitidos. Qualquer passo que escreva, envie, apague ou chame um sistema vivo deve esperar uma confirmação. Guarde o registro do que foi executado. Você vai querer esse registro na primeira vez que algo inesperado acontecer.
A ferramenta propõe. Uma pessoa com contexto e autoridade decide, e registra o que aprovou e a evidência que usou. Isso pesa mais em ações que não se desfazem: bloquear uma faixa de IP, fechar um ticket, publicar um patch em produção, enviar uma mensagem ao cliente.
Este laboratório usa apenas fontes públicas e somente leitura. Você não executa nada contra um sistema em produção. As três consultas vão para o NVD, para a CISA e para a Apache Software Foundation, e para mais nenhum lugar.
O que você precisa: um terminal (o Git Bash no Windows funciona), curl e jq. Se o jq não estiver instalado, instale pelo site do projeto jq. Os comandos abaixo foram executados no Windows 11 com Git Bash. O jq não estava instalado nessa máquina, então a saída mostrada vem de um comando Node.js que lê os mesmos campos do JSON. Os comandos com jq são os que você deve usar.
Abaixo está um resumo que um assistente escreveu sobre o CVE-2021-44228, a falha conhecida como Log4Shell. Leia antes de conferir qualquer coisa e marque o que você acha que está errado.
O CVE-2021-44228 é uma falha de execução remota de código no Apache Log4j2. Um atacante que controla um valor registrado em log consegue fazer o servidor carregar código de um servidor LDAP. O NVD publicou o registro em 2021-12-09. A falha afeta o Log4j de 2.13.0 até 2.14.1, e atualizar para 2.14.1 a corrige. A pontuação base do CVSS v3.1 é 10.0. A CISA incluiu a falha no catálogo KEV em 2021-12-10. Atacantes começaram a fazer varreduras em poucas horas após a divulgação. A falha está apenas no log4j-core.O resumo tem dois erros deliberados. Encontre-os com as fontes abaixo.
A API do NVD devolve o registro do CVE em JSON. Rode:
curl -s 'https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2021-44228' | jq '.vulnerabilities[0].cve | {published, descriptions: .descriptions[0].value}'Verificação equivalente sem jq, que é a saída mostrada abaixo:
curl -s 'https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2021-44228' -o nvd.json
node -e "const c=JSON.parse(require('fs').readFileSync('nvd.json','utf8')).vulnerabilities[0].cve;console.log(JSON.stringify({published:c.published,descriptions:c.descriptions[0].value},null,2))"Saída observada:
{
"published": "2021-12-10T10:15:09.143",
"descriptions": "Apache Log4j2 2.0-beta9 through 2.15.0 (excluding security releases 2.12.2, 2.12.3, and 2.3.1) JNDI features used in configuration, log messages, and parameters do not protect against attacker controlled LDAP and other JNDI related endpoints. An attacker who can control log messages or log message parameters can execute arbitrary code loaded from LDAP servers when message lookup substitution is enabled. From log4j 2.15.0, this behavior has been disabled by default. From version 2.16.0 (along with 2.12.2, 2.12.3, and 2.3.1), this functionality has been completely removed. Note that this vulnerability is specific to log4j-core and does not affect log4net, log4cxx, or other Apache Logging Services projects."
}Olhe o campo published. O resumo diz 2021-12-09. O registro diz 2021-12-10. Esse é o primeiro erro.
A descrição também traz uma condição que o resumo deixou de fora: o carregamento de código acontece quando a substituição de lookup de mensagem está habilitada. Deixar isso de fora faz a falha parecer atingir qualquer instalação do Log4j, e o registro não diz isso.
A CISA publica o catálogo KEV como um único arquivo JSON. Baixe e filtre pelo CVE:
curl -s -L 'https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json' -o kev.json
jq '.vulnerabilities[] | select(.cveID=="CVE-2021-44228")' kev.jsonSaída observada, de um catálogo com versão 2026.11.06 e 1769 entradas, baixado em 2026-11-08 (o filtro jq foi executado pelo Node.js, como acima):
{
"cveID": "CVE-2021-44228",
"vendorProject": "Apache",
"product": "Log4j2",
"vulnerabilityName": "Apache Log4j2 Remote Code Execution Vulnerability",
"dateAdded": "2021-12-10",
"shortDescription": "Apache Log4j2 contains a vulnerability where JNDI features do not protect against attacker-controlled JNDI-related endpoints, allowing for remote code execution.",
"requiredAction": "For all affected software assets for which updates exist, the only acceptable remediation actions are: 1) Apply updates; OR 2) remove affected assets from agency networks. Temporary mitigations using one of the measures provided at https://www.cisa.gov/uscert/ed-22-02-apache-log4j-recommended-mitigation-measures are only acceptable until updates are available.",
"dueDate": "2021-12-24",
"knownRansomwareCampaignUse": "Known",
"forensicTriage": "No",
"notes": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228",
"cwes": [
"CWE-20",
"CWE-400",
"CWE-502"
]
}A entrada confirma a inclusão no KEV e a data de inclusão. Ela não diz quando as varreduras começaram e não informa uma versão corrigida. Use-a para a inclusão, o prazo e a ação exigida, e nada além disso.
O registro do NVD aponta para a página de segurança do Apache Log4j. Abra e encontre a seção do CVE-2021-44228. Leia quatro campos: versões afetadas, versões corrigidas, componentes afetados e a descrição. Na versão da página obtida em 2026-11-08, a seção trazia estes valores:
Leia a página você mesmo, porque ela muda. A página também tem uma seção separada para o CVE-2021-45046, um problema posterior, que diz que a correção de 2.15.0 ficou incompleta em algumas configurações e aponta 2.16.0 para Java 8 ou superior.
Marque cada afirmação do resumo como confirmada, errada ou não verificável. Este é o resultado da conferência.
| # | Afirmação no resumo | Veredicto | Evidência |
|---|---|---|---|
| 1 | Falha de execução remota de código no Apache Log4j2 | Confirmada | Nome da vulnerabilidade no KEV; descrição no NVD |
| 2 | Um atacante que controla um valor registrado em log consegue fazer o servidor carregar código de LDAP | Confirmada (incompleta) | Descrição no NVD, que acrescenta a condição de substituição de lookup de mensagem habilitada |
| 3 | O NVD publicou o registro em 2021-12-09 | Errada | published no NVD: 2021-12-10T10:15:09.143 |
| 4 | A falha afeta o Log4j de 2.13.0 até 2.14.1 | Confirmada (incompleta) | Faixa afetada no Apache [2.13.0, 2.15.0), que cobre a 2.14.1 mas também linhas mais antigas; a faixa do NVD também começa em 2.13.0 e termina antes da 2.15.0 |
| 5 | Atualizar para 2.14.1 corrige a falha | Errada | O Apache lista 2.15.0 como correção para Java 8 ou superior; a 2.14.1 está dentro da faixa afetada |
| 6 | A pontuação base do CVSS v3.1 é 10.0 | Confirmada | Pontuação base CVSS 3.1 de 10 no NVD; a página do Apache lista 10.0 CRITICAL |
| 7 | A CISA incluiu a falha no KEV em 2021-12-10 | Confirmada | dateAdded no KEV: 2021-12-10 |
| 8 | Atacantes começaram a fazer varreduras em poucas horas após a divulgação | Não verificável | Nenhuma das três fontes traz horários de varredura |
| 9 | A falha está apenas no log4j-core | Confirmada | Página do Apache: só o JAR do log4j-core é afetado |
Duas afirmações estão erradas, uma não pode ser verificada e as demais conferem. As duas erradas são os dois erros deliberados do resumo.
O texto do NVD e as faixas de versão divergem de um jeito pequeno. A descrição diz "through 2.15.0", enquanto a faixa lida por máquina termina antes de 2.15.0. Tanto a configuração do NVD quanto a página do Apache dizem que 2.15.0 não é afetada por esse CVE em Java 8 ou superior. Quando as fontes divergem, registre a divergência e cite a que define a faixa. Não escolha a versão que fica melhor no texto.
A versão corrigida depende da versão do Java e do CVE. Um único número de "corrigido em" esconde as duas coisas. Peça o CVE exato, o produto, o componente e a plataforma, e leia a tabela do fornecedor.
Não verificável é um veredicto útil. O resumo afirma algo sobre o tempo dos atacantes que nenhuma das suas fontes dá. Essa afirmação pode ser verdadeira, e pode estar numa fonte que você não leu. Num relatório, ela precisa de citação própria ou precisa sair.
Monte uma avaliação pequena para o seu próprio trabalho. Escolha vinte CVEs cuja resposta você já conhece, peça ao assistente um resumo de cada um e conte os erros por tipo: datas, versões, componentes, pontuações. Uma checagem pequena assim diz mais sobre as suas tarefas do que a demonstração de um fornecedor. Repita quando a ferramenta ou a sua tarefa mudar.
Leia as entradas da OWASP para LLM01, LLM02, LLM06 e LLM09. Elas dão um vocabulário comum para injeção de prompt, exposição de dados, permissões excessivas e desinformação. Depois leia a seção 2 do NIST AI 600-1, que define os riscos cobertos pelo perfil.
Se você ainda está nos fundamentos, leia O que é uma vulnerabilidade? e O que é CVSS?. Para praticar a escrita dos achados que você verificou, leia Como escrever seu primeiro relatório de segurança. Se você envia trabalho a um modelo pela API da NotHoly, as mesmas cinco regras valem para o que você envia.
Segurança e governança de IA
Injeção de prompt faz um texto da entrada de um LLM agir como instrução. Veja ataques diretos e indiretos e as defesas em camadas.