/var/run/docker.sock - сокет, через який клієнти керують демоном Docker. Демон працює від root і виконує будь-які команди API: створює контейнери з будь-якими параметрами.
Хто має доступ до сокета - той має root на хості. Наприклад:
docker run -v /:/host --rm -it alpine chroot /host sh
Новий контейнер монтує кореневу файлову систему хоста, і chroot дає повноцінну оболонку root на хості: читання /etc/shadow, SSH-ключів, зміна системних файлів, встановлення бекдора.
Що це означає на практиці:
1. Монтування сокета в контейнер (-v /var/run/docker.sock:/var/run/docker.sock) - популярне для Traefik, Portainer, агентів моніторингу, CI-раннерів, Watchtower. Якщо такий контейнер зламано (вразливість у вебінтерфейсі, ланцюжку постачання), зловмисник отримує весь хост.
2. Група docker на хості - користувач у ній фактично root без sudo. Додавати в неї варто лише тих, кому довіряєте як адміністраторам.
3. TCP-доступ до демона без TLS (-H tcp://0.0.0.0:2375) - відкритий root для всього інтернету. Такі демони масово знаходять і використовують для криптомайнінгу.
Як зменшити ризик:
- не монтувати сокет без крайньої потреби; якщо інструмент може працювати інакше (файловий провайдер Traefik замість Docker-провайдера) - обрати інший спосіб;
- проксі сокета з білим списком дозволених викликів API (наприклад,
tecnativa/docker-socket-proxy): Traefik отримує лише читання списку контейнерів, а не створення нових; - монтування
:roне допомагає - це лише права на файл сокета, а не на дії через API; - rootless Docker - демон працює від звичайного користувача, і доступ до сокета дає права цього користувача, а не root;
- CI-збирання - замість Docker-in-Docker через сокет хоста використовувати ізольовані раннери чи збирання без демона (BuildKit rootless, Kaniko, Buildah);
- віддалений доступ до демона - лише через SSH (
DOCKER_HOST=ssh://...) чи TLS з клієнтськими сертифікатами.
На співбесіді це питання перевіряє розуміння, що Docker API - привілейований інтерфейс, а не «просто інструмент розробника».
Докладніше в документації: Безпека Docker Engine: поверхня атаки демона