【每日一洞】幽灵猫漏洞(CVE-2020-1938)

【每日一洞】幽灵猫漏洞(CVE-2020-1938)

自己的总结

总结:要研究一个开源软件的漏洞,一定要在全面阅读其代码的基础上,熟悉流程。找 *可控的 + 原有的,利用短板效应和组合拳实现突破。

漏洞分析

Tomcat AJP Connector

Connector是什么?

  • 一个监听外部数据,接收用户请求,转发到下游(处理具体业务逻辑)Tomcat的连接器。

http -> ajp ->下游tomcat

使用Tomcat的一个Web服务网络架构

ajp_pass 使用 ajp 协议

Proxy_pass 使用 http 协议

AJP协议分析

图:AJP协议

注意上图中圈起来的重要内容。

思考:atteibutes如果可以任意设置,会有什么作用?

Attributes包括以下三个

  • javax.servlet.include.request_uri
  • javax.servlet.include.path_info
  • javax.servlet.include.servlet_path

漏洞原理

漏洞影响范围

  • 全版本
  • 默认配置
    • 默认启动 AJP Connector,且监听0.0.0.0,外网可访问,且不鉴权
  • 敏感信息泄漏
    • 获取源代码、配置文件和资源文件
    • 只能读WebAPP下的漏洞,不能读根目录下的
  • 代码执行
    • 如果存在文件上传,可以利用文件包含实现任意代码执行,获取服务器权限

漏洞检测

  • X-RAY安全评估工具(社区版)
  • 洞鉴(企业版)
  • GhostCat

如何检测漏洞

  • AJP协议请求一个随机URL,判断版本号

    • 思考:此处可以不判断status code吗?不可
  • 正常访问页面,是否403

  • 设置随机属性,看是否为403

    • 如果2、3步都不是403,则可以设置随机属性,即判断为存在该漏洞
  • 尝试去读文件,比较文件特征

    • 比如常用的就是WEB-INF/web.xml和index.jsp,但文件也有不存在的可能
    • 设置属性,”javax.servlet.include.servlet_path”:”/WEB-INF/web.xml”

漏洞修复

官方修复方案

  • 默认禁用AJP Connector
  • 默认监听本地地址
  • 践行secure by default

  • 默认必须配置secret

  • 用户可以配置所需要的属性白名单,否则直接返回403

如何升级

  • 如果不使用AJP Connector,可以直接关闭

  • 如果需要AJP Connector,但不需要对外暴露AJP Connector

    注意上面的,升级后,升级后secret名字变化

  • 如果业务需要设置部分属性,升级后发现403,可以在配置文件中设置白名单

如何防御类似的未知漏洞

  • 做好资产发现、整理和维护
  • 设置网络防火墙,开放特定端口
  • 做好安全基线的配置和检查
    • 安全基线就是最低的安全要求参照
    • e.g. 权限和权利分配,只有管理员有权更改系统文件

长亭的安全产品

可以去参考一下长亭技术产品的特征,功能发展的趋势。