springxml外部注入漏洞(CVE-2013-4152)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > springxml外部注入漏洞(CVE-2013-4152)

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

 2013/11/5 15:36:50  dingody  程序员俱乐部  我要评论(0)
  • 摘要:8月22号spring爆了一个xml外部注入漏洞(CVE-2013-4152),漏洞链接:http://www.nsfocus.net/vulndb/24471这个其实是一个比较老的xml注入漏洞,不仅仅是java,php和python等一些语言的xml解析库都受影响。简单描述就是:如果应用有这样的功能——程序从外部获取用户控制的xml,并且解析这些xml,由于xml中可以定义对外部资源的引用,用户可以在xml中定义对系统重要文件的应用,这就有可能导致系统敏感文件内容的泄露。其中的一个poc
  • 标签:Spring 漏洞 XML
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:
class="java">@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)。如下图:




修复方式:
升级spring
  • 大小: 20.4 KB
  • 查看图片附件
发表评论
用户名: 匿名