Это история о том, как я нашел 10.000 репозиториев в GitHub, в которых находится ссылка на скачивание zip архива. В этом архиве — троян. Все эти репозитории от разных контрибьюторов, с разным названием и не являются форками других репозиториев. Но у всех них есть одинаковый паттерн, который и позволил написать скрипт для поиска таких репозиториев.
Начало
У меня есть проект в гитхабе и я хотел проверить, проиндексировали ли его поисковые системы. Ввёл название проекта в Google, в выдаче появился мой репозиторий. Ввёл такой же запрос в Bing, в выдаче появился чужой репозиторий. С таким же названием и описанием. Там была копия моего репозитория со всеми коммитами, а я был указан в списке контрибьюторов. Но час назад был отправлен еще один коммит с изменением readme. В нём добавилась ссылка на zip архив.
Я выбирал подходящие теги для другого моего проекта в гитхабе. Перешел по этим тегам, чтобы посмотреть аналогичные продукты. В списке нашел репозиторий, название и описание которого полностью совпадают с еще одним репозиторием из этого списка. Оказалось, что в нем также скопированы все коммиты этого репозитория, а 2 часа назад в readme была добавлена ссылка на zip архив.
Понаблюдав за этими двумя репозиториями, я выяснил, что они каждые несколько часов удаляют предыдущий коммит и снова отправляют такой же коммит. В этом коммите только 1 изменение: добавление ссылки на архив в readme файл.
Я отправил запрос в поддержку гитхаба с просьбой удалить эти репозитории. За 2 недели ничего не изменилось, поддержка гитхаба не ответила. Я обсудил с ИИ, что еще можно с этим сделать, но полезных советов он не дал. Я открыл обсуждение на гитхабе, ответили 3 человека, с таким же ИИ слопом без какой-либо пользы.
Еще через месяц поддержка гитхаба прислала мне письмо о том, что они удалили эти репозитории.
Вы можете открыть другие подобные репозитории, посмотреть последний коммит и увидеть, что несколько часов назад в readme была добавлена ссылка на zip архив:
https://github.com/lucasheriq4374/welink
https://github.com/lucioloprey/OcyShield-Framework
https://github.com/luigi1973/AssetRipper-CLI
Zip архив содержит 4 файла:
Application.cmd или Launcher.cmd
loader.exe или luajit.exe или another_name.exe
random_name.cso или random_name.txt
lua51.dll
Если указать ссылку на архив в virustotal, он найдет 0 вирусов.
Если отправить zip файлом, он найдет в нём троян.

Продолжение
Казалось, я уже забыл об этом событии, но моё подсознание не забыло. И часто подсознание подкидывает мне интересные идеи когда я сплю или просыпаюсь. Недавно я проснулся и в ту же секунду понял, что мне нужно сделать. Мне нужно составить общий паттерн, а затем написать скрипт, который проанализирует все репозитории гитхаба и найдет среди них те, которые попадают под этот паттерн.
Паттерн для поиска:
Каждые несколько часов удаляется предыдущий коммит и отправляется новый
В коммите обновляется только readme файл
В readme файле находится ссылка на zip архив
Коммиты скопированы с другого репозитория
Это новый репозиторий, а не форк
У всех репозиториев разные контрибьюторы и разные названия
Из последних 2 пунктов становится понятно, что даже если мы найдем один такой репозиторий, мы не сможем по нему найти другие подобные репозитории. Но в гитхабе 500 миллионов репозиториев. Как нам их все проанализировать? Гитхаб позволяет делать 5.000 запросов в час с одним токеном. Для каждого репозитория нам надо сделать несколько запросов для получения списка коммитов, измененных файлов и контента readme файла. Я не хотел ждать год, пока скрипт проанализирует все репозитории.
Но ведь нам не нужны все репозитории, нам нужны только те, которые обновляются каждые несколько часов. Я нашел сервис gharchive, с которого можно скачать все события гитхаба за любой день. Значит нам нужно получить события за последние дни, найти из них пуш коммитов, и найти репозитории, которые обновляются от 2 до 10 раз каждые 10 часов.
За последние 5 дней было 16 миллионов пушей коммитов. Из них всего 3.000 репозиториев, которые обновляются каждые несколько часов.
Но в событиях нет информации о том, какие именно файлы были изменены. Значит для каждого подходящего репозитория нам нужно сделать дополнительные запросы к API гитхаба.
После запуска сприпт выдал много репозиториев. Я добавил в фильтры несколько параметров:
Коммит должен быть от пользователя, а не от бота
Между последним коммитом и предпоследним прошло более месяца
В репозиториях больше одного контрибьютора
После этого нашлось только 14 репозиториев, которые полностью совпадают с паттерном. И мне не давал покоя вопрос, почему нашлось так мало репозиториев? Какая вероятность того, что я наткнулся на эти репозитории 2 месяца назад и их всего 14 штук по всему гитхабу? Ведь их должно быть гораздо больше. Представьте, какой был бы заголовок этой статьи, если бы я нашел миллион таких репозиториев, ну или хотя бы тысячу.
Но я смирился с тем, что их всего 14, и начал писать эту статью. Я решил перепроверить их еще раз, чтобы не добавить в статью лишние репозитории по ошибке. И какого же было мое удивление, когда я увидел, что все они обновлялись последний раз 20 часов назад. Значит параметр "обновляются каждые несколько часов" был вообще не правильный. Фильтр отбросил все репозитории, которые обновляются редко.
Еще при ручной проверке я увидел репозитории, в которых есть ссылка на zip архив и есть недавний коммит, но в нём 0 изменений. А фильтр учитывал только репозитории, в которых был изменен 1 файл readme в последнем коммите.
Еще я заметил, что последний коммит во всех этих репозиториях называется одинаково: "Update README.md".
Я поменял фильтр. Теперь скрипт искал репозитории, которые обновлялись от 1 до 24 раз каждые 24 часа. Таких репозиториев нашлось 40.000.
Репозиториев, которые полностью совпадают по паттерну — 10.000. Это 25% от общего количества.
Каждый из этих репозиториев содержит zip архив с трояном.
Эти репозитории существуют много месяцев, некоторые даже больше года, гитхаб их автоматически не детектит и не удаляет.
Полный список репозиториев я опубликовал на GitHub.
Скрипт для поиска таких репозиториев: Git Malware Finder
Открытые вопросы
Почему они копируют только новые репозитории, а не популярные?
Зачем они удаляют коммит и отправляют новый каждые несколько часов?
Почему гитхаб не детектит такие репозитории автоматически?
Что именно делает исполняемый exe файл из архива?
Какой реальный масштаб этой схемы?
Мои предположения
Задача хакеров — понять, как работает система, найти в ней ограничения и уязвимости, и воспользоваться этой информацией. Если перезаписывание коммитов помогает обойти алгоритмы безопасности гитхаба, то они этим воспользовались. Возможно, по этой же причине каждый коммит называется "Update README.md".
Вторая задача это распространение вируса. Как сделать так, чтобы люди его нашли и скачали? Думаю для этого они копируют только новые репозитории и сразу попадают в топ выдачи поисковых систем по низкочастотным запросам. И они добавляют эти репозитории в популярные теги гитхаба, чтобы увеличить шанс индексации, и чтобы люди нашли эти репозитории из этих тегов.
Но почему они копируют все коммиты и контрибьюторов? Ведь они могли просто скопировать весь исходный код? Это возможно сделано для доверия. Когда человек заходит в репозиторий, он видит контрибьюторов, может в них перейти и увидеть, что это не аккаунты однодневки. И сохраняется история коммитов, чтобы было понятно, что репозиторий появился не вчера. Но возможно это также сделано для обхода алгоритмов гитхаба.
Это только мои предположения, а реальность может быть совершенно другая.
Заключение
У меня было ограничение API гитхаба на 5.000 запросов в час. Я оптимизировал скрипт для поиска только подходящих репозиториев, и думаю из-за фильтра скрипт нашел только малый процент репозиториев. У команды гитхаба таких ограничений нет. Они могут проанализировать все 500 миллионов репозиториев, найти в них любые архивы или исполняемые файлы и проверить их на вирусы.
На этот раз я не буду отправлять запрос в GitHub. Репозиториев слишком много. Если у кого-то из вас есть прямой контакт со службой безопасности гитхаба, отправьте им ссылку на эту статью.
UPD
Нашел такую статью от 18 апреля: How 109 Fake GitHub Repositories Delivered SmartLoader and StealC
В ней подробно рассказывается, как работает этот вирус. На тот момент автор статьи нашел 109 таких репозиториев.
UPD 2
Гитхаб начал удалять все репозитории, которые нашёл скрипт. Большинство из этих репозиториев уже не доступны.
UPD 3
Нашёл пост на Reddit с упоминанием этой схемы. Он был размещен в феврале 2025, почти 1.5 года назад: If you’re creating new repositories, they are being spoofed to host malware
UPD 4
Гитхаб удалил только те репозитории, которые я опубликовал в полном списке в txt файле. Затем я запустил скрипт еще раз, он нашёл новые репозитории, я добавил их в эту статью. Прошло 2 дня, эти репозитории не были удалены. У гитхаба нет способа поиска этих репозиториев. Они не запустили мой скрипт, они не написали свой скрипт. Они даже не открыли эту статью, чтобы посмотреть, изменился ли в ней список репозиториев. Они удаляют только репозитории, о которых им сообщают, но больше они ничего не делают. Поэтому эта схема существует уже несколько лет, и скорее всего продолжит существовать.
Все новые статьи и короткие заметки я публикую на сайте и в телеграм канале.
Комментарии (35)

greabock
18.06.2026 09:10Хабравчане, а есть идеи как можно что-то еще нарыть на этих ударников опенсорсного труда? Может по трояну кто-то что-то поймет? ))

Dzen_Python
18.06.2026 09:10Да, в последнее время то AUR забрасывают такими вот волнами с троянами, про NPM вообще молчу

nodevner
18.06.2026 09:10
Скриншот с VirusTotal Я загрузил несколько таких архивов с вирусом на VirusTotal. В каждом архиве в разделе Network Communication вирус стучится на 3 ресурса: GET на сайт по получению информации об айпи, POST на
https://polygon.drpc.org/и POST на предполагаемый сервер создателя вируса. Могу только предположить, что суть схемы в краже криптовалюты.

danila-kondr2004
18.06.2026 09:10Есть также репозитории на Github, где вирус размещён не по ссылке в README.md, а в релизном дистрибутиве. Например, клоны Flowseal/zapret-discord-youtube, которые создаются как будто под копирку, и во всех таких репозиториях в релизах есть файл DiscordFix.exe, который нужно обязательно запустить. Может быть, сейчас именно такой способ неактуален, распространители троянов наверняка поменяли тактику действия, но такое имело место, и я лично обращался в поддержку Github с требованием заблокировать один из таких репозиториев.
Было бы интересно поискать такие вот репозитории с вирусами в релизах.

Rikimortuy
18.06.2026 09:10В релизах прятать даже логичнее. Юзеры привыкли качать бинарники именно со вкладки релизов, это вызывает меньше подозрений

Granulex
18.06.2026 09:10Техника обновления вредоносного коммита каждые несколько часов – не случайность: это сброс таймера для автоматических фильтров, которые ловят недавно изменённые репозитории. Параллельно жертва числится контрибьютором в копии своего же проекта – случайный посетитель видит знакомое имя и снижает бдительность. Два механизма доверия, задействованных одновременно.

Rikimortuy
18.06.2026 09:10Гитхабу давно пора внедрить хэширование бинарников по ссылкам в ридми. Если линка ведет на внешку с малварью, надо сразу давать шадоубан репе

orchidfiles Автор
18.06.2026 09:10Они размещают zip архив в этом же репозитории. Это уже не внешняя ссылка. Возможно это помогает обходить алгоритмы гитхаба.

Psychosynthesis
18.06.2026 09:10И они добавляют эти репозитории в популярные теги гитхаба
А что конкретно значит вот это предложение?

orchidfiles Автор
18.06.2026 09:10В гитхабе есть теги. Вы можете добавить до 20 тегов в репозиторий. Тогда он будет показываться в списке репозиториев по этому тегу.

Sanctuary_s
18.06.2026 09:10Я репортил еще неделю назад https://github.com/CreekMonitor/Win11-Deployment-Optimization-Tool, но так и не снесли. :(

KEugene
18.06.2026 09:10Я всегда думал, что пользователь Гитхаба означает человека, который не станет запускать на компьютере стремный exe файл. Разве что в качестве эксперимента в песочнице.
Кстати, разработчики ориентируются только на Windows пользователей. Какая дискриминация.

4ae4eK
18.06.2026 09:10Кстати, разработчики ориентируются только на Windows пользователей. Какая дискриминация.
На самом деле всё просто. Windows - самая популярная ОС в пользовательском сегменте. А делать под другие системы даже ради
далее цифра взята с потолка10-12% не особо имеет смысла

Rikimortuy
18.06.2026 09:10Гитхаб давно перестал быть платформой только для программистов. Сейчас туда ходят за модами для игр, кряками и всякими фиксами для ютуба

dee3mon
18.06.2026 09:10Там сейчас кучу всего стороннего удобно хранить и распространять. Например, у меня там есть репо с библиотекой компонентов для Altium-а и с шаблонами для него, а также с учебниками в pdf-ах.

JBFW
18.06.2026 09:10Справедивости ради - очень распространенная схема установки чего-либо в Линуксе - curl URL | bash, то есть вы даже не знаете что именно скачали и откуда на самом деле, приходит некий скрипт, который что-то делает.
Еще и права рута попросит (и получит).Конечно, есть параноики, которые сначала скачают, потом почитают, и только потом запустят (или пошагово выполнят вручную).
Но не уверен что нас много...

Rikimortuy
18.06.2026 09:10Микрософт покупает гитхаб за миллиарды, прикручивает туда нейросети, но не может написать крон для поиска архивов с троянами. Технологии которые мы заслужили

YuriyX
18.06.2026 09:10Вот это дела. 10к репозиториев с троянами, схема работает годами, а GitHub реагирует только на ручные репорты. Это systemic failure платформы. У них есть ресурсы проанализировать 500 млн репозиториев, но нет желания. Вопрос: это халатность или осознанная политика невмешательства? Потому что если второе — то Microsoft фактически покрывает распространение malware через свою инфраструктуру.

nay77
18.06.2026 09:10Может просто неофициальный полигон для отработки технологии массового заражения пользователей.

Remigrant
18.06.2026 09:10то Microsoft фактически покрывает распространение malware через свою инфраструктуру.
А может быть, он делает это специально и целенаправленно?.. Да не, не может же быть!
OH, SHI...!!!

pureooplover
18.06.2026 09:10Я тоже так накрыл два аккаунта когда увидел что мой проект на гитхабе скопировали и добавили некий zip-файл "Software-2.1-beta" и там в этом файле был обфусцированный код на Lua.
UPD: я эти аккаунты заметил в начале этого года.

LimTroev
18.06.2026 09:10Еще были прецеденты, например скачиваешь проект на Microsoft Visual Studio, собираешь и подхватываешь малварь при сборке. Все дело в том, что в PreBuid Step или PostBuild Step была строчка запуска вируса. Еще гитхаб вирусописатели используют ка промежуточное звено для полезной нагрузки и обновлений своих троянов, ботов, стиллеров и т.д. а так же размещают там зашифрованные адреса командных центров для них и многое другое.

Sap_ru
18.06.2026 09:10Это ещё что... Вангую появление заражённых клонов репозиториев, нацеленных на ИИ. Вот там есть поле для деятельности. Вайбописатели-то не проверяют, что там ИИ нафигачла, а ИИ ннынче модно в интренет пускать и никаких защит у ИИ нет и быть толком не может.
Если ИИ ищет по ключемым словам, находит репу с трояном, то там можно такого интересного в интрукциях написать - ух!
isden
18.06.2026 09:10Так уже "непонятно что" распространяется и так, легко и просто. Недавно скинули архив с комментом "Загрузите архив в чатбота, рекомендуется ChatGPT Plus или выше". А там внутри... Гигантские скиллы/промпты, код на питоне, куча инструкций. Которые конечно же никто не вычитывал и не проверял (и я это тоже делать не буду).

trig-ger
18.06.2026 09:10Firefox при скачивании на один из двух zip файлов отреагировал, что это вирус. Защитник в Windows 10 6-летней давности (не обновлялась даже) в обоих zip сразу определяет вирус. Так что подхватить вирус, даже скачав и распаковав подобный zip, чуть сложнее, чем кажется.

dintsovaviiki
18.06.2026 09:10Даже VirusTotal тут не показатель, потому что он не всегда корректно ловит поведение архивов внутри цепочки запуска
AliceKwangweith
Да, я тоже заметил с этим луаджитом 3-4 месяца назад репозиторий SpotiFLAC, для скачивания музыки из Spotify, отправил запрос с жалобой - удалили через 3 дня, а тут аж умный человек скрипт написал и нашел аж 10000 таких репозиториев, красава)).
По поведению трояна похоже на ботнет, а вот куда он направлен - предстоит узнать
aPiks
Если речь о spotbye, то это старый репозиторий и прога рабочая. А клонов я поиском не нашел.
Bardakan
не знаю. Я на днях репортил такой репозиторий - удалили в течение пары часов.
Правда там челы додумались в репозиторий с исходниками для ios засунуть вредонос под винду.
А еще например, Brave наотрез отказался выкачивать файл - пришлось искать обходные пути
nodevner
Им даже не важно, о чём сам репозиторий, главное создать больше копий. Я думаю, что с такой скоростью создания копий это делает AI: загружает архив, пишет описание проекта (зачем?) и вставляет ссылку на архив в Readme.md, стиль везде один.
geher
Это абсолютно нормально. Я помню вирус (еще в DOS), который заражал текстовые файлы (он их считал COM файлами, он вообще все считал такими файлами) и не брезговал повторным заражением. Просто влом проверять было.