Языковые модели могут генерировать код, который ошибочно ссылается на программные пакеты, создавая уязвимости, которые могут эксплуатировать злоумышленники.
Что нового: Исследователь кибербезопасности заметил, что большие языковые модели при генерации кода многократно производят команду установки пакета, которого на самом деле нет по указанному пути, сообщил The Register. Он создал фиктивный пакет с таким же названием и загрузил его по этому пути, и разработчики должным образом его установили.
Как это работает: Бар Ланьядо, исследователь из Lasso Security, обнаружил, что ошибочная команда pip install huggingface-cli появлялась неоднократно в сгенерированном коде. Пакет huggingface-cli действительно существует, но он устанавливается с помощью команды pip install -U "huggingface_hub[cli]. Ошибочная команда пытается загрузить пакет из другого репозитория. Ланьядо опубликовал некоторые из своих выводов в блоге.
Ланьядо загрузил безвредный пакет с таким названием. Между декабрем 2023 и мартом 2024 года фиктивный пакет был загружен более 15 000 раз. Неясно, были ли эти загрузки результатом сгенерированного кода, ошибочных советов на форумах или пользовательских ошибок.
Несколько репозиториев на GitHub использовали или рекомендовали фиктивный пакет, включая GraphTranslator, который был обновлен для удаления ссылки. Сама HuggingFace вызывала этот пакет в одном из своих собственных проектов; компания удалила вызов после того, как Ланьядо уведомил ее об этом.
В исследовании, опубликованном в прошлом году, Ланьядо описал склонность ChatGPT рекомендовать несуществующий пакет Node.js под названием arangodb. (ArangoDB - это реальная система запросов к базе данных, но ее официальный пакет Node.js называется arangojs.) Ланьядо продемонстрировал, что возможно создать новый пакет с ошибочным именем и установить его, используя инструкции ChatGPT.
Тестирование: Ланьядо протестировал Coral от Cohere AI, Gemini Pro от Google и GPT-4 и GPT-3.5 от OpenAI. Его целью было определить, как часто они галлюцинируют пакеты и как часто они ссылаются на один и тот же галлюцинированный пакет. Сначала он собрал около 47 000 вопросов "как" по более чем 100 темам на Go, .NET, Node.js, Python и Ruby. Затем он определил вопросы, которые породили галлюцинированные пакеты из zero-shot prompt. Он выбрал 20 из этих вопросов случайным образом и запросил каждую модель 100 раз, чтобы посмотреть, будет ли она ссылаться на один и тот же пакет каждый раз.
Из протестированных моделей Gemini Pro чаще всего галлюцинировала пакеты, в то время как Coral чаще всего галлюцинировала один и тот же пакет. Вот (а) как часто каждая модель галлюцинировала пакеты и (б) как часто она галлюцинировала тот же пакет неоднократно. Coral: (a) 29,1 процента, (b) 24,2 процента. Gemini Pro: (a) 64,5 процента, (b) 14 процентов. GPT-4: (a) 24,2 процента, (b) 19,6 процента. GPT-3.5 (a) 22,2 процента, (b) 13,6 процента.
Процент ссылок на галлюцинированные пакеты также варьировался в зависимости от языка программирования. Например, при использовании GPT-4 30,9 процента запросов Go ссылались на галлюцинированный пакет по сравнению с 28,7 процента запросов .NET, 19,3 процента запросов Node.js, 25 процентов запросов Python и 23,5 процента запросов Ruby.
В целом Python и Node.js более уязвимы для такого рода атак, чем Go и .NET, которые блокируют доступ к определенным путям и именам файлов. Из выдач Go и .NET с галлюцинированными именами пакетов 2,9 и 21,2 процента соответственно были эксплуатируемы.
Почему это важно: Метод Ланьядо, как известно, пока не использовался в атаках, но, учитывая его схожесть с такими хаками, как typosquatting, dependency confusion и masquerading, дело может быть только вопросом времени.
Наши мысли: Улучшенные инструменты кодирования на базе ИИ должны помочь решить эту проблему. Между тем разница между командами вроде pip install huggingface-cli и pip install -U "huggingface_hub[cli] достаточно тонкая. В таких случаях поставщики пакетов могут следить за потенциальными двойниками и предупреждать пользователей, чтобы они не вводились в заблуждение.