【每日一洞】幽灵猫漏洞(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下的漏洞,不能读根目录下的
- 代码执行
- 如果存在文件上传,可以利用文件包含实现任意代码执行,获取服务器权限
漏洞检测
如何检测漏洞
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. 权限和权利分配,只有管理员有权更改系统文件
长亭的安全产品
可以去参考一下长亭技术产品的特征,功能发展的趋势。