ハッカーがZyxel GS1900のゼロデイRCE脆弱性を悪用、約1,000台のネットワークスイッチが侵害される

Zyxelは、GS1900シリーズスイッチのWeb管理インターフェースに存在する、認証不要の境界外書き込みの脆弱性を修正しました。CVE-2026-107441として追跡されているこの脆弱性は、細工したHTTPリクエストによって認証前にOSコマンドを実行できるもので、GS1900の10モデルが影響を受けます。

攻撃者はこの脆弱性を悪用して約1,000台のデバイスを侵害し、設定ファイルや認証情報を盗み出しました。Zyxelは10月22日に修正版を公開し、11月3日にセキュリティアドバイザリを公表しています。

GreyNoiseは、中国語圏の攻撃者とみられる「Kapibala」と呼ばれる攻撃グループが、8月17日ごろからこれらのスイッチを悪用していたことを確認しました。侵害されたデバイスは48カ国で996台に上り、被害が特に大きかったのはイタリア、米国、台湾です。

この攻撃者は、デバイスの設定情報、ハッシュ化されたrootの認証情報、ネットワーク情報を収集していました。Zyxel製品に対するこれまでの攻撃も同様の経過をたどっており、攻撃者がUDPポート500経由でZyxelのファイアウォールを攻撃した事例では、IKEv2のコマンドインジェクションが使われました。

Binarlyは、JITTERLYバックドアとそのSIXZUT ring 3ルートキットに関連するインフラを分析する過程で、このエクスプロイトを発見しました。両者は、Acronis TRUがGiteaの脆弱性悪用と結び付けていたものです。

p2.981666[.]xyz:18081のオープンディレクトリには、gs1900_bundle.tar.gzが置かれていました。この中のexp.pyはPyArmorで難読化されており、MIPSベースのスイッチ上の/cgi-bin/dispatcher.cgiを標的にします。

JITTERLYは、MessagePack形式のAES-GCMブロブからC&C設定を復号します。SIXZUTはAES-CTRで保護されています。YARAで検知する際に手掛かりとなる痕跡には/tmp/.X11-unix.lkのパスがあり、configdという名前のプロセスを隠蔽します。

この種のルートキットは、eBPFとカーネルモジュールで身を隠すVoidLinkに似ており、秘匿されたICMPベースのコマンド&コントロール(C2)通信路も隠します。

根本原因はweb_util_initParaPairsにあります。リクエストパラメータは、0x23000バイトの.bssバッファであるreqParametersにコピーされます。このバッファは、1,024バイトのスロット140個に分割されています。

コードは各キーと値のペアのサイズをチェックしておらず、符号付きのグローバルカウンタであるcountも検証していません。140番目のスロットに1,024バイトの値を入れると、隣接するcount変数にあふれ出て、その値を上書きします。

破損した値に1,024を掛けると符号付き整数オーバーフローが発生します。その結果、次の書き込みがバッファより前の領域に着地し、プロセスメモリへの任意書き込みが可能になります。

このエクスプロイトには2つのモードがあります。GOTモードは確定的で、1回のリクエストで成立します。Global Offset TableのstrcmpエントリをSystem()のアドレスで上書きする方式です。

web_util_paramVal_retが次にstrcmpを呼び出すと、攻撃者のコマンドを保持する第1パラメータが、system()の引数として実行されます。一方のスタックモードは、保存されたレジスタを上書きし、リターン指向プログラミング(ROP)でuClibcのガジェット(move $t9, $s1; jalr $t9)を連鎖させます。

こちらはASLRのブルートフォースが必要で、平均で約2,048回の試行を要します。VERSION_DBテーブルには、ファームウェア2.10(AAHL.0)C0から2.90(AAHL.2)C0までのハードコードされたアドレスが格納されています。2.90(AAHL.2)C0は、ZyxelがCVE-2026-7273に対応して修正したビルドです。

このテーブルから、パッチの不備が明らかになりました。Binarlyは9月28日、CVE-2026-7273に対する10個の修正がいずれも依然として悪用可能であることを確認しています。6月の更新では、sprintfからsnprintfへの置き換えとカウンタのチェックが追加されました。

しかし、等価性テストが実行される前にcountがすでに破損していたため、これらのチェックは機能しませんでした。Zyxelはこの問題を別件として扱いました。このエクスプロイトはパラメータ長の検証欠如も悪用しており、CVE-2026-7273の説明がグローバルバッファへの書き込みではなくスタックオーバーフローに言及していたためです。

Binarlyは9月29日にこの脆弱性を報告し、Zyxelは10月11日にCVE-2026-107441を確保しました。.3ファームウェアでは、コピーを511バイトに制限するweb_util_paramCopyが追加され、コピーのたびにカウンタが検証されるようになっています。

管理者は、10月22日以降のファームウェアを適用し、Web管理インターフェースをインターネットに公開しないようにしてください。あわせて、初期設定の認証情報も変更する必要があります。GreyNoiseによると、侵害されたスイッチのうち564台が、いまだに初期設定の認証情報を使用していました。

Zyxelは以前にも、CPE製品とルーター製品におけるコマンドインジェクションについてアドバイザリを出しており、CGIの入力処理の欠陥という同様の傾向が見られます。

16,000以上のSOCチームがANY.RUNを活用し、脅威調査を効率化して手作業を削減しています。チームで試してみる

翻訳元: https://cyberpress.org/hackers-exploit-zyxel-gs1900-zero-day-rce-flaw/

本記事は cyberpress.org の記事を翻訳・要約したものです。