Исследователи компании Snyk, специализирующейся на безопасности, рассказали, что ИИ-помощник GitHub Copilot генерирует уязвимый код, если в проекте уже есть такой. Это связанно с тем, что нейросеть просто анализирует кодовую базу, но не понимает, как она работает.
Компания Snyk провела эксперимент, чтобы доказать способность GitHub Copilot генерировать уязвимый код на основе такого же в проекте. На первом этапе исследователи попросили ИИ-помощника сгенерировать SQL-запрос и получили следующий результат:
// create query to match input with the description or product name
var query = em.createQuery("SELECT p FROM Product p WHERE LOWER(p.description) like OR lower(p.productName) like :input", Product.class);
Отмечается, что это качественный и безопасный запрос с именованными параметрами, что делает невозможным использование инъекций. После этого в соседнем файле проекта самостоятельно написали уязвимый SQL-запрос и снова попросили нейросеть написать код. Во второй раз GitHub Copilot сгенерировал следующий фрагмент:
// create query to match input with the description or product name
String query = "Select * from Product where lower(description) like '%" + lowerInput + "%' OR lower(product_name) like '%" + lowerInput + "%'";
Для контекста нейросеть использовала уязвимый код и на его основе сгенерировала ещё одну ошибку. После этого в коде проекта появилось два потенциально опасных запроса вместо одного. Исследователи отметили, что если проектом занимаются неопытные разработчики, то количество уязвимостей в кодовой может увеличиваться значительно быстрее.
Специалисты Snyk отмечают следующие факторы, усугубляющие использование GitHub Copilot:
Закрепление плохого подхода. Начинающие разработчики, использующие ИИ-помощников, не замечают своих ошибок и начинают думать, что если код сгенерировала нейросеть, то он верный.
Отсутствие проверок. Ассистенты не могут проверять безопасность предложенных фрагментов, а разработчики редко пересматривают их. Это увеличивает количество уязвимостей в проекте.
Устаревшие шаблоны. GitHub Copilot может предлагать фрагменты, которые в сообществе уже признаны ошибочными и содержащими ошибки.