新たに発見されたnpmパッケージ「fezbox」は、QRコードを利用して攻撃者のサーバーからCookie窃取型マルウェアを取得します。
このパッケージはユーティリティライブラリを装い、この革新的なステガノグラフィ技術を活用して、侵害されたマシンからユーザー認証情報などの機密データを収集します。
QRコードの新たな用途が発見される
QRコードのような2次元バーコードは、従来は人間向けにマーケティングコンテンツやリンク共有のために設計されてきましたが、攻撃者はQRコード自体の中に悪意あるコードを隠すという新たな用途を見出しました。
今週、Socket脅威リサーチチームが、世界最大のJavaScriptおよびNode.js開発者向けオープンソースレジストリnpmjs.comに公開された悪意あるパッケージ「fezbox」を特定しました。
この不正パッケージには、QRコードを含むJPG画像を取得するための隠された命令が含まれており、さらに解析して攻撃の第2段階となる難読化されたペイロードを実行することができます。
執筆時点で、このパッケージはnpmjs.com上で少なくとも327回ダウンロードされており、レジストリ管理者によって削除されました。

検知回避のため逆順で保存された悪意あるURL
BleepingComputerは、悪意あるペイロードの主な内容がパッケージのdist/fezbox.cjsファイル(バージョン1.3.0を例とする)に存在することを確認しました。
「コード自体はファイル内で難読化されていますが、整形すると読みやすくなります」と、Socketの脅威アナリストであるOlivia Brown氏は説明しています。
Brown氏によると、コード内の条件分岐はアプリケーションが開発環境で実行されているかどうかを確認しています。
「これは通常、ステルス戦術です。攻撃者は仮想環境や本番環境以外で発覚するリスクを避けたいので、エクスプロイトがいつどのように実行されるかにガードレールを設けることがよくあります」と研究者は述べています。
「しかし、そうでない場合は、120秒後に逆順の文字列で示されたQRコードからコードを解析して実行します…」

上記のスクリーンショットに表示されている文字列を逆にすると、次のようになります:
hxxps://res[.]cloudinary[.]com/dhuenbqsq/image/upload/v1755767716/b52c81c176720f07f702218b1bdc7eff_h7f6pn.jpg
URLを逆順で保存するのは、攻撃者が静的解析ツールによる検知(「http(s)://」で始まるURLの検出)を回避するためのステルス技術であるとBrown氏は説明しています。
このURLによって表示されるQRコードは以下の通りです:

マーケティングやビジネスの現場でよく見かけるQRコードとは異なり、このコードは非常に高密度で、通常よりもはるかに多くのデータが詰め込まれています。実際、BleepingComputerのテストでは、標準的なスマートフォンのカメラでは正確に読み取ることができませんでした。攻撃者は、このバーコードをパッケージが解析できる難読化コードを運ぶために特別に設計しています。
研究者によると、この難読化されたペイロードはdocument.cookieを使ってCookieを読み取ります。
「その後、ユーザー名とパスワードを取得しますが、ここでも文字列を逆順にする(drowssapがpasswordになる)難読化手法が使われています。」
「盗まれたCookieにユーザー名とパスワードの両方が含まれていれば、HTTPSのPOSTリクエストでhttps://my-nest-app-production[.]up[.]railway[.]app/usersに情報を送信します。そうでなければ、何もせず静かに終了します。」
これまでにも、偽のアンケートや偽造「駐車違反切符」など、ソーシャルエンジニアリング詐欺でQRコードが使われる事例は数多く見られました。しかし、これらは人間がコードをスキャンし、フィッシングサイトなどに誘導されるという人手が必要でした。
Socketによる今週の発見は、QRコードの新たな側面を示しています。侵害されたマシンがQRコードを使ってC2(コマンド&コントロール)サーバーと通信でき、プロキシやネットワークセキュリティツールからは単なる画像トラフィックにしか見えない可能性があるのです。
従来のステガノグラフィは、画像やメディアファイル、メタデータの中に悪意あるコードを隠すことが一般的でしたが、今回の手法はさらに一歩進んでおり、攻撃者が利用可能なあらゆる媒体を悪用することを示しています。