生産性のない話

趣味の範囲でサイバーセキュリティの話

Oracle WebLogic Server のWLS Security に関する脆弱性(CVE-2017-10271)について

10月にOracle WebLogicはパッチが出てましたが、その時に修正された脆弱性の攻撃コードが先週末あたりに公開されました。

実際に攻撃も来ているようで、探すと中国語での解説記事をちらほら見かけます。 morihi-soc 氏のハニーポットでも攻撃が観測されているそうです。

CVE-2017-10271について

JVN(JVNDB-2017-008734 - JVN iPedia - 脆弱性対策情報データベース)によると、脆弱性の内容は以下のようになっています。

概要

Oracle Fusion MiddlewareOracle WebLogic Server には、WLS Security に関する処理に不備があるため、機密性、完全性、および可用性に影響のある脆弱性が存在します。

影響を受けるシステム

オラクル

Oracle WebLogic Server 10.3.6.0.0

Oracle WebLogic Server 12.1.3.0.0

Oracle WebLogic Server 12.2.1.1.0

Oracle WebLogic Server 12.2.1.2.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で建てます。

GitHub - oracle/docker-images: Official source for Docker configurations, images, and examples of Dockerfiles for Oracle products and projects

とりあえず、公式の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イメージができました。 できたイメージはこんな感じ。

f:id:blueBLUE:20171226022002p:plain

これを起動します。

docker run -d --name wlsadmin --hostname wlsadmin -p 7001:7001 1213-domain

http://localhost:7001/console へアクセスして、こんな画面がでれば成功です。

f:id:blueBLUE:20171226022016p:plain

攻撃コード検証

まず、「http://localhost:7001/wls-wsat/CoordinatorPortType」へアクセスしてみます。このパスが今回の攻撃対象になります。

f:id:blueBLUE:20171226022035p:plain

PoCはこのパスに対して、POSTで実行するコマンドを含んだSOAPXMLを投げつけます。

f:id:blueBLUE:20171226022116p:plain

成功すると、サーバからは500 Internal Server Errorが返ります。コマンドの結果はレスポンスには載ってきません。

ここでは例として、「echo "HACKED!!" > /tmp/Hack」というコマンドを実行してみました。

コンテナの中に入って、確認します。

f:id:blueBLUE:20171226022053p:plain

確かにファイルが作成されていました。

ということで、リモートでコード実行ができました。

まとめ

日本ではあまり騒がれていませんが、すでに攻撃が行われており、該当するバージョンのWebLogicを利用している場合、おそらくデフォルトの状態で刺さる可能性がある危険な脆弱性です。 対策としては、WebLogicのバージョンアップ、暫定策として、wls-wsatへのアクセス制御や、関連するコンポーネントの削除が挙げられています。

WebLogicのログがどこにあるのか分からなかったのですが、もしログがあるなら、「/wls-wsat/CoordinatorPortType」へのPOSTでのアクセスログあるか、そのレスポンスが500になっていないかを確認するのがいいかと思います。

WebLogicの環境構築がちょっと面倒でしたが(有償の製品なので仕方ないですね)、とりあえずは検証まで行うことができて満足しました。

追記 (2017/12/28)

以下2点を補足として。

  • 今回利用したPoCでは「/wls-wsat/CoordinatorPortType」のパスへ攻撃しましたが、実際には「/wls-wsat/」配下の存在するパスであれば攻撃は成功するようです。アクセス制限を考えている場合は「/wls-wsat/」以下すべてのパスの制限をした方がいいです。

  • 検証したところ、上記の影響を受けるシステムとなっている以外のWebLogicのバージョンでも利用した攻撃コードが刺さりそうな感じでした。詳細な影響範囲は分かりませんが、WebLogicの10系と12系を利用している場合はとりあえず、攻撃影響・侵害の有無を確認した方がいいと思います。