Play Framework 安全諮詢

Logback SocketAppender 中的 Java 反序列化漏洞

日期

2017 年 4 月 7 日

說明

在 Logback 中的 socket 附加程式和 socket 接收器 中發現一個反序列化漏洞,Play 使用此漏洞。這會影響 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 的參照。

理想情況下,使用 notsoserial 或其他基於 Java 代理系統完全停用 Java 序列化。

致謝

感謝 Joel Berta 回報此問題。