世界を動かす技術を、日本語で。

1万件のGitHubリポジトリでトロイの木馬マルウェアを配布していることを発見しました

2026年6月18日原文(orchidfiles.com)

概要

  • 2026年6月18日、GitHub上で大規模なマルウェア配布キャンペーンを発見
  • 10,000件以上のリポジトリがTrojanマルウェアを配布していることを特定
  • これらのリポジトリは異なる名前・コントリビューターを持ち、フォークではない
  • 独自のパターンに基づくスクリプトで検出を実施
  • GitHubの対応遅延やAPI制限、攻撃手法の考察

GitHub上の大規模マルウェア配布キャンペーン発見

  • 2026年6月18日、 GitHub上で大量のマルウェア配布リポジトリ を発見
  • 10,000件以上 のリポジトリがTrojanマルウェアを配布
  • すべて異なる コントリビューター、異なる リポジトリ名フォーク ではない独立したリポジトリ
  • 共通パターン: READMEにzipアーカイブへのリンク 追加、コミット履歴のコピー、数時間ごとにコミットの削除と再追加
  • 自作スクリプト でこれらのリポジトリを検出

発見の経緯

  • Googleで自身のプロジェクト名を検索した際、 他者によるコピーリポジトリ を発見
    • コミット履歴やコントリビューターもコピーされている
    • READMEに zipアーカイブへのリンク が追加されていた
  • GitHubでタグ検索中にも 同様のリポジトリ を発見
  • これらのリポジトリは 数時間おきにコミットを削除し、同じ内容で再コミット
  • GitHubサポートに削除依頼 を送るも2週間以上反応なし
  • 1ヶ月後、ようやくGitHub側で対応・削除

マルウェアの実態

  • zipアーカイブには以下の4ファイルが含まれる
    • Application.cmd または Launcher.cmd
    • loader.exe, luajit.exe, もしくは別名のexeファイル
    • ランダムな名前のcsoまたはtxtファイル
    • lua51.dll
  • VirusTotal でアーカイブ内のexeを直接スキャンすると Trojan検出
  • アーカイブのリンクのみではウイルス検出されない

検出パターンの確立とスクリプト開発

  • 共通パターンを抽出し、 検出スクリプト を作成
    • 数時間ごとにコミット削除・再コミット
    • READMEのみが更新
    • READMEにzipアーカイブへのリンク
    • 他リポジトリのコミット履歴をコピー
    • 新規リポジトリ(フォークではない)
    • コントリビューター・リポジトリ名が全て異なる
  • GitHub API制限 (1トークンあたり1時間5,000リクエスト)により、全リポジトリの網羅は困難
  • gharchive サービスを利用し、直近数日間のコミットプッシュイベントを抽出
    • 1日あたり1,600万件のコミットプッシュ、うち数時間ごとに更新されるリポジトリは3,000件
  • 追加フィルター
    • ユーザーによるコミットのみ
    • 最終コミットと前回コミットの間隔が1ヶ月以上
    • 複数コントリビューター
  • 最終的に 14件 のみが完全一致
    • 当初の「数時間ごと更新」フィルターが厳しすぎたと判明
    • フィルターを「24時間以内に1〜24回更新」に変更
    • 40,000件 の候補から 10,000件 がパターンに一致

GitHubの対応と現状

  • これらのリポジトリは 数ヶ月〜1年以上前から存在
  • GitHubは 自動検出・自動削除 を行っていなかった
  • スクリプトで検出したリストを GitHub上で公開
  • その後、 GitHubが順次削除を開始 し、大半が削除済み

攻撃者の手法と目的の考察

  • 新規リポジトリのみをクローン し、検索エンジンの上位表示を狙う
  • コミットの削除と再コミット でGitHubのセキュリティアルゴリズムの回避を試みる
  • コミット履歴とコントリビューターのコピー で信頼性を偽装
  • 人気リポジトリではなく新規を狙う理由 は、低ボリューム検索ワードでの上位表示とタグ経由の流入を狙うため
  • READMEのみを更新、「Update README.md」という同一コミット名を使うのも自動検出回避の一環と推測

残された課題と疑問

  • なぜ GitHubの自動検出 が機能しなかったのか
  • exeファイルの正体 ・挙動の詳細
  • 実際の 被害規模 やダウンロード数
  • さらなる 攻撃パターンの進化 の可能性

結論と提言

  • GitHub API制限 のため、個人では全リポジトリの網羅的監視は不可能
  • GitHub運営は 全リポジトリの静的解析・ウイルススキャン が可能な立場
  • 今回は 個別通報を断念、セキュリティチームへの直接連絡を推奨
  • 2024年4月には 109件の同様事例 を報告した記事も存在
  • GitHubが削除対応を開始 し、現在はほとんどのリポジトリが削除済み

参考リンク・スクリプト

  • Git Malware Finder(GitHubリポジトリ検出スクリプト)
  • How 109 Fake GitHub Repositories Delivered SmartLoader and StealC(2024年4月記事)

Hackerたちの意見

何回か、すごくよくできた詐欺の手口(暗号通貨のマネーロンダリングシステムやフィッシング詐欺のウェブプラットフォーム)を見つけたことがあるんだけど、詳しく調べてみると、結局どうしたらいいのかわからなくなって無力感を感じるんだよね。

これがコミュニティの役割だよ!個人がみんなのためにヒーローになって問題を解決することはできない。でも、私たちができるのは、少しでも助けたり洞察を提供したりして、その問題を他の人に渡すことだよ。結局、OPがやったことと同じことになるかもしれないね:あなたが言ってた「深い」リサーチと、Hacker Newsや他の場所にちょっとした投稿をすること。最終的に何も起こらなくても、少なくとも試みたことにはなるよ。

ここで見つけたサンプルをGenus Codesにアップロードしたよ(アカウントが必要):https://genuscodes.com/results/7ad4b911d05a12f91ab27ba3baa35... ディスコトロイのファミリーに関連しているみたいで、悪意のあるファイルと50%の一致があるね。https://genuscodes.com/results/eddbc29db4677e00c1a901aadbadb... それと、こちらとも50%の一致があるよ。https://genuscodes.com/results/fdb6cff68a2a8c08779d64a7cf61d... Virustotalのリンクもあるよ: https://www.virustotal.com/gui/file/fdb6cff68a2a8c08779d64a7...

オープンソースソフトウェアはソースが公開されてるから悪いことはできないっていう原則は、いろんな理由で成り立たなくなってると思う。コードをチェックする時間なんて誰にもないし、バイナリと一致してるか確認するなんて無理だしね。それに、GitHubは多くの人が使うソフトウェアの配布ハブになってるけど、使ってるソフトウェアを監査する能力や興味がある人なんてほとんどいないから。

オープンソースソフトウェアはソースが公開されてるから悪いことはできないっていう原則は、いろんな理由で成り立たなくなってると思う そんな原則に生きてたの?それはヤバいよ。コードが読めるからって悪いことがないわけじゃないじゃん。FOSSのベテランたちにウェブフォーラムで「教えられた」ことは、誰でもアップロードできるサードパーティのウェブサイトにあるソフトウェアはウイルスやマルウェアでいっぱいだってことだし、これは2000年代初頭の話だよ。今でもこの考え方を支持してる人は多いと思うけど、もっとリスクが高いのにね。

それは違うよ。統計が現実の「尺度」を提供するなら、俺の予想では「OSが悪さをしている」ってのは0.005%から0.007%の間に入ると思う。いずれにせよ、抽出された値と比べたら…何もないに等しい。

記事が説明している問題はオープンソースとはあまり関係ないみたい。GitHubのリポジトリには、READMEにコンパイルされたバイナリが入ったzipファイルへのリンクが追加されているものがあった。GitHubはキュレーションされたソフトウェアリポジトリじゃないからね。見知らぬ人がフォーラムでバイナリへのリンクを貼るのと大して変わらないよ。(知らない人のバイナリをフォーラムのスレッドで実行することに全く気にしないコミュニティもあるけど、俺はおすすめしない。)

検証できるコードとできないコードの選択であって、マルウェアがあるコードとないコードの選択じゃないよ。

皮肉なことに、AIの約束の一つは「十分な目」があること。でも、その目はエクスプロイトを生成するためにも使われる可能性があるんだよね。

これは大きくて有名なリポジトリに対してますます当てはまるようになってきてると思う。メンテナーたちは怪しいことをすることで失うものが多いからね。例えば、Reactチームがそんなことをして逃げられるとは思えない。

これのどこがオープンソースなの? - Application.cmd または Launcher.cmd - loader.exe または luajit.exe または another_name.exe - random_name.cso または random_name.txt - lua51.dll すべてのコンテンツはバイナリまたはランチャースクリプトだよ。

「オープンソースソフトウェアはソースがオープンだから悪いことはできない」という原則には、ちょっと疑問を感じるね。オープンソースの原則を誤解してるんじゃない? 自分が実行しているコードを確認できる方が、クローズドでプロプライエタリなものよりもいいと思う。FOSSは監査できるけど、プロプライエタリソフトウェアにはそれができないからね。

Hacker Newsで議論の続きを見る