Вразливі базові образи
Ваші залежності перевіряють. Операційну систему під ними — ні.
Що таке Вразливі базові образи?
Залежності застосунку перевіряють після кожної зміни. Шар операційної системи під ними часто лишається без уваги. Рухомий тег на кшталт node:18 означає, що шар під вашим кодом змінюється щоразу, коли реєстр віддає щось нове, а вразливості знаходять із часом, тож образ, який був чистим під час випуску, сьогодні може бути критично вразливим. Ви просканюєте застарілий образ сервісу, знайдете CVE-2023-4863 у libwebp і перетворите її на віддалене виконання коду. Потім зафіксуєте базовий образ за точним дайджестом, перезберете образ і просканюєте його знову. Фіксація має свою ціну: потрібна свідома періодичність перезбирання.
Що ви дізнаєтесь у Вразливі базові образи
- Розпізнавайте, що рухомий тег базового образу дозволяє шару операційної системи під вашим кодом змінюватися, хоча ніхто цього не вирішував
- Скануйте розгорнутий образ на відомі вразливості та перетворюйте CVE-2023-4863 у libwebp на робоче віддалене виконання коду
- Поясніть, чому вразливість шару ОС не з'являється в жодному файлі залежностей і виправляється заміною базового образу, а не підвищенням версії пакета
- Фіксуйте базовий образ за точним дайджестом, щоб кожна збірка завантажувала ті самі байти, а зміна базового образу була комітом, який можна перевірити в рев'ю
- Перезбирайте образ і скануйте знову, щоб довести, що фіксація спрацювала, і плануйте свідому періодичність перезбирання, якої потребує зафіксований базовий образ
Вразливі базові образи — Кроки навчання
-
Образ scheduler у реєстрі
Боб має доступ на читання до реєстру контейнерів Bremhollow через токен облікового запису робота, який витік. Його цікавить не код, а те, наскільки свіжі образи: сервіс, який давно не перезбирали, — це сервіс, чий базовий образ непомітно постарів. Сервіс scheduler обробляє завантажені зображення, тож те, на чому його зібрано, дуже цікавить Боба. Відкрийте сторінку образу й подивіться, що каже реєстр.
-
Образ, що завмер
Реєстру не обов'язково помилятися, щоб допомогти Бобу. Один рядок показує йому, що розгорнутий образ старий і зібраний на рухомому базовому образі.
-
Просканіть базовий образ у пошуках лазівки
Боб завантажує образ і запускає сканер вразливостей — той самий інструмент, яким користувався б захисник. Код застосунку його не цікавить. Йому потрібна відома, опублікована вразливість у пакетах операційної системи, які базовий образ затягнув із собою, бо до таких вразливостей існують робочі експлойти.
-
Перетворіть CVE на оболонку
Результат сканування стає експлойтом лише тоді, коли хтось його використає. До CVE-2023-4863 існує публічний proof of concept (PoC): спеціально створений WebP, який переповнює libwebp у момент декодування. Сервіс scheduler декодує кожне завантажене зображення, тому Боб монтує файл PoC в одноразовий запуск вразливого образу й декодує його, доводячи, що виявлена вразливість — це робочий шлях до віддаленого виконання коду, ще до того, як він торкнеться продакшну.
-
Де криється вразливість
-
Сканер позначає парк образів
Компанія Bremhollow додала сканування образів у конвеєр, і перше повне сканування всього, що вже працює в продакшні, виявило те, що не може чекати.
-
Подивіться самі
Перш ніж щось змінювати, Аліса запускає те саме сканування розгорнутого образу. Вона хоче побачити саму вразливість, де вона міститься і чим насправді є базовий образ.
-
Відкрийте Dockerfile
Базовий образ обирається в одному рядку Dockerfile. Усе, що знайшов сканер, прийшло через цей рядок.
-
Знайдіть рухомий базовий образ
Тут немає ні одруківок, ні хибного синтаксису. Проблема — в одному рядку, який містить менше, ніж потрібно.
-
Зафіксуйте базовий образ за дайджестом
Тег — це мітка, яку можна пересунути; дайджест образу — відбиток його вмісту, і він ніколи не вкаже ні на що інше. Node 18 досяг кінця життєвого циклу в квітні 2025 року, тож виправленого базового образу node:18 уже не буде. Аліса переходить на збірку Node 22 LTS у варіанті slim і фіксує її за дайджестом образу, тож кожна наступна збірка завантажує ті самі перевірені байти, а зміна цієї фіксації стає свідомою зміною, яку можна перевірити в рев'ю.
Охоплення стандартів безпеки
CWE
- CWE-1104 Use of Unmaintained Third Party Components
- CWE-1395 Dependency on Vulnerable Third-Party Component
MITRE ATT&CK
- T1190 Exploit Public-Facing Application
CIS Controls
- CIS 7 Continuous Vulnerability Management
- CIS 2 Inventory and Control of Software Assets
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- ID.RA Risk Assessment
- ID.AM Asset Management