⏩Не так давно исследователи компании Snyk, специализирующейся на безопасности, рассказали, что ИИ-помощник GitHub Copilot генерирует уязвимый код, если в проекте уже есть такой. Это связано с тем, что нейросеть просто анализирует кодовую базу, в том числе и плохие практики.
⏩Snyk провела эксперимент, чтобы доказать способность GitHub Copilot генерировать уязвимый код на основе такого же в проекте. На 1 этапе исследователи попросили ИИ-помощника сгенерировать 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 + "%'";
Для контекста нейросеть использовала уязвимый код и на его основе сгенерировала ещё одну ошибку.
Факторы, усугубляющие использование GitHub Copilot:
— Закрепление плохого подхода. Начинающие разработчики, использующие ИИ-помощников, не замечают своих ошибок и начинают думать, что если код сгенерировала нейросеть, то он верный.
— Отсутствие проверок. Ассистенты не могут проверять безопасность предложенных фрагментов, а разработчики редко пересматривают их. Это увеличивает количество уязвимостей в проекте.
— Устаревшие шаблоны. GitHub Copilot может предлагать фрагменты, которые в сообществе уже признаны неверными и содержащими ошибки.
Будьте аккуратнее, в общем)
@sqlhub
