摘要

Apache Tomcat在其SSI实现中存在漏洞,可用于实现跨站点脚本(XSS)。只有在启用SSI并使用“printenv”指令的情况下,才能利用此漏洞。
供应商对这个漏洞的评级为低风险性,且在版本7.0.94、8.5.40和9.0.19中发布了补丁,用户应尽快升级到最新版本。

漏洞详细信息

服务器端包含(SSI)是一些Web服务器中使用的一种简单的脚本语言,用于实现包括文件、变量的值回显和显示有关文件的基本信息等功能。这些只是针对于SSI特定的环境变量,它们要么由用户设置,要么包含关于传入HTTP请求的信息。(请参阅此处的完整列表)。
“echo”指令打印出单个变量的值,而“printenv”指令打印出所有变量的值。这两个指令都输出HTML。Apache Tomcat对于使用“echo”指令时正确地转义了XSS值,但对于“printenv”指令则没有。因此,如果应用程序使用这个指令,攻击者可以注入恶意输入,从而导致XSS。
比较“echo”参数中正确转义输出的代码


与未对输出进行正确转义的“printenv”参数的代码相比:

修复方法是添加如下提交中所示的编码:

为了成功利用该漏洞,前期工作应该准备以下几点:
1.必须在Apache Tomcat中启用SSI支持 - 全局或特定Web应用程序。默认情况下不启用。
2.Web应用程序中必须存在具有“printenv”SSI指令的文件(通常为“.shtml”)。
3.攻击者必须能够访问该文件。

复现步骤

1.在Windows中安装Java运行时环境(JRE)。
2.下载有漏洞的Tomcat版本并解压。
3.在第19行修改conf\context.xml文件,获得上下文权限((这也可以在单个应用程序上执行,而不是全局执行)

Context privileged =“true”>

4.根据这里的指令修改conf\web.xml以启用SSI servlet(这也可以在单独的应用程序上完成,也可以是全局的)。
5.将以下代码放在“webapps / ROOT / ssi / printenv.shtml”中:

<html><head><title></title><body>
Echo test: <!--#echo var="QUERY_STRING_UNESCAPED" --><br/><br/>
Printenv test: <!--#printenv -->
</body></html>

6通过以下命令运行Tomcat:

cd bin
catalina run

7.利用以下URL来触发XSS(可能需要使用Firefox)。观察正确转义的“echo”指令与无法正确转义的“ printenv ”指令之间的区别

http://localhost:8080/ssi/printenv.shtml?%3Cbr/%3E%3Cbr/%3E%3Ch1%3EXSS%3C/h1%3E%3Cbr/%3E%3Cbr/%3E

http://localhost:8080/printenv.shtml?%3Cscript%3Ealert(%27xss%27)%3C/script%3E

供应商回应

通过由Intigriti运营的欧盟FOSSA赏金计划向供应商报告了该问题。供应商将其标记为CVE-2019-0221,并打了补丁
供应商对此漏洞的评级为“低风险”,他们的原因如下:
1.默认情况下禁用SSI
2.很少有人会用SSI
3.printenv命令也不会经常用到
供应商表示以下版本包含该漏洞(早期版本没有相关信息):

Tomcat 9 - 版本9.0.0.M1到9.0.17(9.0.18不受影响)
Tomcat 8 - 版本8.5.0到8.5.39
Tomcat 7 - 版本7.0.0到7.0.93

建议用户升级到以下固定版本或更高版本:

Tomcat 9 – version 9.0.19 
Tomcat 8 – version 8.5.40
Tomcat 7 – version 7.0.94

赏金信息

该报告符合欧盟FOSSA奖励计划的要求,并已支付赏金。

参考

Apache SSI
CVE-ID: CVE-2019-0221
CVSS 2.0评分:待定
CVSS 3.0评分:待定
Tomcat SSI\
供应商建议

原文:https://wwws.nightwatchcybersecurity.com/2019/05/27/xss-in-ssi-printenv-command-apache-tomcat-cve-2019-0221/

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖