脆弱性

新たなMirai亜種WebSVNのコマンドインジェクション脆弱性(CVE-2021-32305)を標的に

Clock Icon 2 min read

This post is also available in: English (英語)

概要

最近、WebSVN(Subversionリポジトリ閲覧用のオープンソースWebアプリケーション)に影響を与えるコマンドインジェクション脆弱性が公開され、この脆弱性を利用したエクスプロイトが実際に確認されています。この「緊急」のコマンドインジェクション脆弱性は2021年5月に発見されて修正が行われました。PoC(概念実証)が公開されると、その週(2021年6月26日)のうちに攻撃者はこの脆弱性を悪用してDDoSマルウェア「Mirai」の亜種を展開しました。WebSVNをお使いの方は、最新のソフトウェアバージョンにアップグレードすることを強く推奨します。

パロアルトネットワークスの次世代ファイアウォールは、CVE-2021-32305の悪用からお客様を保護し、Cortex XDRはMiraiの亜種を検出して感染を防ぎます。

CVE-2021-32305の根本原因と修正プログラムの解析

ソースコードの閲覧を行う多くのバージョン管理ツール同様、WebSVN でも関連するコード変更箇所を見つけるためにリビジョン履歴を検索することができます。これらの検索リクエストは、PHPで書かれたバックエンドにクエリを送信することで行われます。

search.phpの「search」パラメータには、ユーザーの入力内容が保存されています。バックエンドへのPHPクエリがユーザーからの検索要求を処理してリビジョン履歴にある関連するコードの変更箇所を見つけてきます。
図1 ユーザーの入力内容はsearch.phpの search パラメータから読み込まれる

WebSVN 2.6.1 より前のバージョンでは、シェルコマンドでの使用時にユーザーの検索クエリがエスケープされません。include/svnlook.php内ではgetListSearchという関数が、検索クエリとコマンド引数を連結してシェルコマンドを作成する役割を担っています。

include/svnlook.php内ではgetListSearchという関数が、検索クエリとコマンド引数を連結してシェルコマンドを作成する役割を担っている
図2 SVNコマンドは検索クエリと連結して作成される

最終的には、include/command.php内のrunCommandという関数が、PHPのproc_open関数に渡されることでコマンドが実行されます。この関数のドキュメントには、コマンドパラメータに関する以下の警告が含まれています。

図3 PHPのドキュメント

ユーザーからの入力が適切にエスケープされていないと、検索クエリに特殊文字を含めることでコード実行が可能になります。この脆弱性を修正するため、escapeshellargでユーザーの入力をサニタイズしてから、他のコマンド引数に連結するようにコードが変更されました。

検索クエリに特殊文字が含まれていてもコードの実行が可能にならないよう、escapeshellargでユーザーの入力をサニタイズしてから他のコマンド引数に連結するようにコードが変更することで、脆弱性が修正されている
図4 脆弱性の修正

このほかには、第1引数として文字列の配列を渡すことでproc_openに自動的にコマンドをエスケープ処理させ、クォートさせる解決方法も考えられます。この方法は、より簡潔でメンテナンスが容易と考えられます。ただし既存のコードに大きな変更を加える必要があることや、古いバージョンのPHPとの互換性がないことが、このソリューションが選ばれなかった理由と思われます。

図5 shellコマンドを安全に実行するための仮コード

実際に行われているエクスプロイト

CVE-2021-32305の公開直後、Unit 42のリサーチャーは、このCVEが実際に攻撃者に悪用されている様子を観測しました。攻撃の一例を紹介します。

CVE-2021-32305を悪用した攻撃の例攻撃者はコマンドインジェクションを利用してシステムにマルウェアを感染させるシェルスクリプトをダウンロードします。
図6 HTTPリクエスト

攻撃者はコマンドインジェクションを利用してシステムにマルウェアを感染させるシェルスクリプトをダウンロードします。こういったWebの脆弱性を悪用する場合、対象となる環境の重要情報を攻撃者が把握していないことがあります。たとえばWebサーバーを実行しているオペレーティングシステムやプロセッサアーキテクチャなどの情報です。攻撃の次の段階で使用されるシェルスクリプトは、攻撃者がこの問題を克服する方法を示しています。

このシェルスクリプトは攻撃者が対象となる環境の重要情報を攻撃者は把握していない問題を克服する方法を示している。攻撃者は、対象の環境で使用されている12種類の異なるアーキテクチャを検出するかわりにシンプルにブルートフォースで可能性のあるアーキテクチャのすべてのバイナリを実行しようとしている。
図7 シェルスクリプト

悪意のあるLinuxバイナリが12種類の異なるアーキテクチャ用に提供されています。対象の環境でどれが正しいものかを検出するかわりにブルートフォース(総当り)方式が採用されています。このスクリプトはシンプルに可能性のあるすべてのアーキテクチャのバイナリをダウンロード・実行しようとし、互換性がない場合のエラーは無視します。WebSVNは、多くのOSで動作可能なクロスプラットフォームのPHPアプリケーションですが、この攻撃ではLinuxバイナリのみを使用しています。

マルウェアの分析

このマルウェアを分析すると、分散型サービス拒否(DDoS)攻撃に使用されていることや、コードの一部をボットネットファミリ「Mirai」と共有していることが明らかになりました。実行ファイルサイズを小さくするため、それぞれの実行ファイルは人気オープンソースパッカーのUPXを修正したもので圧縮されています。なおこのパッカーは修正されているので、その分リバースエンジニアリングツールで実行ファイルの自動解凍に成功する可能性は低くなり、分析にはより多くの手作業が必要になります。さらにこのマルウェアは依存関係にあるすべてのものを静的にリンクし、コード内で直接システムコールを行うことで、移植性を持たせています。

マルウェアが実行されると、ポート番号666で継続的にコマンド&コントロール(C2)サーバーへの接続を試みます。接続を確立すると、テキストベースのカスタムTCPプロトコルを使用して通信します。まずC2にその構造を知らせ、オペレーターからの指示を待ちます。

このスクリーンショットは、CVE-2021-32305のエクスプロイトを介して配信されるマルウェアサンプルのC2コマンドを処理するためのメインループを示している
図8 C2コマンド処理のメインループ

このマルウェアファミリの主な目的はDDoS攻撃を行うことで、攻撃の有効性は使用されるネットワークプロトコルやテクニックに依存します。私たちが分析したサンプルには8種類の攻撃があり、それぞれが異なるタイプの標的に対して有効になるように設計されています。次の表はマルウェアオペレーターがそれぞれの攻撃の開始にあたって送信できるコマンドです。

コマンド プロトコル 説明
OVHHEX UDP フランスのクラウドコンピューティング企業OVHがホストするサーバーを攻撃対象とする
UDPBYPASS UDP インターバル時間を計算して細工パケットを送信することによりネットワークの緩和策を回避しようとする
NFOHEX UDP ランダムに生成された16進数データを大量に送りつけることで標的のリソースを枯渇させる
STD UDP あらかじめ定義された3つのペイロードのリストからランダムにパケットを送信する
VSE UDP Valve Source Engineで構築されたゲームサーバーを攻撃対象とする
TCP TCP TCPベースプロトコルに対する汎用の攻撃
SYN TCP TCP接続要求を偽装したSYNパケットを送信する
ACK TCP 肯定応答メッセージを偽装したACKパケットを送信する

表1 DDoSの手法

結論

最近、WebSVNに影響を与えるコマンドインジェクション脆弱性が公開され、この脆弱性を利用したエクスプロイトが実際に確認されています。ある特定の攻撃では、この脆弱性がDDoSマルウェアの展開に利用されています。攻撃者は今後も最新の脆弱性を使って感染デバイス軍を拡張し、DDoS攻撃の強度を高めていくことでしょう。WebSVNをお使いの方は、最新のソフトウェアバージョンにアップグレードすることを強く推奨します。

パロアルトネットワークスの次世代ファイアウォールをご利用中のお客様は以下のサブスクリプションにより保護されています。

Cortex XDRはMirai亜種を検出し感染を防止します。

IoC

75.119.143[.]229
e6f20e73af6cc393dd139b32117a8681e15edfe61c157f3509d1e740184b3d5c
c782f9cdec637503472bc62d25348cefccc3de58244441547f3e2ed9b22c6c93
63c2cae1f3d04d81a4a1dcd773c62d7e9a71cf7e3ae0c5a9f931353e86f11651
3cc3d7d32e8c85e0c594ca5cb2ecfbfba66ebbc1853bcb02c2a39fce9f238dbc
dc7cf2212f09482ac034eb7e9f89ef0cec8bc9532d4fe2db8a880c2e1e4ee8a2
8cc43db17480170fac3213518fe18d52a5648ce04060561d6359d6c589a4321c
b09c85e75f65a9acc4693957caf4b4c56dd808c7d0d657c1bc9f74a1bd772abe
a55a2318e95dcfbe2d2082ee569642034ab05168fa0142ff1009798131b61f52
b43fd19dfeeb89507f9de162e7a727fa6024ca4b1d19cb5c44e53755200f2b66
7dc972346b9f82709bbcaabc30f126984468e60f2b085091471a9796ac4539b9
f4d851908e900d9201597f898cbb4420772a935901f25a77b31fc80e7cbc88b3
889cc2a3e06c5770ff23017aa067cd8a01b8b410e143e9da63542ead7ce484da

追加資料

Unit 42によるMirai関連のリサーチ

Enlarged Image