2025/10/10 CyberSecurityNews — 悪意の npm パッケージ 175 個を介して展開される高度なフィッシング・キャンペーンを、Socket の脅威調査チームが発見した。これらのパッケージは、合計で 26,000 回以上もダウンロードされている。すべての悪意のパッケージに共通するアーティファクトに基づき、このキャンペーンは Beamglea と名付けられた。その手法は、npm の公開レジストリと unpkg.com CDN を悪用して、リダイレクト・スクリプトをホストするという、新しいものである。世界中の 135 社以上の製造業/テクノロジー/エネルギー企業などを標的としているという。

これらのパッケージ自体は、インストール時に悪意のコードを実行しないが、npm エコシステムを認証情報収集のための無料ホスティング・インフラとして悪用するという、きわめて巧妙な手法を用いている。
これらのパッケージは “redirect-[a-z0-9]{6}” というパターンに従ってランダムに命名されているため、開発者が誤ってインストールする可能性は低い。ただし、ダウンロード数が多いことから、セキュリティ研究者/自動スキャナー/CDN インフラにより、公開後のパッケージが分析されるというケースが想定される。
この脅威アクターは、キャンペーン全体を自動化するための包括的な Python ツールを開発し、注文書やプロジェクト文書を装いながら、被害者に適合させた HTML フィッシング・ルアーの作成を可能にしている。
Beamglea の由来と意味は不明であるが、攻撃者が使用したコードネームまたは内部情報という可能性がある。
2025年9月24日にフィッシング・インフラを発見した Safety の Paul McCarty の初期調査結果に基づき、Socket.dev のアナリストが特定したのは、このキャンペーンを通常のスキャン操作の一環だというものだった。
研究者たちが指摘するのは、このキャンペーンに関連するパッケージの大半が、この記事の執筆時点でまだ稼働中だという点だ。彼らは、脅威アクターのアカウント停止と併せて、npm レジストリからの削除を求める嘆願書を提出した。
しかし、このキャンペーンにおける技術的実装は、驚くほど高度な技術を示しており、サプライチェーン悪用手法の懸念すべき進化を示している。
今回の情報が開示される以前に、Beamglea という用語はオンラインで未知の存在だったが、複数の重要インフラ・セクターの組織を標的とする、このキャンペーンを追跡するための有効な識別子となってきた。
自動パッケージ生成インフラストラクチャ
この脅威アクターは、 “redirect_generator.py” スクリプトと PyInstaller でコンパイルされた実行ファイルを利用して、高度な Python 自動化技術を開発し、運用を効率化している。それにより、悪意の展開が容易になっている。
この自動化プロセスは、プロフェッショナル・レベルの運用セキュリティ計画と、体系的な被害者ターゲティング能力を実証している。
中核となる自動化が受け取るものは、”beamglea_template.js” という名前の JavaScript テンプレートファイル/被害者のメールアドレス/フィッシング URL という3つの入力である。
システムが処理する、これらのコンポーネントにより、npm 認証検証/テンプレート処理/パッケージ作成/公開/HTML ルアー生成へと進む、5段階のワークフローが成立する。
パッケージ名生成に関するランダム化の機能は、小文字と数字で構成される6文字のサフィックスを用いて一意の識別子を作成し、認識可能なリダイレクト・プレフィックス・パターンに従いながら、各キャンペーンの識別性を維持する。
それぞれのパッケージに埋め込まれた JavaScript ペイロードは、驚くほどシンプルでありながら効果的である。各 “beamglea.js” ファイルには、被害者のメールアドレスを URL フラグメントとして追加する processAndRedirect() 関数が含まれている。この手法により、フラグメントが “#” 記号の後に表示されるため、通常のサーバ・アクセスログには表示されないという性質を利用している。
この手法では、ログイン・フォームに被害者のメールアドレスが事前に入力されるため、フィッシング・ページが正当性を演じることになる。
def generate_random_package_name(prefix="redirect-"):
# ランダムな6文字のサフィックスを生成
suffix = ''.join(random.choices(string.ascii_lowercase + string.Digits, k=6))
return prefix + suffix
# テンプレート処理により、プレースホルダーが被害者固有のデータに置き換えられます
template_js = load_template('beamglea_template.js')
final_js = template_js.replace("{{EMAIL}}", email).replace("{{URL}}", redirect_url)
with open("beamglea.js", "w", encoding="utf-8") as f:
f.write(final_js)
この自動化の機能は、正規の注文書/技術仕様書/プロジェクト文書を模倣するファイル名を用いて、特定のビジネス文書のテーマに基づいた HTML ルアーを生成する。この仕組みは、疑いを回避するために設計されている。
すべての HTML ファイルのメタタグには、キャンペーン識別子 nb830r6x が含まれているため、175 個のパッケージに分散された 630 個以上のルアーに対して、一貫した追跡が可能である。
エコシステムの信頼モデルを悪用する、新たなフィッシング・キャンペーン Beamglea が検出されました。攻撃者は npm レジストリと unpkg.com CDN を静的ホスティングとして悪用し、テンプレート化した redirect スクリプトで個別のフィッシングページを自動生成しています。自動化による大量パッケージ公開と、匿名化された命名、URL フラグメントを使ったログ回避が組み合わさり、検出や追跡が難しくなっていると、この記事は指摘しています。ご利用のチームは、ご注意ください。よろしければ、npm で検索も、ご参照ください。
.webp)
You must be logged in to post a comment.