Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
forgejo-keys-idor — Forgejo 16.0.5 — высокий уровень — удалённо — IDOR — GET /api/v1/user/keys/{id} возвращает SSH-ключи и deploy-ключи других пользователей | Kitploit
Инструменты/GitHubGitHub/abraxas/forgejo-keys-idor
Аутентификация и авторизацияАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСбор информацииТестирование на ПроникновениеБезопасность APIЛаборатории и Практика
GitHubabraxas/forgejo-keys-idor

forgejo-keys-idor

Forgejo 16.0.5 — высокий уровень — удалённо — IDOR — GET /api/v1/user/keys/{id} возвращает SSH-ключи и deploy-ключи других пользователей

54 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

Abraxas Labs - forgejo-keys-idor

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  forgejo-keys-idor

forgejo-keys-idor

Класс: IDOR Доступ: Удалённый

Forgejo 16.0.5 (8d24b7d) - Forgejo

GET /api/v1/user/keys/{id} находится в группе текущего пользователя (reqToken, область пользователя). Обработчик по-прежнему загружает public_key по числовому ID без проверки владельца. В той же таблице хранятся пользовательские ключи, deploy-ключи и principals. GPG на этой версии делает всё правильно: GetGPGKeyForUserByID(ctx, ctx.Doer().ID, id). Приватные дополнительные поля защищены. А материал публичного ключа, заголовок и отпечаток — нет. ID последовательные.

Токен read:user перебирает 1, 2, 3 и инвентаризирует чужие SSH- и deploy-ключи.

IDCVE пока нет
КлассIDOR
ДоступУдалённый (аутентифицированный read:user / сессия)
CWECWE-639
CVSSHigh: 7.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
ПродуктForgejo
Затронутопо v16.0.5 (8d24b7d)
Аутентификацияаутентифицированный (токен read:user или сессия)
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

Что может сделать атакующий

Зарегистрироваться или использовать любой аккаунт, выпустить токен read:user (или использовать сессионную cookie), перебирать /api/v1/user/keys/{id}. Он получает заголовки, отпечатки и материал публичных ключей для ключей, которыми не владеет. Приватный ключ он не получает. Шелл он не получает. Он инвентаризирует, у кого есть доступ к чему.

ПривилегияМетод / sinkРазведка / целостность / доступностьДоказано в лаборатории или выведено
Чтение заголовка, отпечатка и материала SSH-публичного ключа другого пользователяGET /api/v1/user/keys/{id} как чужой владелецРазведка (конфиденциальность инвентаря публичных ключей)Доказано в лаборатории. Свидетель-заголовок FORGEJO-KEYS-IDOR-WITNESS на id 1; список атакующего содержит только id 2
Инвентаризация deploy-ключей тем же способомТот же обработчик, строки KeyTypeDeploy в public_key (OwnerID 0)РазведкаВыведено из таблицы. В лаборатории был размещён пользовательский SSH-ключ, а не deploy-ключ
Чтение principals SSH-сертификатовТот же обработчик, строки KeyTypePrincipal. ListPublicKeys исключает этот типРазведкаВыведено из таблицы
Просмотр ключей, принадлежащих ограниченным или приватным пользователямНет проверки видимости при этом поискеРазведкаВыведено из обработчика
Дополнительный JSON (user, key_type, read_only)appendPrivateInformation только если админ или владелецРазведкаДоказано в лаборатории как закрытое: в ответе не-владельца не было поля user

Закрыто на этом маршруте: материал приватного ключа, шелл, GET /users/{username}/keys (публичный список в области username), GPG GET /api/v1/user/gpg_keys/{id} (404 на чужой id), DeletePublicKey (403 для владельца/админа). Кросс-репозиторный GET /repos/{owner}/{repo}/keys/{id} возвращает 404, когда RepoID не совпадает.

Патчи безопасности v16.0.5 (#14370) были git-apply RCE и OpenID CSRF. Они не закрыли этот поиск. Тот же класс, что и gitea-user-keys-idor, независимо всё ещё открыт здесь.

Как я это нашёл

Я зафиксировал Forgejo v16.0.5 после волны 2026-09. В Gitea 1.27.3 этот поиск всё ещё был. Forgejo разошёлся, поэтому я перечитал обработчик ключей текущего пользователя рядом с GPG, вместо того чтобы копировать набор для Gitea. GPG возвращает 404 на чужой id. SSH — нет.

Уже зафиксированные неверные пути: считать собственный список атакующего утечкой (это не так — список ограничен областью, GET-by-id — нет); считать DISABLE_REGISTRATION=true на установщике закрытием (достаточно любого существующего аккаунта); reverse shell. Театр.

Лаборатория

python3 forgejo-keys-idor-Abraxas-Labs.py

или:

cd lab
./run.sh

Цель только http://127.0.0.1:19310. Образ codeberg.org/forgejo/forgejo:16.0.5. Два аккаунта. Свидетель FORGEJO-KEYS-IDOR-WITNESS.

IOC planted victim-id=1 attacker-id=2
IOC attacker-list status=200 ... title=attacker-own-key
IOC get id=1 status=200 ... FORGEJO-KEYS-IDOR-WITNESS
IOC gpg-neg id=1 status=404
SUCCESS forgejo-keys-idor victim-id=1 get-http=200 list-has-id=no gpg-http=404 FORGEJO-KEYS-IDOR-WITNESS

Исправление

404, если только key.OwnerID == ctx.Doer().ID (или администратор сайта). Отклонять KeyTypeDeploy / KeyTypePrincipal на этом маршруте. Соответствовать GetGPGKeyForUserByID.

Ссылки

  • codeberg.org/forgejo/forgejo тег v16.0.5
  • GetPublicKey
  • Тот же класс в Gitea: gitea-user-keys-idor
  • Рядом исправлено (не этот поиск): патчи безопасности v16.0.5
  • CWE-639

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только loopback-лаборатория. Без гарантий.

Скачать инструмент