Хабрахабр

В 19% популярнейших Docker-образов нет пароля для root

В минувшую субботу, 18 мая, Jerry Gamblin из Kenna Security проверил 1000 самых популярных образов с Docker Hub на используемый в них пароль для пользователя root. В 19% случаев он оказался пустым.

Предыстория с Alpine

Поводом для проведённого мини-исследования стал появившийся ранее в этом месяце Talos Vulnerability Report (TALOS-2019-0782), авторы которого — благодаря находке Peter Adkins из Cisco Umbrella — сообщили, что Docker-образы с популярным дистрибутивом для контейнеров Alpine не имеют пароля для root:

3) содержат NULL-пароль для пользователя root. «Официальные версии Docker-образов Alpine Linux (начиная с v3. Её суть сводится к тому, что системы, развёрнутые с проблемными версиями Alpine Linux в контейнере и использующие Linux PAM или другой механизм, задействующий системный файл shadow в качестве базы данных для аутентификации, могут принимать нулевой (NULL) пароль для пользователя root». Эта уязвимость появилась в результате регрессии, представленной в декабре 2015 года.

Проверенными на проблему версиями Docker-образов с Alpine назывались 3.3—3.9 включительно, а также последний релиз edge.

Авторы давали следующую рекомендацию пользователям, подверженным проблеме:

Вероятная эксплуатация уязвимости зависит от окружения, поскольку её успех требует проброшенного вовне сервиса или приложения, использующего Linux PAM или другого подобного механизма». «Учётная запись root должна быть явно отключена в Docker-образах, собранных на базе проблемных версий Alpine.

Проблема была устранена в Alpine версий 3.6.5, 3.7.3, 3.8.4, 3.9.2 и edge (20190228 snapshot), а обладателям подверженным ей образов предложили закомментировать строку с root в /etc/shadow или убедиться в отсутствии пакета linux-pam.

Продолжение с Docker Hub

Jerry Gamblin решил полюбопытствовать, «насколько распространённой может оказаться практика использования null-паролей в контейнерах». Для этого он написал небольшой Bash-скрипт, суть которого весьма проста:

  • через curl-запрос к API в Docker Hub запрашивается список размещённых там Docker-образов;
  • через jq он сортируется по полю popularity, а из полученных результатов остаётся первая тысяча;
  • для каждого из них выполняется docker pull;
  • для каждого полученного с Docker Hub образа выполняется docker run с чтением первой строки из файла /etc/shadow;
  • если значение строки оказалось равным root:::0:::::, название образа сохраняется в отдельный файл.

Что же получилось? В этом файле оказалось 194 строки с названиями популярных Docker-образов с Linux-системами, root-пользователь в которых не имеет установленного пароля:

А kylemanna/openvpn — самый популярный контейнер из списка, его статистика насчитывает более 10 миллионов pull'ов». «Среди наиболее известных имён в этом списке оказались govuk/governmentpaas, hashicorp, microsoft, monsanto и mesosphere.

Стоит, впрочем, напомнить, что само по себе это явление не означает прямой уязвимости в безопасности систем, которые их используют: всё зависит и от того, как именно они применяются (см. комментарий из случая с Alpine выше). Однако «мораль сей басни» мы видели уже много раз: видимая простота зачастую имеет и обратную сторону, о которой всегда необходимо помнить и последствия которой учитывать в своих сценариях применения технологии.

P.S.

Читайте также в нашем блоге:

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть