Alucinações de Código de IA Aumentam o Risco de Ataques de ‘Confusão de Pacote’

O código gerado por IA está repleto de referências a bibliotecas de terceiros inexistentes, criando uma grande oportunidade para ataques à cadeia de suprimentos que envenenam programas legítimos com pacotes maliciosos que podem roubar dados, plantar portas dos fundos e realizar outras ações nefastas, mostra uma nova pesquisa.

O estudo, que usou 16 dos modelos de linguagem grande mais amplamente utilizados para gerar 576.000 amostras de código, descobriu que 440.000 das dependências de pacotes que continham eram “alucinações”, significando que não existiam. Os modelos de código aberto alucinaram mais, com 21 por cento das dependências vinculadas a bibliotecas inexistentes. Uma dependência é um componente essencial de código que uma parte separada do código precisa para funcionar corretamente. Dependências economizam o trabalho dos desenvolvedores em reescrever código e são uma parte essencial da moderna cadeia de suprimentos de software.

Essas dependências inexistentes representam uma ameaça à cadeia de suprimentos de software ao exacerbar os chamados ataques de confusão de dependência. Esses ataques funcionam fazendo com que um pacote de software acesse o componente de dependência errado, por exemplo, publicando um pacote malicioso e dando-lhe o mesmo nome que o legítimo, mas com uma marca de versão mais recente. O software que depende do pacote escolherá, em alguns casos, a versão maliciosa em vez da legítima porque a primeira parece ser mais recente.

Também conhecido como confusão de pacote, essa forma de ataque foi demonstrada pela primeira vez em 2021 em um exploit de prova de conceito que executou código falsificado em redes pertencentes a algumas das maiores empresas do planeta, incluindo Apple, Microsoft e Tesla. É um tipo de técnica usada em ataques à cadeia de suprimentos de software, que visam envenenar o software em sua própria origem na tentativa de infectar todos os usuários a jusante.

“Uma vez que o atacante publica um pacote sob o nome alucinado, contendo algum código malicioso, ele conta com o modelo sugerindo esse nome para usuários desavisados”, disse Joseph Spracklen, um estudante de doutorado da Universidade do Texas em San Antonio e pesquisador principal, em um e-mail para a Ars. “Se um usuário confiar na saída do LLM e instalar o pacote sem verificar cuidadosamente, o payload do atacante, escondido no pacote malicioso, seria executado no sistema do usuário.”

Em IA, alucinações ocorrem quando um LLM produz saídas que são factualmente incorretas, sem sentido ou completamente não relacionadas à tarefa em que foi designado. Alucinações têm atormentado os LLMs há muito tempo, pois degradam sua utilidade e confiabilidade e têm se mostrado vexatoriamente difíceis de prever e corrigir. Em um artigo programado para ser apresentado no Simpósio de Segurança USENIX de 2025, eles nomearam o fenômeno de “alucinação de pacote”.

Para o estudo, os pesquisadores realizaram 30 testes, 16 na linguagem de programação Python e 14 em JavaScript, que geraram 19.200 amostras de código por teste, totalizando 576.000 amostras de código. Das 2,23 milhões de referências de pacotes contidas nessas amostras, 440.445, ou 19,7 por cento, apontavam para pacotes que não existiam. Entre essas 440.445 alucinações de pacotes, 205.474 tinham nomes de pacotes únicos.

Uma das coisas que torna as alucinações de pacotes potencialmente úteis em ataques à cadeia de suprimentos é que 43 por cento das alucinações de pacotes foram repetidas mais de 10 consultas. “Além disso”, escreveram os pesquisadores, “58 por cento das vezes, um pacote alucinado é repetido mais de uma vez em 10 iterações, o que mostra que a maioria das alucinações não são simplesmente erros aleatórios, mas um fenômeno repetível que persiste em várias iterações. Isso é significativo porque uma alucinação persistente é mais valiosa para atores maliciosos que buscam explorar essa vulnerabilidade e torna o vetor de ataque de alucinação um risco mais viável.”

Em outras palavras, muitas alucinações de pacotes não são erros aleatórios de uma única vez. Em vez disso, os nomes específicos de pacotes inexistentes são repetidos várias vezes. Atacantes poderiam aproveitar o padrão identificando pacotes inexistentes que são repetidamente alucidados. Os atacantes então publicariam malware usando esses nomes e esperariam que eles fossem acessados por um grande número de desenvolvedores.

O estudo revelou disparidades nos LLMs e nas linguagens de programação que produziram mais alucinações de pacotes. A porcentagem média de alucinações de pacotes produzidas por LLMs de código aberto, como CodeLlama e DeepSeek, foi de quase 22 por cento, em comparação com pouco mais de 5 por cento pelos modelos comerciais. O código escrito em Python resultou em menos alucinações do que o código JavaScript, com uma média de quase 16 por cento em comparação com pouco mais de 21 por cento para JavaScript. Quando perguntados sobre o que causou as diferenças, Spracklen escreveu:

“Essa é uma pergunta difícil porque modelos de linguagem grande são sistemas extraordinariamente complexos, tornando difícil traçar causalidade diretamente. Dito isso, observamos uma disparidade significativa entre modelos comerciais (como a série ChatGPT) e modelos de código aberto, que é quase certamente atribuível ao número de parâmetros muito maior dos variantes comerciais. A maioria das estimativas sugere que os modelos ChatGPT têm pelo menos 10 vezes mais parâmetros do que os modelos de código aberto que testamos, embora a arquitetura exata e os detalhes de treinamento permaneçam proprietários. Curiosamente, entre os modelos de código aberto, não encontramos uma ligação clara entre o tamanho do modelo e a taxa de alucinação, provavelmente porque todos operam dentro de um intervalo de parâmetros relativamente menor.

“Além do tamanho do modelo, diferenças nos dados de treinamento, ajuste fino, treinamento de instruções e ajuste de segurança provavelmente desempenham um papel na taxa de alucinação de pacotes. Esses processos têm como objetivo melhorar a usabilidade do modelo e reduzir certos tipos de erros, mas podem ter efeitos imprevistos em fenômenos como a alucinação de pacotes.

“Da mesma forma, a maior taxa de alucinação para pacotes JavaScript em comparação com Python também é difícil de atribuir de forma definitiva. Especulamos que isso decorre do fato de que JavaScript tem aproximadamente 10 vezes mais pacotes em seu ecossistema do que Python, combinado com um namespace mais complicado. Com uma paisagem de pacotes muito maior e mais complexa, torna-se mais difícil para os modelos lembrar nomes de pacotes específicos com precisão, levando a uma maior incerteza em suas previsões internas e, em última análise, a uma maior taxa de pacotes alucidados.”

As descobertas são as mais recentes a demonstrar a desconfiança inerente à saída de LLM. Com o CTO da Microsoft, Kevin Scott, prevendo que 95 por cento do código será gerado por IA dentro de cinco anos, espera-se que os desenvolvedores prestem atenção à mensagem.

Fonte

Compartilhe esse conteúdo: