Play Framework セキュリティアドバイザリ

Logback SocketAppenderのJavaデシリアライゼーションの脆弱性

日付

2017年4月7日

説明

Playで使用されているLogbackのソケットアペンダーとソケットレシーバーに、デシリアライゼーションの脆弱性が発見されました。これは、Playのバージョン2.0.0から2.5.13に影響します。

Playは、SLF4Jを介してLogbackとの統合を含んでいます。Logbackには、Javaシリアライゼーションを使用して、ネットワーク経由でロギングイベントを送信する機能があります。

Playの既定の設定では、Play自体でLogbackを使用しても脆弱性はありませんが、LogbackがSocketAppenderまたはServerSocketReceiverを使用するように特別に設定されている場合は、Playに脆弱性があります。

影響

この脆弱性はCVE-2017-5929として登録されています。ほとんどのJavaデシリアライゼーションバグと同様に、信頼できない入力をデシリアライズすると、JVMでリモートコマンドを実行できます。

Playは、開梱時にSocketAppenderを使用して構成されず、SocketAppenderは本番のロギング環境(つまり、syslogまたはELKスタック)には適合しないため、本番環境がこの脆弱性の影響を受ける可能性は低いです。SocketAppenderを使用して明示的に構成して、IDEまたはデスクトップロギングツールに統合する開発環境を設定できる可能性があります。

影響を受けるバージョン

Play 2.0.0 - 2.5.13

回避策

この脆弱性の回避策は、Logbackライブラリをこれらの問題がないバージョン1.2.3にアップグレードすることです。

// https://mvnrepository.com/artifact/ch.qos.logback/logback-classic
libraryDependencies += “ch.qos.logback” % “logback-classic” % “1.2.3”

修正

Play 2.5.14にアップグレードするか、それ以前のバージョンのPlayを使用している場合はLogbackライブラリをアップグレードするか、Logback構成からSocketAppenderまたはSocketReceiverへの参照を削除します。

理想的には、Javaシリアライゼーションを完全に無効にするために、notsoserialまたは他のJavaエージェントベースのシステムを使用します。

謝辞

この問題を報告してくれたJoel Bertaに感謝します。