首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Apache MyFaces 反序列化问题

0x00 关于Apache MyFaces

MyFaces是JSF Web框架的一个具体实现框架,同样也属于MVC范畴,但是与Struts不同的是,它强调基于组件和面向事件,具体可参考官方介绍(https://cwiki.apache.org/confluence/display/MYFACES/Index)。

0x01 ViewState

熟悉.NET的对ViewState应该比较熟悉,ViewState用于保存视图的状态。在JSF中ViewState是序列化的对象。既然是序列化对象,显然进行反序列化时会存在安全隐患。

0x02 风险面

其实15年的时候Frohoff 和 Lawrence就在AppSec California提及了MyFaces ViewState潜在的风险,所以Apache官方在后面的版本中(https://wiki.apache.org/myfaces/Secure_Your_Application)增加了安全机制。

具体而言,以下配置会影响反序列化安全:

1)是否对ViewState加密

2)存储在server还是client

其中:

1)是影响是否能被利用的最核心的配置,默认加密启用,除了加密之外还会有签名,所以通常显得比较鸡肋。当然,即使启用了加密也不能保证100%安全,因为加密的算法、密钥、IV等要素都允许用户配置,所以如果能够获取到这些要素之后,仍然能够利用。

2)在2.3.0版本之前,ViewState储在server还是client其实没有差别,但是在2.3.0之后,保存在server端的就不在进行反序列化了(https://issues.apache.org/jira/browse/MYFACES-4133)。而且默认是server,因此2.3.0是一个重要的分水岭。

0x03 简单演示

1)下载或者搭建简单的demo,默认登录表单中ViewState值是一个加密串

2)修改默认配置,取消加密

很明显看到序列化的特征(rO0)。

3)为了便于演示,增加CommonsCollections3.1包,使用ysoserial生成payload

4)对于启用了加密的,如果知道了加密要素,同样可可以利用,感兴趣的可以尝试。

0x04 参考

https://wiki.apache.org/myfaces/Secure_Your_Application

http://www.slideshare.net/frohoff1/appseccali-2015-marshalling-pickles

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171217G0LM1H00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券