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に感謝します。