Исследователи из компании Legit Security выявили критическую уязвимость в работе GitHub Copilot, которая может быть использована для извлечения конфиденциальной информации из закрытых репозиториев. Суть атаки заключается в использовании возможностей чатбота Copilot в контексте анализа pull-запросов, чтобы незаметно передавать данные третьим лицам.
В ходе демонстрации специалисты показали, как можно извлечь из приватного репозитория чувствительные данные, такие как ключи доступа к облачным сервисам — например, AWS. Основой для такой утечки стала способность Copilot обрабатывать скрытые комментарии в pull-запросах и загружать внешние изображения в зависимости от содержимого этих комментариев.
Методика атаки включает создание на сервере злоумышленника набора прозрачных однопиксельных изображений, каждое из которых соответствует определённому символу: букве, цифре или специальному знаку. Затем атакующий формирует pull-запрос, в котором вносит изменения в код, но также добавляет скрытый HTML-комментарий , не отображаемый в обычном интерфейсе GitHub. Внутри этого комментария содержится инструкция для Copilot, замаскированная под обычный текст.
Инструкция гласит: найти в репозиториях пользователя строки, содержащие, например, «AWS_KEY», и визуализировать их не текстом, а в виде набора изображений, где каждый символ представлен определённой картинкой. Сопоставление символов и изображений указывается в том же комментарии. При этом дополнительно указывается, что бот должен исключить из ответа любые пояснения или выводы, ограничившись только изображениями.
Когда владелец репозитория, не подозревая об угрозе, использует GitHub Copilot для анализа предложенного pull-запроса, бот выполняет инструкцию, обработав скрытый комментарий. В результате он отображает изображения, которые выглядят как пустое пространство, но фактически передают секретную информацию. Эти изображения загружаются с сервера атакующего, и по логам загрузки можно восстановить последовательность символов — тем самым раскрываются закрытые данные.
Для обхода систем безопасности GitHub, таких как Content Security Policy (CSP), которая ограничивает загрузку изображений с внешних источников, злоумышленники используют сервис GitHub Camo. Это прокси, применяемый GitHub для безопасной загрузки изображений из внешних источников, например, на страницах README. В атаке изображения подключаются через Camo, используя ссылки вида «https://camo.githubusercontent.com/хэш_изображения». Сначала изображения добавляются в систему через GitHub REST API, чтобы обеспечить их загрузку через Camo без блокировок.
После выявления уязвимости GitHub предпринял меры: был отключён рендеринг изображений в чате Copilot, что предотвращает подобную атаку. Тем не менее, инцидент подчёркивает важность дополнительной валидации и безопасности при использовании ИИ-инструментов в разработке.
Особое внимание стоит обратить на то, как в современных CI/CD-процессах реализуется работа с конфиденциальными данными. Например, при деплое через GitHub Actions секреты (такие как пароли или ключи доступа) передаются в окружение с использованием конструкции env: DB_PASSWORD: ${{ secrets.DB_PASSWORD }}, а затем подставляются в шаблон конфигурационного файла через утилиту вроде envsubst. Этот подход используется не только в GitHub, но и в других системах CI/CD, таких как GitLab, Jenkins и подобных.
Однако, несмотря на то, что такая система была задумана как защищённая, описанный инцидент показывает, что при наличии уязвимости в инструментах, использующих доступ к приватным репозиториям, возможно несанкционированное извлечение данных. Особенно это актуально, если автоматические системы анализа, такие как Copilot, получают доступ к скрытым комментариям и выполняют инструкции, не различая, являются ли они вредоносными.
Также важно понимать, что проблема не столько в архитектуре GitHub или GitHub Actions, сколько в чрезмерной доверчивости ИИ-инструментов к структуре и содержимому pull-запросов. Чатботы, не обладающие критическим мышлением, воспринимают даже завуалированные команды как легитимные инструкции.
Для предотвращения подобных атак разработчикам и администраторам стоит предпринять следующие шаги:
- Отключить автоматический анализ pull-запросов с использованием Copilot, особенно в репозиториях, содержащих чувствительную информацию.
- Настроить фильтрацию содержимого pull-запросов, исключая скрытые комментарии из обработки.
- Применять строгую политику контентной безопасности для блокировки загрузки изображений даже через прокси-сервисы.
- Использовать инструменты статического анализа, которые выявляют подозрительные конструкции в коде и комментариях.
- Регулярно проверять логи веб-серверов и CI/CD-систем на предмет аномалий в паттернах загрузки данных.
Кроме того, важно повышать осведомлённость среди разработчиков о возможных векторах атак, особенно тех, что используют нестандартные методы скрытой передачи данных. Так называемые "стеганографические" подходы, в которых информация маскируется под обычные элементы (например, изображения), становятся всё более изощрёнными и требуют соответствующих мер защиты.
Таким образом, случай с GitHub Copilot подчёркивает необходимость пересмотра политики безопасности в ИИ-инструментах разработки. Без должных ограничений и фильтрации такие инструменты могут стать не только помощниками в написании кода, но и невольными участниками в утечке конфиденциальной информации.



