NFS no_root_squash/no_all_squash misconfiguration PE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leia o _ /etc/exports _ arquivo, se você encontrar algum diretório que está configurado como no_root_squash, então você pode acessar ele como um cliente e escrever dentro daquele diretório como se você fosse o root local da máquina.
no_root_squash: Esta opção basicamente dá autoridade ao usuário root no cliente para acessar arquivos no servidor NFS como root. E isso pode levar a sérias implicações de segurança.
no_all_squash: Isso é semelhante à opção no_root_squash, mas se aplica a usuários não-root. Imagine, você tem um shell como usuário nobody; verificou o arquivo /etc/exports; a opção no_all_squash está presente; verifique o arquivo /etc/passwd; emule um usuário não-root; crie um arquivo suid como esse usuário (montando usando nfs). Execute o suid como usuário nobody e torne-se um usuário diferente.
Se você encontrou essa vulnerabilidade, você pode explorá-la:
Montando aquele diretório em uma máquina cliente, e como root copiando dentro da pasta montada o binário /bin/bash e dando a ele direitos SUID, e executando a partir da máquina da vítima aquele binário bash.
Montando esse diretório em uma máquina cliente, e como root copiando dentro da pasta montada nosso payload compilado que irá abusar da permissão SUID, dando a ele direitos SUID, e executando a partir da máquina da vítima esse binário (você pode encontrar aqui alguns payloads C SUID).
Note que se você puder criar um túnel da sua máquina para a máquina da vítima, você ainda pode usar a versão Remota para explorar essa escalada de privilégio tunelando as portas necessárias.
O seguinte truque é caso o arquivo /etc/exports
indique um IP. Nesse caso, você não poderá usar em nenhum caso o exploit remoto e precisará abusar desse truque.
Outro requisito necessário para que o exploit funcione é que a exportação dentro de /etc/export
deve estar usando a flag insecure
.
--Não tenho certeza se, caso /etc/export
esteja indicando um endereço IP, esse truque funcionará--
O cenário envolve explorar um compartilhamento NFS montado em uma máquina local, aproveitando uma falha na especificação do NFSv3 que permite ao cliente especificar seu uid/gid, potencialmente permitindo acesso não autorizado. A exploração envolve o uso de libnfs, uma biblioteca que permite a falsificação de chamadas RPC NFS.
Os passos de compilação da biblioteca podem exigir ajustes com base na versão do kernel. Neste caso específico, as chamadas de sistema fallocate foram comentadas. O processo de compilação envolve os seguintes comandos:
O exploit envolve a criação de um programa C simples (pwn.c
) que eleva privilégios para root e, em seguida, executa um shell. O programa é compilado e o binário resultante (a.out
) é colocado no compartilhamento com suid root, usando ld_nfs.so
para falsificar o uid nas chamadas RPC:
Compile o código do exploit:
Coloque o exploit no compartilhamento e modifique suas permissões falsificando o uid:
Execute o exploit para obter privilégios de root:
Uma vez obtido o acesso root, para interagir com o compartilhamento NFS sem mudar a propriedade (para evitar deixar rastros), um script Python (nfsh.py) é usado. Este script ajusta o uid para corresponder ao do arquivo sendo acessado, permitindo a interação com arquivos no compartilhamento sem problemas de permissão:
Executar como:
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)