Gitea Security

Support HackTricks

What is Gitea

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

Basic Information

Lab

Щоб запустити екземпляр 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 не застосовується).

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

# 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. він матиме повний доступ до користувача.

З Oauth додатком

Для введення про Додатки Gitea Oauth перевірте основну інформацію.

Зловмисник може створити шкідливий Oauth додаток для доступу до привілейованих даних/дій користувачів, які, ймовірно, приймуть їх як частину фішингової кампанії.

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

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

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

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

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

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

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

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

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

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

Перерахувати вебхуки

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

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

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

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

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

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

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

  • sqlite БД: Якщо 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 Створити нового адміністратора та отримати токен доступу.

Підтримати HackTricks

Last updated