Обхід захисту відгалуження
Заблокуйте головну частину, перш ніж хтось з силою штовхне її.
Що таке Обхід захисту відгалуження?
Гілка за умовчанням без захисту приймає все, що їй надіслано. Будь-хто з push-доступом може здійснювати прямо в main або примусово push через свою історію. Перегляд і перевірка статусу працюють, лише якщо через них щось змушує змінитися. Ви перейдете безпосередньо на головну сторінку з підробленими обліковими даними учасника, а потім примусово перейдете до історії та спостерігатимете, як CI пропускається. Ви додасте захист розгалужень: потрібен запит на отримання, рецензенти, проходження перевірок і відсутність примусових натискань із увімкненим параметром include-administrators, оскільки правило, яке можуть обійти привілейовані облікові записи, не є контролем.
Що ви дізнаєтесь у Обхід захисту відгалуження
- Зрозумійте, що дозволяє незахищена гілка за замовчуванням: пряме натискання та примусове натискання, які переписують історію та обходять перевірку запитів на отримання та перевірку стану CI
- Простежте, як один скомпрометований обліковий запис учасника може відправити неперевірений код прямо у виробництво, коли зливається з автоматичним розгортанням гілки за замовчуванням
- Зрозумійте, чому примусове надсилання до спільної гілки є небезпечним, оскільки воно переписує історію, яку інші переглядали та створювали, і може стерти коміти без запису
- Застосовуйте правила захисту гілок, які вимагають запиту на отримання, обов’язкових рецензентів і проходження перевірок стану, а також які блокують примусове натискання на гілку за замовчуванням
- Увімкніть параметр include-administrators, щоб правило не можна було обійти привілейованими обліковими записами, роблячи контроль доступним для всіх
Обхід захисту відгалуження — Кроки навчання
-
Викрадене місце учасника
Сьогодні Боб націлений на Riftwell, компанію з програмного забезпечення для логістики. Він фішингував облікові дані учасника для репозиторію dispatch-api і хоче, щоб його власний код запускався у виробництві, без жодної особи, яка його попередньо перевіряє. Він починає з відкриття сховища, куди може перейти викрадений обліковий запис.
-
Ніщо не охороняє головне
Панель стану сховища повідомляє Бобу все, що йому потрібно. Гілкою за замовчуванням є головна, її захист гілки не читає нічого, і кожне натискання на основну розгортається прямо у виробництво. Не маючи правил на гілці, він може натиснути безпосередньо на неї та силою проштовхнути її історію, і все, що приземлиться, самостійно відправляється у виробництво.
-
Клонуйте репозиторій
Боб клонує репозиторій локально з викраденим обліковим записом, щоб він міг переписати його історію та створити свої зміни, перш ніж перемістити його назад до основного.
-
Перемотування назад після перевірки
Остання перевірена фіксація на головному додала журнал аудиту до служби автентифікації, саме той запис, який позначатиме зміну, яку збирається зробити Боб. Тож він починає з перемотування свого локального основного коміту, повністю відкидаючи цей комміт журналювання аудиту. На захищеній гілці це було б неможливо. Тут це одна команда.
-
Примусовий поштовх над основним
Боб силою штовхає свою перемотану історію прямо на основну сторінку. Оскільки гілка не має захисту, сервер приймає її, і перевірене повідомлення журналу аудиту видаляється зі спільної гілки, ніби її ніколи не було об’єднано. Усі інші, хто витягне main, тепер також мовчки втратять цю фіксацію. Ось що робить примусове підштовхування до спільної гілки: воно переписує історію, яку інші люди вже переглянули та створили.
-
Відкрийте проміжне програмне забезпечення авторизації
Тепер Боб додає власний код. Він відкриває проміжне програмне забезпечення автентифікації, файл, через який проходить кожен запит до диспетчерського API, і читає його, перш ніж торкатися до нього.
-
Посадити обійстя
Боб додає короткий блок у верхній частині проміжного програмного забезпечення. Це виглядає як прокладка сумісності для застарілого ретранслятора, але будь-який запит, що містить одне фіксоване значення заголовка, пропускається як адміністратор без маркера та перевірки підпису. Задні двері в кожен маршрут, який захищає служба, замаскований під нешкідливу сантехніку.
-
Похований на очах
Доданий блок знаходиться серед звичайного проміжного ПЗ і читається як щось, що міг би написати інженер бекенда. З першого погляду в ньому немає нічого страшного, саме тому він витримає швидкий огляд, якщо такий перегляд взагалі відбудеться.
-
Перейти до основного
Боб вносить зміни безпосередньо в main із повідомленням про тайм-аут ретрансляції, без жодної згадки про автентифікацію. Немає розгалуження та запиту на отримання; комміт уже знаходиться на гілці за замовчуванням у своєму клоні.
-
Прямо до виробництва
Боб переміщує комміт прямо в main. Немає жодного запиту на відкриття, рецензента, який би його схвалив, і перевірки статусу, яку потрібно пройти. Гілка приймає це, і оскільки зливається з основним автоматичним розгортанням, його задні двері працюють у робочому стані через кілька секунд.
Охоплення стандартів безпеки
CWE
- CWE-285 Improper Authorization
- CWE-862 Missing Authorization
MITRE ATT&CK
- T1195.002 Supply Chain Compromise: Compromise Software Supply Chain
CIS Controls
- CIS 16 Application Software Security
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
- PR.PS Platform Security