Logback SocketAppender 中的 Java 反序列化漏洞
日期
2017 年 4 月 7 日
描述
在 Logback 的 发现 了 套接字附加程序和套接字接收器 中的反序列化漏洞,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 报告了这个问题。