springxml外部注入漏洞(CVE-2013-4152)

8月22号spring爆了一个xml外部注入漏洞(CVE-2013-4152),漏洞链接: http://www.nsfocus.net/vulndb/24471
这个其实是一个比较老的xml注入漏洞,不仅仅是 java, php和python等一些语言的xml解析库都受影响。

简单描述就是:如果应用有这样的功能 —— 程序从外部获取用户控制的xml,并且解析这些xml,由于xml中可以定义对外部资源的引用,用户可以在xml中定义对系统重要文件的应用,这就有可能导致系统敏感文件内容的泄露。

其中的一个poc:
Spring的@Requestbody 注解就有可能产生这种问题。比如这么写一个controller:
@Controller
publicclassHomeController {

@RequestMapping(value="/home",method= RequestMethod.POST,consumes = "application/xml")
publicModelAndView home(@RequestBody User user) {
// System.out.println(user);
returnnewModelAndView("home", "message",user.getUserName());
}
}


User是一个javabean:
import javax.xml.bind.annotation.XmlElement;
importjavax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "user")
publicclass User{
privateString userID;
privateString userName;

@XmlElement
publicString getUserID() {
returnuserID;
}
publicvoidsetUserID(String userID) {
this.userID =userID;
}
@XmlElement
publicString getUserName() {
returnuserName;
}
publicvoidsetUserName(String userName) {
this.userName =userName;
}
}


ser是从@RequestBody直接转换过来,@RequestBody可以将http request 正文中的 xml,json 等直接转换成spring 内部对象,比如以上代码就是直接将post请求中的xml转换成user对象。
当用curl post提交以下请求时,便可以直接读取本地系统文件的内容(c:\\windows\\win.ini)。如下图:

[img]http://dl2.iteye.com/upload/attachment/0090/8570/15164557-9562-33ea-a05c-319320fd2816.jpg[/img]


修复方式:
升级spring
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值