Gitea Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Gitea - це самостійно хостинговане, кероване спільнотою легке рішення для хостингу коду, написане на Go.
Щоб запустити екземпляр Gitea локально, ви можете просто запустити контейнер docker:
Підключіться до порту 3000, щоб отримати доступ до веб-сторінки.
Ви також можете запустити його з kubernetes:
Публічні репозиторії: http://localhost:3000/explore/repos
Зареєстровані користувачі: http://localhost:3000/explore/users
Зареєстровані організації: http://localhost:3000/explore/organizations
Зверніть увагу, що за замовчуванням Gitea дозволяє новим користувачам реєструватися. Це не надасть особливо цікавого доступу новим користувачам до репозиторіїв інших організацій/користувачів, але увійшовший користувач може мати можливість переглядати більше репозиторіїв або організацій.
Для цього сценарію ми будемо припускати, що ви отримали доступ до облікового запису github.
Якщо ви якимось чином вже маєте облікові дані для користувача всередині організації (або ви вкрали сесійне кукі), ви можете просто увійти і перевірити, які дозволи у вас є на які репозиторії, в яких командах ви знаходитесь, перелічити інших користувачів і як захищені репозиторії.
Зверніть увагу, що може використовуватися 2FA, тому ви зможете отримати доступ до цієї інформації лише якщо зможете також пройти цю перевірку.
Зверніть увагу, що якщо вам вдасться вкрасти кукі i_like_gitea
(в даний час налаштоване з SameSite: Lax), ви можете повністю видати себе за користувача без необхідності в облікових даних або 2FA.
Gitea дозволяє користувачам встановлювати SSH ключі, які будуть використовуватися як метод аутентифікації для розгортання коду від їх імені (2FA не застосовується).
З цим ключем ви можете виконувати зміни в репозиторіях, де у користувача є певні привілеї, однак ви не можете використовувати його для доступу до gitea api для енумерації середовища. Однак ви можете перелічити локальні налаштування, щоб отримати інформацію про репозиторії та користувача, до яких у вас є доступ:
Якщо користувач налаштував своє ім'я користувача як своє gitea ім'я користувача, ви можете отримати доступ до публічних ключів, які він налаштував у своєму обліковому записі за адресою https://github.com/<gitea_username>.keys, ви можете перевірити це, щоб підтвердити, що приватний ключ, який ви знайшли, може бути використаний.
SSH ключі також можуть бути налаштовані в репозиторіях як ключі розгортання. Будь-хто, хто має доступ до цього ключа, зможе запускати проекти з репозиторію. Зазвичай на сервері з різними ключами розгортання локальний файл ~/.ssh/config
надасть вам інформацію про те, до якого ключа це відноситься.
Як пояснено тут, іноді потрібно підписувати коміти, інакше вас можуть виявити.
Перевірте локально, чи має поточний користувач будь-який ключ за допомогою:
Для введення про токени користувача перевірте основну інформацію.
Токен користувача може бути використаний замість пароля для автентифікації на сервері Gitea через API. він матиме повний доступ до користувача.
Для введення про додатки 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
створить нового адміністратора та отримає токен доступу.
Вчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)