Уязвимость Docker Swarm: секреты в контейнерах остаются доступны через docker exec
Встроенная система управления секретами Docker Swarm, предназначенная для безопасной передачи паролей и ключей, содержит критический недостаток. Любой пользователь с доступом к команде `docker exec` может прочитать эти секреты в любой момент работы контейнера, даже после их первоначальной загрузки. Это превращает стандартный механизм, монтирующий данные в `/run/secrets/`, в постоянный риск утечки, а не в одноразовую безопасную передачу.
Проблема заключается в том, что секреты, переданные через зашифрованный канал Swarm, после монтирования становятся статичными файлами в файловой системе контейнера. Они не самоуничтожаются после прочтения приложением. Это означает, что компрометация одного контейнера или злонамеренный инсайдер с правами на выполнение команд внутри среды могут извлечь все чувствительные данные — от ключей API до сертификатов — на протяжении всего жизненного цикла службы.
В качестве решения предлагается метод на основе именованных каналов (FIFO). Этот подход позволяет создать механизм, при котором секрет может быть прочитан ровно один раз — исключительно в момент старта приложения. После этого канал закрывается, делая данные физически недоступными для последующих операций `exec`. Такая архитектура устраняет постоянное окно уязвимости, хотя и требует изменения в логике инициализации приложения, перекладывая ответственность за безопасное однократное потребление секрета с инфраструктуры на код сервиса.