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:
@ControllerpublicclassHomeController { @RequestMapping(value="/home",method= RequestMethod.POST,consumes = "application/xml") publicModelAndView home(@RequestBody User user) {// System.out.println(user); returnnewModelAndView("home", "message",user.getUserName()); }}
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; }}