Oracle WebLogic Server のWLS Security に関する脆弱性(CVE-2017-10271)について
10月にOracle WebLogicはパッチが出てましたが、その時に修正された脆弱性の攻撃コードが先週末あたりに公開されました。
実際に攻撃も来ているようで、探すと中国語での解説記事をちらほら見かけます。 morihi-soc 氏のハニーポットでも攻撃が観測されているそうです。
WOWHoneypot で WebLogic の WLS Security の脆弱性(CVE-2017-10271)を狙った攻撃を検知してる。コインマイニングするプログラムのダウンロード&実行が目的みたい。検体解析結果→ https://t.co/CAdcVLUski
— morihi-soc@C93→1日目(金) 東3キ-45b (@morihi_soc) 2017年12月24日
CVE-2017-10271について
JVN(JVNDB-2017-008734 - JVN iPedia - 脆弱性対策情報データベース)によると、脆弱性の内容は以下のようになっています。
概要
Oracle Fusion Middleware の Oracle WebLogic Server には、WLS Security に関する処理に不備があるため、機密性、完全性、および可用性に影響のある脆弱性が存在します。
影響を受けるシステム
オラクル
Oracle WebLogic Server 10.3.6.0.0
Oracle WebLogic Server 12.1.3.0.0
想定される影響
リモートの攻撃者により、情報を取得される、情報を改ざんされる、およびサービス運用妨害 (DoS) 攻撃が行われる可能性があります。
ただ、いくつかの中国語の記事を見る限り、場合によってはリモートコード実行が可能なようです。
【漏洞预警】Oracle WebLogic wls-wsat RCE CVE-2017-10271 & CVE-2017-3506|指尖安全|垂直互联网安全媒体
とりあえずGoogle翻訳に突っ込んだ結果をかいつまんで書くと以下のような感じです(間違っている可能性があることはご容赦ください)。
- WebLogicのWLSコンポーネントにはリモートコード実行の脆弱性があり、該当するCVE-2017-3506のパッチが今年4月にリリースされた
- CVE-2017-3506の攻撃コードは公開されていないが、攻撃には利用されていた
- 4月に公開されたパッチをバイパスできる脆弱性(CVE-2017-10271)が見つかり、これは10月のパッチで修正された
ということのようです。 影響を受けるバージョンは限られていますが、リモートコード実行が可能なため、注意が必要です。
検証
WebLogic は有償のプロダクトですが、開発などの用途で使うための無償版があります(Oracleへの登録が必要です)。 今回はDockerでWebLogicの環境を作って本脆弱性の検証をやってみます。
環境構築
脆弱性のあるOracle WebLogic Server 12.1.3をDockerで建てます。
とりあえず、公式のDocker関連ファイルを持ってきます。
git clone https://github.com/oracle/docker-images.git
色々あるのを全部持ってきますが、使うのはOracleJavaとOracleWebLogicです。
まずベースとなるJavaのイメージを作成します。今回はJava8で。
cloneした「/OracleJava/java-8/」のディレクトリに「server-jre-8u151-linux-x64.tar.gz.download」というファイルがありますが、中身を見るとテキストでダウンロード先とファイルのハッシュが書いてあります。 このファイルを落としてこいということなので、リンクから同名のファイル(server-jre-8u151-linux-x64.tar.gz)を落としてきます。 落としてきたファイルは「~~.download」と同じディレクトリに置きます。
で、ビルドします。ビルドにはスクリプトが用意してあるので、叩くだけです。
sh build.sh
「doceker images」で確認するとoracle/serverjre:8のイメージができています。これが、WebLogicのベースになります。
次にWebLogicのイメージを作ります。やり方は上と同じです。今回は12.1.3なので、「/OracleWebLogic/dockerfiles/12.1.3/」のディレクトリを確認し、必要なファイルを落としてきます。 「fmw_12.1.3.0.0_wls.jar.download」と「wls1213_dev_update3.zip.download」があるので、それぞれのファイル内のリンクから同名ファイルをダウンロード(登録が必要)し、同じディレクトリに設置します。 その後、「/OracleWebLogic/dockerfiles/」にある、buildDockerImage.shを叩きます。
./buildDockerImage.sh -g -v 12.1.3
oracle/weblogic:12.1.3-genericのDockerイメージができます。
ようやくWebLogicのベースイメージができたので、ここからサンプルのDockerfileからWebLogicサーバを建てます。 「/OracleWebLogic/samples/1213-domain/」でREADME.mdの通りに実行します。
docker build -t 1213-domain --build-arg ADMIN_PASSWORD=admin1234 .
ADMIN_PASSWORDは英数8文字以上みたいな制約があるので気を付けてください。 これでWebLogicサーバのDockerイメージができました。 できたイメージはこんな感じ。
これを起動します。
docker run -d --name wlsadmin --hostname wlsadmin -p 7001:7001 1213-domain
http://localhost:7001/console へアクセスして、こんな画面がでれば成功です。
攻撃コード検証
まず、「http://localhost:7001/wls-wsat/CoordinatorPortType」へアクセスしてみます。このパスが今回の攻撃対象になります。
PoCはこのパスに対して、POSTで実行するコマンドを含んだSOAPのXMLを投げつけます。
成功すると、サーバからは500 Internal Server Errorが返ります。コマンドの結果はレスポンスには載ってきません。
ここでは例として、「echo "HACKED!!" > /tmp/Hack」というコマンドを実行してみました。
コンテナの中に入って、確認します。
確かにファイルが作成されていました。
ということで、リモートでコード実行ができました。
まとめ
日本ではあまり騒がれていませんが、すでに攻撃が行われており、該当するバージョンのWebLogicを利用している場合、おそらくデフォルトの状態で刺さる可能性がある危険な脆弱性です。 対策としては、WebLogicのバージョンアップ、暫定策として、wls-wsatへのアクセス制御や、関連するコンポーネントの削除が挙げられています。
WebLogicのログがどこにあるのか分からなかったのですが、もしログがあるなら、「/wls-wsat/CoordinatorPortType」へのPOSTでのアクセスログあるか、そのレスポンスが500になっていないかを確認するのがいいかと思います。
WebLogicの環境構築がちょっと面倒でしたが(有償の製品なので仕方ないですね)、とりあえずは検証まで行うことができて満足しました。
追記 (2017/12/28)
以下2点を補足として。