Эта небольшая заметка посвящена одной особенности GitHub Copilot. Про неё можно найти вопросы на stackoverflow, статьи и видео в интернете, но на хабре я не видел материалов на эту тему. Наверно, плохо искал.

Copilot может подсказать вам не только код подходящей функции, но и приватные ключи от криптокошельков, и логины/пароли от различных сервисов. Под катом немного подробностей для желающих порыбачить.

Конечно, можно возразить, что раз владельцы репозиториев публикуют что-то в открытый доступ, значит там по определению не должно быть приватных данных, но все мы знаем, как работает на практике обычная невнимательность. В идеальном мире не было бы смысла искать уязвимые сайты сразу пачками через поисковики, а пароли типа "123456" не были бы до смешного популярными.

Некоторые приватные ключи от крипты оказались, скажем так, не от пустых кошельков. Я сообщил о проблеме в GitHub ещё в середине апреля, спустя полтора месяца они прислали следующий ответ:

Thanks for the submission! We have reviewed your report and determined that it does not present a significant security risk. The personal data that Copilot presents is from public data. In this case, those keys were in public repositories or not all valid.

Because GitHub Copilot was trained on publicly available code, its training set included public personal data included in that code. From our internal testing, we found it to be extremely rare that GitHub Copilot suggestions included personal data verbatim from the training set. In some cases, the model will suggest what appears to be personal data – email addresses, phone numbers, access keys, etc. – but is actually made-up information synthesized from patterns in training data. For the technical preview, we have implemented a rudimentary filter that blocks emails when shown in standard formats, but it’s still possible to get the model to suggest this sort of content if you try hard enough.

Раз разработчики считают такое поведение алгоритмов нормальным...

Итак, что необходимо для рыбалки? Собственно, только VS Code и установленный GitHub Copilot. А дальше начинаем писать комментарий в коде с ключевыми словами.

#Ethereum wallet project private key
private_keys_list = ['0x

Немного помогите алгоритму понять, что именно вы ищете, может стоит добавить 1-2 цифры в начало ключа или указать другое имя переменной. Предложенные варианты не заставят себя ждать, можно спокойно дополнять список. Конечно, алгоритм будет пытаться генерировать искусственные ключи исходя из каких-то закономерностей, но такие случаи обычно сразу заметны: другая длина ключа, невозможные для ключа символы и т.п.

#Ethereum 12 words secret seed phrase
phrase = 'a

Напомню, по нажатию Ctrl+Enter откроется панель сразу с несколькими вариантами продолжения кода. С логинами и паролями к сайтам немного тяжелее, но принцип тот же. Не проверял, зависят ли данные от языка программирования. В общем, с "but is actually made-up information synthesized from patterns in training data" что-то странное, не всё там синтетически сгенерированно и не дублируется с реальными данными. Будем надеяться, разработчики GitHub действительно следят за источниками данных для обучения алгоритмов.

Эта заметка написана с единственной целью: поделиться ещё одним способом рыбалки в интернете, ещё одним способом немного развлечься в свободное время и поискать что-нибудь интересное. Не забывайте менять пароли!

Комментарии (4)


  1. coregabe
    30.05.2022 07:07
    -3

    В чём суть? Сами выложили боты собрали


  1. alyfox
    30.05.2022 12:10

    Полезная информационная статья.


  1. 0x7o
    30.05.2022 16:25

    К обучающим данным стоило быть более внимательными. Думаю, отличить приватный ключ от полезного кода не так сложно.


  1. dmitryvolochaev
    30.05.2022 17:45

    extremely rare that GitHub Copilot suggestions included personal data verbatim from the training set

    А может быть он подбирает пароли, которых нет в публичном доступе