Шкідливі пул-реквести

Шкідливі пул-реквести

Виправлення справжнє. Файл, якого воно ще торкається, — не частина цього виправлення.

Що таке Шкідливі пул-реквести?

Шкідливий пул-реквест атакує рев'ю, а не код. Зміна невелика, опис корисний, а одна правка ховається у файлі, якого опис ніде не згадує. Ви самі подасте такий пул-реквест: справжнє виправлення нестабільного тесту плюс прихований у скрипті розгортання рядок, що надсилає всі змінні CI на сервер, який ви контролюєте. Далі ви переглянете його вже як мейнтейнерка й прочитаєте кожен змінений файл замість того, щоб довіряти опису. Нарешті ви закріпите це виявлення в правилах проєкту: CODEOWNERS, обов'язкове рев'ю від власників коду та обмеження на те, що можуть запускати пул-реквести з форків.

Що ви дізнаєтесь у Шкідливі пул-реквести

Шкідливі пул-реквести — Кроки навчання

  1. Оцініть проєкт

    Сьогодні Боб націлюється на Fennroot — проєкт із відкритим кодом, що створює інструменти для розробників і приймає пул-реквести від будь-кого. Він починає там, де почав би будь-який контриб'ютор: у публічному репозиторії Harrow, інструмента збірки проєкту. Відкритий проєкт — це відчинені двері: будь-хто може зробити форк, змінити код і відкрити пул-реквест. Боб прийшов не допомагати. Йому потрібно, щоб його код злили, а єдина перешкода — рев'ю зайнятого мейнтейнера.

  2. Форк і клонування

    Боб створює форк репозиторію у власному обліковому записі та клонує форк локально, щоб унести зміни й надіслати їх назад як пул-реквест. Його план простий: додати одну справді корисну зміну як прикриття, а поруч сховати другу, не пов'язану з першою.

  3. Прикриття й ціль

    Прикриття в Боба справжнє: він виправляє справді нестабільний тест повторних спроб, а такий невеликий внесок проєкт радо приймає. Ця зміна чесна й корисна, і в цьому вся суть: вона робить пул-реквест схожим на рутинний. Але насправді Боб націлився на зовсім інший файл. Він відкриває скрипт розгортання, який не пов'язаний із жодним тестом, і читає його ще без змін.

  4. Підкиньте бекдор

    Боб додає в скрипт розгортання один рядок. Цей рядок схожий на безневинний фрагмент телеметрії збірки, але надсилає всі змінні середовища на сервер, який контролює Боб. Скрипт розгортання виконується в CI проєкту, де серед цих змінних є ключі розгортання й токени реєстру. Один рядок у файлі, якого пул-реквест ніде не згадує. Це і є вся атака.

  5. Сховано на видноті

    Цей рядок читається як те, що міг би додати інженер зі збірки, і стоїть серед звичайних кроків розгортання. Ніщо в ньому не віщує атаку, і саме тому він лишається непоміченим, коли код лише побіжно проглядають.

  6. Закомітьте обидві зміни

    Боб додає обидві правки до індексу й комітить їх разом: справжнє виправлення тесту та рядок у скрипті розгортання — в одному коміті. У такій зв'язці шкідлива зміна потрапляє в проєкт услід за чесною.

  7. Надішліть зміни у форк

    Боб надсилає гілку у свій форк. Це надсилання потрапляє до його власної копії репозиторію, а платформа у відповідь показує посилання, щоб відкрити пул-реквест до репозиторію Fennroot.

  8. Відкрийте пул-реквест

    Боб відкриває пул-реквест до репозиторію Fennroot. Він пише заголовок і опис, у яких ідеться лише про нестабільний тест і немає жодного слова про скрипт розгортання. Виправлення тесту — це історія, яку Боб хоче, щоб рев'юер прочитав. Бекдор у ній не згадано зовсім.

  9. Підштовхніть до злиття

    Коли пул-реквест відкрито, Боб додає дружній коментар, у якому квапить зі злиттям. Він залишає цей коментар біля рядка з тестом, щоб погляд рев'юера впав саме туди, а не на скрипт розгортання. Невеликий соціальний тиск: схвалити швидко, поки ніхто не вчитався.

  10. Перевірка знань

Охоплення стандартів безпеки

CWE

  • CWE-494 Download of Code Without Integrity Check
  • CWE-345 Insufficient Verification of Data Authenticity

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