
CENG 325 - 情報セキュリティとプライバシーの原理
グループメンバー
@canumay @aslihann @ezgigucuyener @mburakdonmez
参考文献
Exploit DB - Apache Tika-server < 1.18 - コマンドインジェクション
Rhino Security Labs - CVE-2018-1335 の悪用: Apache Tika におけるコマンドインジェクション
免責事項
このエクスプロイトコードは、サイバーセキュリティ研究者 David Yesland @Daveysec によって書かれたものであり、教育目的で使用されるべきです。
a. 脆弱性の簡単な説明
b. 脆弱性の悪用方法
脆弱性をトリガーした後に実行できる攻撃の種類: 脆弱性を トリガーすると、簡単にリバースシェルを作成でき、そのシェルを使って Apache Tika サーバーを実行しているユーザーが利用できるすべてのコマンドを 基本的に実行できます。
攻撃者はこの脆弱性を使用して脆弱なシステムをどのように悪用するか: まず、 攻撃者はサーバーが脆弱なバージョンの Apache Tika サーバーを実行しているかどうかを 判断する必要があります。次に、攻撃者は悪意のある HTTP ヘッダーと Jscript コードを生成し、 脆弱な HTTP エンドポイントに PUT リクエストを送信します。これにより、Apache Tika サーバーは自身の機能を使って悪意のあるコードを実行します。
この脆弱性はエクスプロイトキットで使用されていますか: はい、この脆弱性は Metasploit エクスプロイトキットで利用可能です。
a. 脆弱性を悪用するエクスプロイトコードを見つけるか、作成する
b. 脆弱なコードの断片を強調し、なぜ脆弱なのかを説明する
Apache Tika サーバーは、画像に対して OCR を実行するためにリクエスト内でユーザーが提供した値を使用して、実行するコマンドを作成します。 これにより、ユーザーはコマンドを操作して悪意のあるコードを実行できます。 この場合、“config.getTesseractPath()” は “X-Tika-OCRTesseractPath” ヘッダーを取得し、 それをコマンドの先頭に追加します。ユーザーが提供したパスの末尾に “tesseract.exe” 文字列が追加されますが、 ユーザーはパスを ‘ “ ’ (二重引用符) で囲むことで、後続の “tesseract.exe” 文字列を破棄できます。 これにより、ユーザーはサーバー上で任意の実行可能ファイルを実行できます。
作成されたコマンド:
"calc.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l eng -psm 1 txt -c preserve_interword_spaces=0
Windows に組み込まれている CScript.exe はスクリプト言語であり、スクリプトのファイル名を受け取って実行し、 他の引数を無視します。cscript 用に作成されたスクリプトを提供できれば、サーバー上で実行できます。 Apache Tika サーバーは、ボディで提供された画像を受け取り、OCR を実行するために一時ファイルに保存します。 そのため、画像バイナリを送信する代わりに、文字列を直接送信しても、その文字列はバイナリであるかのように保存されます。 ただし、Tika サーバーは jp2 ファイルタイプを除いて、バイナリが画像であるかどうかをチェックし、 jp2 の場合は直接保存されます。これは cscript 実行可能ファイルへの引数として渡されます。 ただし、ファイル拡張子は依然として “.tmp” ですが、“. JScript” または “.vbs” である必要があります。 これを回避するために、ファイル拡張子に関係なく cscript に “JScript” を実行させることができます。 Tika サーバーはまた、“config.getPageSetMode()” をコマンドに渡します。これはユーザーが X-TikaOCRLanguage” ヘッダーで送信したものです。 これを文字列 “//E:Jscript” に変更すると、cscript はスクリプトを ファイル拡張子に関係なく JScript として実行します。最後に、ボディで提供された文字列が 実行されるペイロードとなり、システムシェルへのフルアクセスを得るために別のコンソールを呼び出すこともできます。
最終的に作成されたコマンド:
"cscript.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l //E:Jscript -psm 1 txt -c preserve_interword_spaces=0
Jscript でシェルを呼び出す簡単なペイロード:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c calc.exe');
a. 見つけた、または作成したエクスプロイトコードを実行する:
Apache Tika Server 1.17 がターゲットの仮想マシン内で実行されています。
ホストマシンから IP アドレス “192.168.233.167” でサーバーにアクセスできます。
次に、作成したエクスプロイトコードをペイロード “calc.exe” で実行し、ターゲットマシン内で電卓を起動して、 ターゲットマシン内で任意の悪意のあるコードを実行できることを示しました。さらに、リバースシェルの 機能を使用して、ターゲットマシン上で対話型シェルセッションを作成することもできます。
b. エクスプロイトコードの実行結果は何ですか:
上記で説明したように、このエクスプロイトを使用すると、基本的にターゲットマシン内で電卓プログラムを実行しますが、 リモートコード実行の機能があれば、Apache Tika Server を実行しているユーザーの権限でターゲットマシン上で 任意の操作ができます。たとえば、ユーザーファイルへのアクセス、ユーザーの活動の監視、さらには スクリーンショットの撮影や、ウェブカメラがあれば写真の撮影も可能です。
c. 脆弱性が実際に存在することをどのように確認できますか:
この脆弱性は NIST などの信頼できる情報源によってすでに報告されており、Apache 自身によって確認され、 パッチも適用されています。しかし、それを証明するために、metasploit を使用して別の PoC を行うことができます。
まず、インストールされているバージョンが脆弱なバージョンであることを確認しました。
バージョンを確認した後、正しい IP とポートを使用して metasploit セッションを構成し、 “check” コマンドを実行してターゲットが脆弱かどうかを確認できます。
最後に、“exploit” コマンドを実行してエクスプロイトを開始し、シェルに “dir” と入力して シェルが動作していることを確認できます。ここからの唯一の制限は、Apache Tika サーバーを実行しているユーザーの権限です。