(CVE-2019-0221)Apache Tomcat SSI printenv指令中的XSS

一、漏洞简介

Apache Tomcat在其SSI实现中存在漏洞,可用于实现跨站点脚本(XSS)。只有在启用SSI并使用"printenv"指令的情况下,才能利用此漏洞。

利用条件

二、漏洞影响

Apache Tomcat 9.0.0.M1版本至9.0.0.17版本、

Apache Tomcat 8.5.0版本至8.5.39版本

Apache Tomcat 7.0.0版本至7.0.93版本

三、复现过程

漏洞分析

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

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

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

漏洞复现

<!-- -->
Context privileged =“true”>

<!-- -->
Echo test:

Printenv test:

<!-- -->
cd bin catalina run

<!-- -->
http://www.0-sec.org:8080/ssi/printenv.shtml?%3Cbr/%3E%3Cbr/%3E%3Ch1%3EXSS%3C/h1%3E%3Cbr/%3E%3Cbr/%3E

http://www.0-sec.org:8080/printenv.shtml?%3Cscript%3Ealert(%27xss%27)%3C/script%3E

参考链接

https://xz.aliyun.com/t/5310