Abusing Docker Socket for Privilege Escalation
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Bazen sadece docker soketine erişiminiz olur ve bunu yetki yükseltmek için kullanmak istersiniz. Bazı eylemler çok şüpheli olabilir ve bunlardan kaçınmak isteyebilirsiniz, bu yüzden burada yetki yükseltmek için faydalı olabilecek farklı bayraklar bulabilirsiniz:
Farklı dosya sistemi parçalarını kök olarak çalışan bir konteynerde mount edebilir ve bunlara erişebilirsiniz. Ayrıca konteyner içinde yetki yükseltmek için bir mount'ı istismar edebilirsiniz.
-v /:/host
-> Ana bilgisayar dosya sistemini konteynerde mount edin, böylece ana bilgisayar dosya sistemini okuyabilirsiniz.
Ana bilgisayarda bulunduğunuz hissini yaşamak istiyorsanız ama konteynerde iseniz, şunları kullanarak diğer savunma mekanizmalarını devre dışı bırakabilirsiniz:
--privileged
--cap-add=ALL
--security-opt apparmor=unconfined
--security-opt seccomp=unconfined
-security-opt label:disable
--pid=host
--userns=host
--uts=host
--cgroupns=host
**--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined
** -> Bu, önceki yönteme benzer, ancak burada cihaz diskini mount ediyoruz. Ardından, konteyner içinde mount /dev/sda1 /mnt
komutunu çalıştırın ve /mnt'de ana bilgisayar dosya sistemine erişebilirsiniz.
Mount etmek için </dev/sda1>
cihazını bulmak için ana bilgisayarda fdisk -l
komutunu çalıştırın.
-v /tmp:/host
-> Eğer bir nedenle sadece ana bilgisayardan bazı dizinleri mount edebiliyorsanız ve ana bilgisayarda erişiminiz varsa. Mount edin ve mount edilen dizinde suid ile bir /bin/bash
oluşturun, böylece ana bilgisayardan çalıştırabilir ve root'a yükselebilirsiniz.
Belirli bir nedenle /tmp
dizinini mount edemeyebilirsiniz, ancak farklı yazılabilir bir dizini mount edebilirsiniz. Yazılabilir dizinleri bulmak için: find / -writable -type d 2>/dev/null
komutunu kullanabilirsiniz.
Unutmayın ki, bir linux makinesindeki tüm dizinler suid bitini desteklemeyecektir! Hangi dizinlerin suid bitini desteklediğini kontrol etmek için mount | grep -v "nosuid"
komutunu çalıştırın. Örneğin genellikle /dev/shm
, /run
, /proc
, /sys/fs/cgroup
ve /var/lib/lxcfs
suid bitini desteklemez.
Ayrıca, eğer /etc
veya konfigürasyon dosyalarını içeren başka bir dizini mount edebiliyorsanız, bunları docker konteynerinden root olarak değiştirip ana bilgisayarda istismar edebilir ve yetki yükseltebilirsiniz (belki /etc/shadow
'ı değiştirerek).
--privileged
-> Bu bayrak ile konteynerden tüm izolasyonu kaldırırsınız. Kök olarak ayrıcalıklı konteynerlerden kaçış tekniklerini kontrol edin.
--cap-add=<CAPABILITY/ALL> [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]
-> yetenekleri istismar ederek yetki yükseltmek için, bu yeteneği konteynere verin ve istismarın çalışmasını engelleyebilecek diğer koruma yöntemlerini devre dışı bırakın.
Bu sayfada docker bayraklarını kullanarak yetki yükseltme yollarını tartıştık, curl komutunu kullanarak bu yöntemleri istismar etmenin yollarını bulabilirsiniz:
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)