Spring HttpInvoker在认证之前容易受到最近的反序列化攻击?

时间:2015-11-11 16:29:44

标签: spring-security spring-remoting

关于Java反序列化攻击的最新Foxglove Security article以及用于定位主要应用服务器以及Spring和Groovy应用程序的示例代码的链接,引起了许多人的惊愕。该文章指出这些漏洞利用绕过身份验证,因为在完成身份验证检查之前,对象有效负载已反序列化。尽管如此,它并没有特别命名或讨论Spring HttpInvoker,而且我还没有能够在其他地方找到明确的声明。

对于通过Spring HttpInvoker公开的远程服务,使用带有基本身份验证的Spring Security,验证检查是否会在 (可能是恶意的)对象有效负载被反序列化之前执行?或者文章的断言是"身份验证不会保护您免受这种攻击的影响"也适用于HttpInvoker服务?

2 个答案:

答案 0 :(得分:2)

决定自己测试一下。为了在处理入站HTTP Invoker服务调用时测试事件序列,我按如下方式设置了一个简单的Spring Boot入门应用程序:

  • 一个HelloWorld服务公开一个简单的hello()方法,该方法将自定义HelloDto对象作为输入参数。
  • HelloDto中的自定义序列化逻辑,用于记录序列化和反序列化。
  • Spring Security用于保护服务的基本身份验证。

我为Spring Security和Spring Remoting调试了调试级别,然后通过一个简单的JUnit测试客户端远程调用了HelloWorldService。我通过控制台日志确认Spring Security正在验证并授权调用者之前进行反序列化。

当我思考一系列事件时,这是有道理的。 Spring Security作为过滤器链实现,而HTTP Invoker逻辑由DispatcherServlet处理,在过滤器预先执行之后,它将在逻辑上获得控制权。

如果任何Spring专家能够确认这是一个准确的解释(或者特别是如果有任何模糊的边缘情况"反序列化仍然可以在调用者被认证之前咬我们),那将是非常感谢。

答案 1 :(得分:0)

我正在搜索ysoserial有效负载生成器。使用每个选项创建有效负载,然后使用正确的内容类型集将其卷曲到您的端点。我们在我的工作中做到了这一点,并且惊讶于我们可以在我们的开发服务器上远程执行代码。