セキュリティリサーチャのMichael Stepankin氏によって、全文検索プラットフォーム「Apache Solr」の脆弱性「CVE-2019-0192」が報告されました。この脆弱性は、信頼できないデータのデシリアライゼーションに関する深刻度「critical」の脆弱性です。トレンドマイクロは、想定される攻撃について理解を深めるために、公開されている概念実証(Proof of Concept、PoC)を使用した検証を実施しました。
CVE-2019-0192の利用に成功すると、攻撃者はApache Solrサーバで遠隔から任意のコードを実行することが可能になります。例えば、認証されていない攻撃者は、「Config API」に特別に細工したHTTPリクエストを送信することによりこの脆弱性を利用することが可能です。Config APIは、Apache Solrのユーザが設定ファイル「solrconfig.xml」を操作するために使用可能なAPIです。
CVE-2019-0192の影響を受けるバージョンは、Apache Solr 5.0.0から5.5.5および6.0.0から6.6.5です。この脆弱性に対処する修正プログラムは2019年3月7日に公開されています。
■「Apache Solr」とは
Apache Solrは、Javaの全文検索エンジンライブラリ「Lucene」に基づいて構築されたオープンソースの企業向け検索プラットフォームです。企業向け検索プラットフォームの中で約34%の市場シェアを持つと言われており、多くの企業で使用されています。
Apache Solrはスケール可能な設計となっており、さまざまな文書、Webサイト、データを対象に、インデックスとクエリの作成、およびマッピングを行うことが可能です。また、関連するコンテンツのレコメンデーション、テキスト検索、検索文字列のハイライト表示、データベースの統合、WordやPDFのような文書の処理、JSON(JavaScript Object Notation)形式に対応したREST API(Representational State Transfer Application Programming Interface)をサポートしています。このAPIにより、Java以外のシステムやプログラミング言語と統合することが可能です。Apache Solrは8983番ポートを使用します。
■脆弱性「CVE-2019-0192」を利用する攻撃の概要
CVE-2019-0192はConfig APIに対するリクエストの不十分な検証に起因します。これにより、Apache Solrのユーザはsolrconfig.xmlを設定し、リクエストをさまざまなハンドラにマッピングすることでApach Solrの挙動を操作することが可能になります。例えば、solrconfig.xmlに設定されたパラメータは、検索リクエストやデータを処理、管理および取得する方法を定義します。
Apache SolrはJavaで記述されており、オブジェクトをシリアライズすることが可能です。つまり、オブジェクトはネットワークを通して転送するためにバイト列に変換され、バイト列を受け取ったJava仮想マシン(JVM)はそれをデシリアライズして使用します。
Config APIを使用することにより、HTTP POSTリクエストを介して、Javaアプリケーションを管理する「Java Management Extensions(JMX)」サーバを設定することが可能です。攻撃者は、遠隔から任意の項目を監視する「Remote Method Invocation(RMI)」サーバを指定し、CVE-2019-0192を利用してSolrサーバ上で遠隔からコードを実行します。
■「CVE-2019-0192」を利用する攻撃の仕組み
攻撃者は図1のようなコマンドを実行し不正なRMIサーバを開始します。この例では、「JRMPListener」クラスが指定された「ysoserial」のペイロードに埋め込まれたコマンド「touch /tmp/pwn.txt」が脆弱なApache Solr上で実行されます。ysoserialは、安全でないデシリアライゼーションの脆弱性を利用するペイロードを作成するためのツールです。
図1:不正なRMIサーバを開始するコマンド
次に、攻撃者は遠隔からJMXサーバを設定するために図2のようなPOSTリクエストを送信します。
図2:JMXサーバを設定するPOSTリクエスト
このJMXにより、遠隔のクライアントからJVMに接続し、実行中アプリケーションの管理および監視を行うことが可能になります。アプリケーションの管理は、管理対象のリソースを表すManaged Beans(MBeans)を介して行われます。Apache Solrを利用する開発者、プログラマおよびユーザは、MBeansを通して実行中アプリケーションの内部動作にアクセスし管理します。MBeansにはJava RMIを介してさまざまなプロトコルでアクセスすることが可能です。サーバ上のJMX/RMIインターフェイスを使用する場合、ユーザはJMXService のURL(service:jmx:rmi:///jndi/rmi://<対象システム>:<ポート番号>/jmxrmi)を作成してアクセスすることが可能です。
図3は、Config APIにJSONオブジェクト「set-property」を送信してJMXService URL(jmx.serviceUrl)を遠隔から設定するPOSTリクエストです。
図3:遠隔からJMXServiceを設定するPOSTリクエスト
このPOSTリクエストに対するレスポンスは、ボディに「undeclared checked exception; nested exception is」という文字列を含むステータスコード500番のエラーとなります。
図4:500番エラー
不適切な検証を利用することで、このjmx.serviceUrlに攻撃者が管理するJMRPリスナーを指定することが可能です。JMRPリスナーは、通常、発生したイベントや条件を通知するために使用されます。これにより、攻撃者は脆弱なApache Solrに不正なJMRPリスナーとのRMI接続を開始させます。この時、Apache Solrは、不正なRMIサーバとの接続を確立するために3ウェイハンドシェイクを行います。
攻撃者はこれを利用し、図4のようなシリアライズした不正なオブジェクトを送信することで、脆弱なApache Solr上で任意のコードを実行することが可能です。
図5:CVE-2019-0192を利用する攻撃のデータ送信
■被害に遭わないためには
Apache Solrは、修正プログラムを適用するか7.0以降のバージョンに更新することを勧告しています。Config APIを使用していない場合、Config APIを無効化または制限することも推奨されます。ネットワークをプロアクティブに監視し、Apache Solrがインストールされたホストで実行されるおそれのある異常なトラフィックを検出することも有効です。
Apache Solrを管理する開発者、プログラマ、そしてシステム管理者は、設計段階からセキュリティの仕組みを実装し、最小権限の原則や多層的な防御によってこの脆弱性を利用する脅威に対処してください。
■トレンドマイクロの対策
サーバ向け総合セキュリティ製品「Trend Micro Deep Security™」以下の DPIルールによってこの脆弱性を利用する脅威から保護されています
- 1009601 – Apache Solr Remote Code Execution Vulnerability (CVE-2019-0192)
ネットワーク脅威防御ソリューション「TippingPoint」では、以下のMainlineDV filterにより今回の脅威をブロックします。
- 313798 – HTTP: Apache Solr Java Unserialized Remote Code Execution Vulnerability
参考記事:
- 「CVE-2019-0192: Mitigating Unsecure Deserialization in Apache Solr」
By: Santosh Subramanya (Vulnerability Researcher)
翻訳: 澤山 高士(Core Technology Marketing, TrendLabs)