<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** com as ferramentas comunitárias **mais avançadas** do mundo.\
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): Também pode **enumerar contêineres**
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): Esta ferramenta é bastante **útil para enumerar o contêiner em que você está e até tentar fugir automaticamente**
* [**amicontained**](https://github.com/genuinetools/amicontained): Ferramenta útil para obter os privilégios que o contêiner possui a fim de encontrar maneiras de fugir dele
* [**deepce**](https://github.com/stealthcopter/deepce): Ferramenta para enumerar e fugir de contêineres
* [**grype**](https://github.com/anchore/grype): Obtenha os CVEs contidos no software instalado na imagem
Caso o **socket do docker esteja em um local inesperado**, você ainda pode se comunicar com ele usando o comando **`docker`** com o parâmetro **`-H unix:///caminho/para/docker.sock`**
O daemon do Docker também pode estar [ouvindo em uma porta (por padrão 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) ou em sistemas baseados em Systemd, a comunicação com o daemon do Docker pode ocorrer através do socket do Systemd `fd://`.
Você deve verificar as capacidades do container, se ele tiver alguma das seguintes, você pode ser capaz de escapar dele: **`CAP_SYS_ADMIN`**_,_ **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`**
A flag `--privileged` introduz preocupações significativas de segurança, e o exploit depende do lançamento de um container docker com ela ativada. Ao usar essa flag, containers têm acesso total a todos os dispositivos e não possuem restrições de seccomp, AppArmor e capacidades Linux. Você pode l**er todos os efeitos de `--privileged`** nesta página:
Com essas permissões, você pode simplesmente **mover-se para o namespace de um processo rodando no host como root** como init (pid:1) apenas executando: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`
Containers docker bem configurados não permitirão comandos como **fdisk -l**. No entanto, em comandos docker mal configurados onde a flag `--privileged` ou `--device=/dev/sda1` com caps é especificada, é possível obter privilégios para ver o drive do host.
Dentro do container, um atacante pode tentar obter mais acesso ao sistema operacional hospedeiro subjacente por meio de um volume hostPath gravável criado pelo cluster. Abaixo estão algumas coisas comuns que você pode verificar dentro do container para ver se pode aproveitar esse vetor de ataque:
Nos exploits anteriores, **o caminho absoluto do contêiner dentro do sistema de arquivos do host é divulgado**. No entanto, nem sempre é o caso. Em casos onde você **não conhece o caminho absoluto do contêiner dentro do host**, você pode usar esta técnica:
Existem vários arquivos que podem estar montados que fornecem **informações sobre o host subjacente**. Alguns deles podem até indicar **algo a ser executado pelo host quando algo acontece** (o que permitirá a um atacante escapar do contêiner).
Em várias ocasiões, você encontrará que o **contêiner tem algum volume montado a partir do host**. Se este volume não foi configurado corretamente, você poderá **acessar/modificar dados sensíveis**: Ler segredos, alterar ssh authorized\_keys…
Se você tem acesso como **root dentro de um container** que possui alguma pasta do host montada e você **escapou como um usuário não privilegiado para o host** e tem acesso de leitura sobre a pasta montada.\
Você pode criar um **arquivo bash suid** na **pasta montada** dentro do **container** e **executá-lo a partir do host** para privesc.
Se você tem acesso como **root dentro de um container** e você **escapou como um usuário não privilegiado para o host**, você pode abusar de ambos os shells para **privesc dentro do host** se você tem a capacidade MKNOD dentro do container (é por padrão) como [**explicado neste post**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
Com tal capacidade, o usuário root dentro do container tem permissão para **criar arquivos de dispositivo de bloco**. Arquivos de dispositivo são arquivos especiais que são usados para **acessar hardware subjacente e módulos do kernel**. Por exemplo, o arquivo de dispositivo de bloco /dev/sda dá acesso para **ler os dados brutos no disco do sistema**.
O Docker garante que dispositivos de bloco **não possam ser abusados de dentro do container** definindo uma política de cgroup no container que bloqueia a leitura e escrita de dispositivos de bloco.\
No entanto, se um dispositivo de bloco é **criado dentro do container, ele pode ser acessado** através da pasta /proc/PID/root/ por alguém **fora do container**, a limitação sendo que o **processo deve ser de propriedade do mesmo usuário** fora e dentro do container.
# get the real PID of the shell inside the container as the new https://app.gitbook.com/s/-L_2uGJGU7AVNRcqRvEi/~/changes/3847/linux-hardening/privilege-escalation/docker-breakout/docker-breakout-privilege-escalation#privilege-escalation-with-2-shells user
Se você pode acessar os processos do host, será capaz de acessar muitas informações sensíveis armazenadas nesses processos. Execute o laboratório de teste:
Se você de alguma forma tiver acesso privilegiado **a um processo fora do container**, você poderia executar algo como `nsenter --target <pid> --all` ou `nsenter --target <pid> --mount --net --pid --cgroup` para **executar um shell com as mesmas restrições de ns** (esperançosamente nenhuma) **que aquele processo.**
Se um container foi configurado com o driver de rede do Docker [host networking driver (`--network=host`)](https://docs.docker.com/network/host/), a pilha de rede desse container não é isolada do host Docker (o container compartilha o namespace de rede do host), e o container não recebe um endereço IP próprio alocado. Em outras palavras, o **container vincula todos os serviços diretamente ao IP do host**. Além disso, o container pode **interceptar TODO o tráfego de rede que o host** está enviando e recebendo na interface compartilhada `tcpdump -i eth0`.
* [Writeup: Como contatar o Google SRE: Criando um shell no cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
* [Serviço de metadados MITM permite escalonamento de privilégios de root (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
Você também poderá acessar **serviços de rede vinculados ao localhost** dentro do host ou até mesmo acessar as **permissões de metadados do nó** (que podem ser diferentes daquelas que um container pode acessar).
Se você tiver apenas `hostIPC=true`, provavelmente não poderá fazer muito. Se algum processo no host ou qualquer processo dentro de outro pod estiver usando os **mecanismos de comunicação entre processos** do host (memória compartilhada, arrays de semáforos, filas de mensagens, etc.), você poderá ler/escrever nesses mesmos mecanismos. O primeiro lugar que você vai querer verificar é `/dev/shm`, pois é compartilhado entre qualquer pod com `hostIPC=true` e o host. Você também vai querer verificar os outros mecanismos IPC com `ipcs`.
* **Inspecione /dev/shm** - Procure por quaisquer arquivos nesta localização de memória compartilhada: `ls -la /dev/shm`
* **Inspecione as instalações IPC existentes** – Você pode verificar se alguma instalação IPC está sendo usada com `/usr/bin/ipcs`. Verifique com: `ipcs -a`
A segunda técnica explicada no post [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) indica como você pode abusar de montagens bind com namespaces de usuário, para afetar arquivos dentro do host (naquele caso específico, deletar arquivos).
Use [**Trickest**](https://trickest.com/?utm_campaign=hacktrics\&utm_medium=banner\&utm_source=hacktricks) para construir e **automatizar fluxos de trabalho** com o suporte das **ferramentas comunitárias mais avançadas** do mundo.\
Caso você possa executar `docker exec` como root (provavelmente com sudo), você pode tentar escalar privilégios escapando de um container abusando do CVE-2019-5736 (exploit [aqui](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Essa técnica basicamente vai **sobrescrever** o binário _**/bin/sh**_ do **host****de dentro de um container**, então qualquer um que executar docker exec pode acionar o payload.
Altere o payload conforme necessário e construa o main.go com `go build main.go`. O binário resultante deve ser colocado no container docker para execução.\
Após a execução, assim que mostrar `[+] Overwritten /bin/sh successfully`, você precisa executar o seguinte do host:
Para mais informações: [https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html](https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html)
Existem outros CVEs que o container pode ser vulnerável também, você pode encontrar uma lista em [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list)
* **Namespaces:** O processo deve ser **completamente separado de outros processos** via namespaces, então não podemos escapar interagindo com outros procs devido a namespaces (por padrão não pode comunicar via IPCs, sockets unix, serviços de rede, D-Bus, `/proc` de outros procs).
* **Capabilities**: Docker deixa as seguintes capabilities: `cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep`
* **Syscalls**: Estas são as syscalls que o **usuário root não poderá chamar** (por falta de capabilities + Seccomp). As outras syscalls poderiam ser usadas para tentar escapar.
If you are in **userspace** (**no kernel exploit** involved) the way to find new escapes mainly involve the following actions (these templates usually require a container in privileged mode):
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
<summary><strong>Learn AWS hacking from zero to hero with</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.