Спуфінг автора коміту
Будь-який коміт може назвати ваше ім'я. Довести авторство може лише підпис.
Що таке Спуфінг автора коміту?
Git дослівно записує ім'я й адресу автора з локальної конфігурації. Ніщо їх не перевіряє, тож будь-хто може робити коміти під чужим іменем, а поле автора — це заява, а не доказ. Лише підпис GPG або SSH прив'язує коміт до ключа, яким хтось володіє. Ви візьмете з історії репозиторію ім'я й адресу мейнтейнерки, задасте їх локально і внесете зміну, що скорочує порівняння підпису вебхука до восьми символів. Потім знайдете позначку «Не перевірено», увімкнете вимогу підписаних комітів без винятку для адміністраторів і побачите, як push відхиляється.
Що ви дізнаєтесь у Спуфінг автора коміту
- Розпізнавайте, що ім'я й адреса автора коміту — це заявлені самим автором дані локальної конфігурації Git, які може задати будь-хто, тож поле автора є заявою, а не доказом особи
- Розумійте, як підроблений автор позичає ім'я довіреної мейнтейнерки, щоб шкідлива зміна виглядала звичайною в журналі гілки, який рев'юер переглядає перед релізом
- Усвідомлюйте, що адреси авторів зберігаються в кожному коміті й потрапляють до кожного, хто клонує, тож зловмисник може дізнатися, кого видавати за себе, просто з репозиторію
- Розрізняйте коміт із позначкою «Перевірено», підкріплений криптографічним підписом, і коміт із позначкою «Не перевірено», чиє поле автора не доведено
- Застосовуйте виправлення: вимагайте підписані коміти на спільних гілках без винятку для адміністраторів, щоб сервер відхиляв непідписану роботу, а не покладався на те, що хтось помітить позначку
Спуфінг автора коміту — Кроки навчання
-
Гілка, у яку він уже може надсилати зміни
Сьогодні Боб націлився на Voxmere — компанію з платіжної інфраструктури, де він працює підрядником. Контракт дає йому право надсилати (push) зміни в спільну гілку integration репозиторію ledger-core, і це нормально: саме там контриб'ютори збирають свою роботу. Натомість у нього немає способу змусити будь-кого довіряти цій роботі. Нічого з integration не йде в реліз, доки мейнтейнер не прочитає журнал гілки й не перенесе її в main.
-
Клонуйте сервіс
Боб клонує ledger-core — сервіс, через який у Voxmere проходять усі розрахунки, повернення коштів і звірки. Як підрядник він має доступ на читання, тож це звичайна робоча копія.
-
Дістаньте імена з історії
Бобу потрібні точні дані автора, під якими працює мейнтейнерка, і вгадувати їх чи видурювати фішингом не доведеться. Кожен коміт, створений будь-коли, містить ім'я й адресу свого автора, а журнал виведе їх на запит. Одне ім'я повторюється значно частіше за інші. Дара Вітлок — мейнтейнерка, чиї зміни проходять без суперечок, тож саме її ім'я варто позичити.
-
Позичте ім'я
Боб налаштовує локальну конфігурацію Git на ім'я Дари Вітлок. Тут немає ні запиту, ні перевірки, ні підтвердження: команда задає рядок, і Git цьому вірить.
-
Позичте адресу
Тепер електронна адреса. Вона важливіша за ім'я: Git-платформа зіставляє адресу автора коміту з обліковим записом користувача, тож відтепер коміти Боба відображатимуться з профілем Дари та її аватаром.
-
Функція перевірки вебхука
Боб відкриває файл, заради якого прийшов. Кожна платіжна подія, що доходить до реєстру, надходить як вебхук, підписаний платіжним процесором, і саме ця функція вирішує, чи підпис дійсний. Наразі вона виконує порівняння за сталий час і звіряє весь дайджест. Усе правильно.
-
Скоротіть порівняння
Боб змінює один рядок. Порівняння, як і раніше, виконується, користується тією самою допоміжною функцією і так само скидається на перевірку підпису. Просто воно зупиняється після перших восьми символів. Він подає це як оптимізацію швидкодії, бо саме так це й виглядає.
-
Скільки коштують вісім символів
Повний підпис — це 64 шістнадцяткові символи. Якщо порівнювати лише вісім, лишається 32 біти, тобто близько чотирьох мільярдів варіантів. Такий перебір терплячий зловмисник може довести до кінця, тоді як повне порівняння не піддалося б ніколи. Тоді кожен, хто має доступ до ендпоінта вебхука, зможе підписати будь-які платіжні події, і реєстр прийматиме кожну з них як справжню.
-
Закомітьте під позиченим ім'ям
Боб робить коміт. Він не передає жодного прапорця, нічого не перевизначає і не використовує спеціальну команду: Git просто ставить на коміт ім'я та адресу, які Боб задав кілька кроків тому.
-
Перечитайте результат
Боб перевіряє свою роботу. Коміт, який він щойно зробив, вказує автором Дару Вітлок, а поруч стоїть її адреса. У виводі немає нічого, що позначало б цей коміт як незвичний, бо з погляду Git нічого незвичного не сталося. Він записав те ім'я, яке йому дали.
Охоплення стандартів безпеки
CWE
- CWE-345 Insufficient Verification of Data Authenticity
- CWE-347 Improper Verification of Cryptographic Signature
MITRE ATT&CK
- T1036 Masquerading
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