Gitea Security

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Що таке Gitea

Gitea - це легкий засіб для самостійного хостингу коду, управляється спільнотою, написаний на Go.

Основна інформація

pageBasic Gitea Information

Лабораторія

Для запуску екземпляра Gitea локально ви можете просто запустити контейнер Docker:

docker run -p 3000:3000 gitea/gitea

Підключіться до порту 3000, щоб отримати доступ до веб-сторінки.

Ви також можете запустити його за допомогою Kubernetes:

helm repo add gitea-charts https://dl.gitea.io/charts/
helm install gitea gitea-charts/gitea

Неаутентифіковане переліку

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

Внутрішня експлуатація

У цьому сценарії ми будемо припускати, що ви отримали деякий доступ до облікового запису github.

З обліковими даними користувача/веб-кукі

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

Зверніть увагу, що може бути використано 2FA, тому ви зможете отримати доступ до цієї інформації лише якщо ви також зможете пройти цю перевірку.

Зверніть увагу, що якщо ви вдалося вкрасти куки i_like_gitea (наразі налаштовано з SameSite: Lax), ви можете повністю видаавати користувача без необхідності облікових даних або 2FA.

З ключем SSH користувача

Gitea дозволяє користувачам встановлювати SSH-ключі, які будуть використовуватися як метод аутентифікації для розгортання коду в їхньому ім'я (без застосування 2FA).

З цим ключем ви можете виконувати зміни в репозиторіях, де користувач має деякі привілеї, однак ви не можете використовувати його для доступу до API gitea для переліку середовища. Однак ви можете перелічити локальні налаштування, щоб отримати інформацію про репозиторії та користувача, до яких у вас є доступ:

# Go to the the repository folder
# Get repo config and current user name and email
git config --list

Якщо користувач налаштував своє ім'я користувача як своє ім'я користувача gitea, ви можете отримати доступ до публічних ключів, які він встановив у своєму обліковому записі за адресою https://github.com/<gitea_username>.keys, ви можете перевірити це, щоб підтвердити, що знайдений вами приватний ключ може бути використаний.

SSH ключі також можуть бути встановлені в репозиторіях як ключі розгортання. Будь-хто, хто має доступ до цього ключа, зможе запускати проекти з репозиторію. Зазвичай на сервері з різними ключами розгортання локальний файл ~/.ssh/config надасть вам інформацію про пов'язаний ключ.

Ключі GPG

Як пояснено тут, іноді потрібно підписувати коміти, або вас можуть виявити.

Перевірте локально, чи є у поточного користувача який-небудь ключ за допомогою:

gpg --list-secret-keys --keyid-format=long

З використанням токена користувача

Для введення в Основну інформацію про токени користувача перевірте базову інформацію.

Токен користувача може бути використаний замість пароля для аутентифікації на сервері Gitea через API. Він матиме повний доступ до користувача.

З використанням Оauth-застосунку

Для введення в Основну інформацію про Оauth-застосунки Gitea перевірте базовну інформацію.

Атакувальник може створити шкідливий Оauth-застосунок, щоб отримати доступ до привілейованих даних/дій користувачів, які, ймовірно, приймають їх як частину кампанії зі шахрайства.

Як пояснено в базовій інформації, застосунок матиме повний доступ до облікового запису користувача.

Обхід захисту гілок

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

  • Увімкнути Push: Якщо хтось з правами запису може виконати push до гілки, просто зробіть push.

  • Біла список обмеженого Push: Так само, якщо ви є частиною цього списку, зробіть push до гілки.

  • Увімкнути білий список злиття: Якщо є білий список злиття, ви повинні бути в ньому

  • Вимагати затвердження більше 0: Тоді... вам потрібно скомпрометувати іншого користувача

  • Обмежити затвердження для користувачів у білому списку: Якщо тільки користувачі з білого списку можуть затверджувати... вам потрібно скомпрометувати іншого користувача, який знаходиться в цьому списку

  • Відхилити застарілі затвердження: Якщо затвердження не видаляються з новими комітами, ви можете захопити вже затверджене PR, щоб впровадити свій код та злити PR.

Зверніть увагу, що якщо ви є адміністратором організації/репозиторію, ви можете обійти захист.

Перелік веб-гачків

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

Веб-гачки можуть бути встановлені на рівні репозиторію та організації.

Після експлуатації

Усередині сервера

Якщо ви якимось чином змогли потрапити всередину сервера, де працює gitea, вам слід шукати файл конфігурації gitea. За замовчуванням він розташований в /data/gitea/conf/app.ini

У цьому файлі ви можете знайти ключі та паролі.

У шляху gitea (за замовчуванням: /data/gitea) ви також можете знайти цікаву інформацію, таку як:

  • sqlite DB: Якщо gitea не використовує зовнішню базу даних, він використовуватиме базу даних sqlite

  • сесії всередині папки сесій: Запускаючи cat sessions/*/*/* ви можете побачити імена користувачів, які увійшли в систему (gitea також може зберігати сесії всередині БД).

  • jwt приватний ключ всередині папки jwt

  • Більше чутливої інформації можна знайти в цій папці

Якщо ви знаходитесь всередині сервера, ви також можете використовувати бінарний файл gitea для доступу/зміни інформації:

  • gitea dump вивантажить gitea та згенерує файл .zip

  • gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET згенерує токен вказаного типу (постійність)

  • gitea admin user change-password --username admin --password newpassword Змінити пароль

  • gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token Створити нового адміністратора користувача та отримати токен доступу

Last updated