109 Fake GitHub Repos Spread SmartLoader, StealC Malware
2026/04/22 gbhackers — 偽の GitHub リポジトリを用いる連携型のマルウェア・オペレーションが、 LuaJIT ベースの SmartLoader と後続の StealC Infostealer を配布していることが確認された。悪意のリポジトリは 109 件であり、そのオペレーションに用いられるアカウントは 103 件である。このキャンペーンのコア要素は、オープンソース・コードのクローン/難読化された Lua ステージ/ブロックチェーン・ベースの C2 解決の組み合わせであり、検知回避とインフラの機動性を維持している。

この攻撃者は GitHub Releases を利用せず、リポジトリ内部の深層に ZIP アーカイブを埋め込み、README を書き換えることで、隠されたダウンロードへとユーザーを誘導する。
2026年04月12日の時点で明らかになったのは、少なくとも 103 の GitHub アカウントにまたがる 109 件の悪意のリポジトリが、同一のパターンに従っていることだ。それが示すのは、単なる模倣ではなく、スケールされた自動化エコシステムの存在である。
この活動は短くとも 7 週間にわたり継続しており、2026年04月初旬まで新規リポジトリが作成され続けていたことが、ZIP のタイムスタンプ/PE コンパイル時刻/コミット履歴の分析により確認されている。
GitHub 上の正規セキュリティ・プロジェクトをトロイ化したクローンの発見により、このオペレーションの存在が明らかになった。攻撃者は、ソースツリー全体をコピーしながら配布の経路を改変している。
複数アカウントが並行して、複数の悪意のプロジェクトをホストし、短い時間の中に更新活動を集約していることが観測されている。そこから示唆されるのは、ルアーやリンクを一括で更新できる集中型ツールの存在である。
インフラの再利用/一貫したステージ構造/統一された SmartLoader の挙動は、単一オペレータまたは高度に連携したグループの存在を示す。
偽 GitHub リポジトリ上のルアー
一連のルアーが悪用するのは、検索における可視性と人気オープンソースツールに対するユーザーの信頼である。人気上昇中のリポジトリを新規アカウントでクローンし、ファイル名およびコードを維持することで、正規のリポジトリに見せかける。

それぞれの README は大幅に改変されている。詳細なインストール手順や技術説明は削除され、”shields.io” 形式の Download バッジやカラーボタンが配置されている。それらすべてから誘導される先は、同一の埋め込み ZIP パスとなる。
リポジトリの説明やトピックも調整され、無関係な SEO キーワードが含まれる場合もあり、GitHub 検索結果で正規リポジトリと並ぶようにデザインされている。
埋め込みアーカイブは、通常のビルド成果物に見えるパス (例:project-name-version.zip) に配置され、リポジトリ構造に自然に溶け込んでいる。

これまでに説明したように、正規に見えるコード/強いダウンロード誘導/埋め込み ZIP の組み合わせにより、開発者やセキュリティ研究者を標的とする、効果的なソーシャルエンジニアリング経路が形成される。
それぞれの悪意の ZIP には、通常で 3〜4 ファイルが含まれる。具体的に言うと、1 行のバッチランチャ/名前変更された LuaJIT 2.1.0-beta3 GUI 実行ファイル/各種の lua51.dll に加えて、”.txt” または “.log” 名で保存される難読化 Lua スクリプトで構成されている。
上記のバッチファイルは、Windows の “start” コマンドを使用し GUI サブシステム・バイナリを起動するため、コンソール・ウィンドウには何も表示されない。使用されるファイル名は loader.exe/unit.exe/boot.exe/java.exe などであるが、実行モデルは共通している。
Lua ペイロードは、単一行の Prometheus 難読化 SmartLoader スクリプトであり、サイズは約 300 KB である。そこで用いられる、算術マスク定数/エンコード文字列/ランダム識別子/VM 型ディスパッチャにより解析を困難にしている。
SmartLoader は、LuaJIT の FFI を用いて Windows 構造および API を宣言する。それにより実行されるのは、コンソール非表示化/アンチデバッグ/ホスト識別/GDI によるスクリーンショットの取得などであり、後続の攻撃のための準備が整えられる。
さらに、PE 解析構造およびスレッド生成機構を定義し、追加 PE ペイロードをメモリへとロードするため、ディスクには痕跡が残されない。
ブロックチェーン・ベース C2 と StealC 配布
SmartLoader は、C2 エンドポイントをハードコードせず、Polygon Smart Contract を JSON-RPC eth_call 経由で “polygon.drpc.org” に問い合わせる。その際に、固定 “contract” アドレスおよび “selector” を デッドドロップ・リゾルバ (Dead Drop Resolver) として悪用する。
この手法 により、バイナリを更新することなく、on-chain データを変更するだけで、インフラのローテーションが可能になる。

“contract” は、カレント C2 URL を含むエンコード文字列を返す。この文字列をデコードするローダにより、単一 /24 ブロック内の bare-IP HTTP エンドポイントへの接続が確立される。
サーバが解決された後に SmartLoader は、”/api/<victim_id>” へ向けて “multipart/form-data” POST を送信し、ホスト情報およびスクリーン・ショットなどの収集データを送信する。
レスポンスに含まれる暗号化された “loader” 命令および “tasks” リストが、マルウェアによりメモリ内で復号され実行される。タスクの完了は、”POST /task/<victim_id>” により報告され、通常は HTTP 204 が返される。
それと並行して SmartLoader は、攻撃者が管理する GitHub リポジトリへ接続し、暗号化された blob を復号し、冗長な Lua ステージと圧縮された StealC PE を生成する。続いて SmartLoader の内蔵 PE ローダにより、それらがメモリ上で実行される。

永続化の維持は、2 つのスケジュール・タスクにより行われる。それらは、音声管理ツールや Office コンポーネントなどの名称を装い、%LOCALAPPDATA% 配下のバイナリおよび Lua ステージを参照する。
一方のタスクは、キャッシュされた Lua ステージを実行して GitHub リポジトリ削除に耐性を持ち、もう一方のタスクは、新規ステージをダウンロードしてローカル削除からの復旧を行う。
検知および防御
防御側は、以下の高シグナル挙動を監視すべきである:
- バッチファイルから起動される未署名 LuaJIT バイナリ (.txt/.log 引数付き)
- %TEMP% または %LOCALAPPDATA% からの Lua runtime/lua51.dll ロード
- ブラウザ以外からの Polygon JSON-RPC 通信
- SmartLoader 特有の eth_call パターン
予防策としては以下が有効である:
- GitHub ソースの厳格な検証
- ユーザーディレクトリからの未署名インタープリタ実行のブロック
- GitHub raw 通信の監視
- 非開発環境からのブロックチェーン RPC エンドポイントアクセス制限
訳者後書:開発者が日常的に利用する GitHub を舞台にした、非常に巧妙で大規模なマルウェア拡散の手口を紹介する記事です。この攻撃が拡大した根本的な原因は、攻撃者が 100 を超えるアカウントを使い、正規の人気リポジトリをコピー (クローン) して信頼を悪用した点にあります。さらに、ダウンロード先を GitHub 本体の正規の機能ではなく、リポジトリの奥深くに隠した ZIP ファイルへ誘導し、その中身も LuaJIT という軽量なプログラム実行環境を悪用することで、一般的なセキュリティ・ソフトの検知を巧みに回避しています。また、通信先 (C2 サーバ) の情報をブロックチェーン上に隠すことで、インフラを次々と切り替え、追跡を困難にしているのも特徴です。GitHub ユーザーは、ご注意ください。よろしければ、GitHub での検索結果も、ご参照ください。
You must be logged in to post a comment.