漏洞原理
Spring Security OAuth2处理认证请求的时候如果使用了whitelabel视图,response_type参数值会被当做Spring SpEL来执行,恶意攻击者通过构造response_type值可以触发远程代码执行漏洞
复现环境
在ubuntu 16.04虚拟机中用vulhub靶场提供的docker容器来复现
jdk版本1.7
python版本3.5
影响版本
Spring Security OAuth 2.3到2.3.2
Spring Security OAuth 2.2到2.2.1
Spring Security OAuth 2.1到2.1.1
Spring Security OAuth 2.0到2.0.14
复现过程
1. 进入vulhub目录:spring/CVE-2016-4977,启动docker容器
2. 对反弹shell的POC进行base64编码(java反弹shell都需要先编码,不然不会成功,原因貌似是runtime不支持管道符)
3. 用vulhub提供的poc.py生成反弹shell的POC:
4. 监听反弹端口,并访问下面的url:
http://your-ip:8080/oauth/authorize?response_type=上面的那一长串POC&client_id=acme&scope=openid&redirect_uri=http://test
反弹成功,从返回页面来看,这里实际上是利用抛出的错误消息来执行恶意代码的,漏洞代码的位置应该在内部错误处理的代码中。
本文仅用于技术学习和交流,严禁用于非法用途,否则产生的一切后果自行承担。