У 19% найпопулярніших Docker-образів немає пароля для root

Минулої суботи, 18 травня, Jerry Gamblin з Kenna Security перевірив 1000 найпопулярніших образів з Docker Hub на пароль для користувача root, що використовується в них. У 19% випадків він виявився порожнім.

У 19% найпопулярніших Docker-образів немає пароля для root

Передісторія з Alpine

Приводом для проведеного міні-дослідження став Talos Vulnerability Report, що з'явився цього місяця.ТАЛОС-2019-0782), автори якого – завдяки знахідці Peter Adkins з Cisco Umbrella – повідомили, що Docker-образи з популярним дистрибутивом для контейнерів Alpine не мають пароля для root:

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

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

Автори давали наступну рекомендацію користувачам, схильним до проблеми:

«Обліковий запис root має бути явно відключений у Docker-образах, зібраних на базі проблемних версій Alpine. Ймовірна експлуатація вразливості залежить від оточення, оскільки її успіх вимагає прокинутого зовні сервісу або додатку, що використовує Linux PAM або іншого такого механізму».

Проблема була усунута в 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-користувач у яких не має встановленого пароля:

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

Варто, втім, нагадати, що саме собою це явище не означає прямої вразливості у безпеці систем, які їх використовують: все залежить і від того, як саме вони застосовуються (Див. коментар з випадку з Alpine вище). Однак «мораль цієї байки» ми бачили вже багато разів: видима простота найчастіше має і зворотний бік, про який завжди необхідно пам'ятати і наслідки якого враховувати у своїх сценаріях застосування технології.

PS

Читайте також у нашому блозі:

Джерело: habr.com

Додати коментар або відгук