在 sofa-hessian 最新版中存在一个有趣的机制,众所周知 sofa-hessian 是有自己内置的反序列化黑名单,并且这个黑名单是默认开启的,但是在某次出题的时候发现,不知道为什么这个黑名单就一直不生效,和某不知名朋友经历一系列的 debug 后得出结论,sofa-hessian 这个依赖的在捕获黑名单类抛出异常的时候需要依赖另外一个名为 sofa-common-tools,这其实就很不合理。
在发现这个问题的第一时刻就已经提交给官方进行修复(获取 cve 失败
黑名单过滤的核心类在 NameBlackListFilter,在该类中通过 loadClass 去加载 LoggerSpaceManager 这个日志管理类,但是在左侧红框中可以发现根本没有这个包,所以这里肯定会是加载失败的
在 resolve 方法中会对 className 进行过滤,但是抛出异常阻断攻击需要满足两个条件
● result = true
● LOGGER != null
LOGGER 因为上述类加载失败的缘故导致是恒等于空
结果可想而知,就算是使用了黑名单的类,也是无法被拦截的