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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/0xsemizzz/cve-2026-92162
Повышение привилегийАнализ уязвимостейЭксплуатацияПост-эксплуатацияТестирование на ПроникновениеСтатьи и ИсследованияОбучение и Образование
GitHub0xsemizzz/cve-2026-92162

CVE-2026-92162

Образовательный разбор и PoC в тестовом режиме для CVE-2026-92162 — обхода пути в параметре arch DeployAppstream Flatpak, позволяющего создавать каталоги в корне.

Репозиторий
14 ч 40 мин назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-92162: Обход пути через arch в Flatpak DeployAppstream

Образовательный разбор и proof of concept в тестовом режиме для обхода пути в системном помощнике Flatpak (flatpak-system-helper). Метод D-Bus DeployAppstream принимает строку arch, которая помещается в путь файловой системы и создаётся от имени root без какой-либо валидации. Активный локальный пользователь может передать компоненты ../ и заставить привилегированную службу root создавать каталоги за пределами предполагаемого дерева appstream.

Этот репозиторий сопровождает полный технический анализ и post-mortem исследования. Он существует для образования, для защитников, желающих понять механизм, и для авторизованного тестирования на системах, которыми вы владеете или на которые у вас есть письменное разрешение на оценку.

Ответственное использование

Этот материал публикуется после скоординированного раскрытия и после того, как исправленный релиз Flatpak стал доступен. Запускайте proof of concept только на лабораторной машине, которой вы владеете или которую вам явно разрешено тестировать. Не запускайте его против систем, которые вы не контролируете. Вы несёте ответственность за соблюдение закона и рамок любых имеющихся у вас разрешений.

Суть проблемы в одном абзаце

handle_deploy_appstream() в системном помощнике валидирует аргумент origin, но не аргумент arch. Для OCI-remote arch попадает в flatpak_build_file, а затем в g_mkdir_with_parents, который выполняется от имени root и разрешает ../ лексически. Действие polkit для этого метода — org.freedesktop.Flatpak.appstream-update, у которого allow_active=yes, так что активная локальная сессия достигает кода без запроса пароля. На системе, где уже есть OCI-remote, например в стандартной Fedora Workstation с её remote fedora, низкопривилегированный пользователь может создавать каталоги, принадлежащие root, по произвольному пути. Полезная нагрузка в этом репозитории нацелена на сам /root/.ssh.

Часть цепочки из двух уязвимостей

Эта уязвимость, Finding A, была продемонстрирована как часть цепочки из двух уязвимостей, использованной для повышения привилегий от неаутентифицированного локального пользователя до root на машине, в контролируемой и авторизованной лаборатории. Цепочка работает следующим образом: Finding A создаёт /root/.ssh от имени root. Finding B, вторичный примитив записи, затем может записать контролируемое атакующим содержимое в этот каталог. Вместе они дают атакующему файл, принадлежащий root, по выбранному атакующим пути. Каждая ошибка по отдельности ограничена: Finding A только создаёт каталоги, а Finding B может писать только туда, где родительский каталог уже существует. Finding A предоставляет родительский каталог, необходимый Finding B, и пара превращается в запись файла от имени root.

Finding B был независимо выявлен в этом исследовании, но это не новая находка: это известная, всё ещё не исправленная слабость в пути записи дополнительных данных Deploy, задокументированная в post-mortem исследования. Поэтому данный разбор охватывает и засчитывает Finding A, а Finding B используется только как известный, неисправленный компонент, на который опирается цепочка.

Этот репозиторий демонстрирует только Finding A. Методология построения цепочки и защитные уроки задокументированы в post-mortem исследования.

Исправление

Проект уже поставляет flatpak_is_valid_arch, который ограничивает имя архитектуры символами [A-Za-z0-9_]. Исправление заключается в вызове этой функции для аргумента arch на границе обработчика и внутри вспомогательных функций построения пути. Значение ../ не может пройти этот предикат. Обновитесь до исправленного релиза Flatpak.

Структура репозитория

root@kitploit:~
.
├── README.md                 Этот файл.
├── requirements.txt          Системные пакеты-предварительные требования для PoC.
└── poc_arch_traversal.sh     PoC для невалидированного параметра arch.
                              По умолчанию песочный тестовый режим, production
                              режим нацелен на /root/.ssh. Только для образовательных целей.

Как использовать

Предварительные требования

  • Машина Linux с установленным flatpak и пакетами из requirements.txt.
  • Локальный вход в консоль (не SSH), если вы запускаете production режим, поскольку триггер опирается на polkit allow_active=yes. Проверьте с помощью: loginctl list-sessions и убедитесь, что ваша сессия показывает seat.
  • OCI-реестр не нужен. Каталог создаётся до любого сетевого запроса, поэтому URL реестра никогда не будет успешно достигнут.
  • Бинарный файл помощника по умолчанию — /usr/libexec/flatpak-system-helper; скрипт сначала ищет свежесобранный помощник в builddir/ или _build/ дерева исходников Flatpak, а FLATPAK_SYSTEM_HELPER переопределяет всё. См. requirements.txt для необходимых системных пакетов.

Шаг 0: проверьте наличие OCI-remote

Production режим автоматически определяет существующий OCI-remote в системной установке и использует его. Подходит любой OCI-remote, даже поддельный или недоступный, поскольку mkdir происходит до любого обращения к реестру. Если OCI-remote не существует, скрипт отменяется с сообщением "No OCI remote found" и ничего не отправляет.

Fedora Workstation уже поставляет OCI-remote fedora, так что там ничего делать не нужно. Проверьте, что существует, с помощью flatpak remotes --system (OCI-remote показывает oci в столбце опций).

Шаг 1: добавьте OCI-remote (только если Шаг 0 не нашёл ни одного)

Это единственная команда во всём процессе, требующая sudo, и скрипт никогда не запускает её за вас. Добавьте один с помощью:

root@kitploit:~
sudo flatpak remote-add --system --no-gpg-verify oci-poc oci+http://127.0.0.1:19876

(у flatpak нет флага --oci, по крайней мере до 1.19.0, версии, на которой основана эта работа; именно префикс URL oci+ делает remote OCI-реестром.) Сообщение "Warning: Could not update extra metadata" ожидаемо, когда реестр не запущен; remote всё равно добавляется.

Шаг 2: запустите песочный тестовый режим (безопасно, без root)

root@kitploit:~
bash poc_arch_traversal.sh

Скрипт запускает приватную шину D-Bus и помощник в режиме --session, всё во временном каталоге. Он вызывает DeployAppstream с полезной нагрузкой ../../../../../root/.ssh и проверяет, что вышедший за пределы каталог был создан по пути <workdir>/root/.ssh, повторяя реальную цель. Ожидайте ошибку D-Bus в середине вывода: это неудачная выборка OCI-индекса после того, как каталог уже был создан, и это ожидаемое поведение.

Шаг 3: запустите production режим (создаёт /root/.ssh от имени root)

root@kitploit:~
bash poc_arch_traversal.sh prod

Скрипт никогда не запрашивает пароль. Он автоматически определяет OCI-remote, запускает DeployAppstream без аутентификации с полезной нагрузкой обхода пути и выводит ответ помощника. Помощник root создаёт /root/.ssh, а затем терпит неудачу на недоступном реестре, что выводит ожидаемую ошибку D-Bus. Если вместо этого ответ — ошибка аутентификации, вы не в активной локальной сессии; запустите это с консоли машины. Конкретный remote можно задать принудительно с помощью bash poc_arch_traversal.sh prod <remote>.

Шаг 4: проверьте сами

Сам триггер выполняется без привилегий, но для подтверждения результата нужен root, поэтому скрипт оставляет это вам. После запуска на той же машине:

root@kitploit:~
sudo ls -laR /root/.ssh
sudo stat -c '%U:%G' /root/.ssh

Каталог должен существовать и принадлежать root:root. Ошибка D-Bus в выводе скрипта — не неудача: она доказывает, что mkdir выполнился до выборки, так как вышедший за пределы каталог существует, хотя вызов метода завершился неудачей.

Если /root/.ssh уже существовал до запуска (например, на хосте с работающим sshd), запуск является no-op для этого пути и ничего после себя не оставляет: файл lock помощника является временным и удаляется при возврате метода, а icons записывается только после успешной выборки индекса. Для чистой проверки запускайте против пути, который ещё не существует.

Очистка

root@kitploit:~
sudo rm -rf /root/.ssh      # только если он не существовал до запуска
sudo flatpak remote-delete --system oci-poc

Благодарности

Исследование и разбор выполнены Yehia Ali Mohamed Ezzat.

  • GitHub: 0xSemizzz
  • Сайт: https://0xsemizzz.vercel.app/

Лицензия

Документация и код в этом репозитории предоставлены в образовательных целях. Используйте на свой риск и только там, где вы авторизованы.

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