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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-41651 — # Эксплойт для CVE-2026-41651 PoC-эксплойт для CVE-2026-41651 — локального повышения привилегий TOCTOU в PackageKit, с техническим анализом, логикой обнаружения и рекомендациями по устранению уязвимости. | Kitploit
Инструменты/GitHubGitHub/baph00met/cve-2026-41651
Повышение привилегийАнализ уязвимостейЭксплуатацияТестирование на ПроникновениеRed TeamingЛаборатории и Практика
GitHubbaph00met/cve-2026-41651

CVE-2026-41651

# Эксплойт для CVE-2026-41651 PoC-эксплойт для CVE-2026-41651 — локального повышения привилегий TOCTOU в PackageKit, с техническим анализом, логикой обнаружения и рекомендациями по устранению уязвимости.

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

Популярное

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

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

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

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

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

CVE-2026-41651 — PackageKit TOCTOU локальное повышение привилегий

Классификация: Артефакт оценки Purple Team
Только для авторизованного использования. Этот документ и прилагаемый тестовый скрипт предназначены исключительно для внутренней проверки безопасности на системах, где получено письменное разрешение.


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

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


Содержание

  1. Обзор уязвимости
  2. Технический анализ
  3. Описание тестового скрипта
    • Поведение
    • Поддержка усиленных сред
    • Совместимость
  4. Индикаторы компрометации
    • Файловая система
    • Процессы и выполнение
    • Активность D-Bus
    • Паттерны журналов аудита
    • Артефакты менеджера пакетов
    • Артефакты повышения привилегий
  5. Логика обнаружения
  6. Затронутые системы и версии
  7. Устранение
  8. Ссылки

Обзор уязвимости

PackageKit — это уровень абстракции D-Bus для системного управления пакетами, присутствующий по умолчанию на GNOME-десктопах в Debian, Ubuntu, Fedora, RHEL, SUSE и Arch Linux. Поскольку он опосредует привилегированные операции с пакетами от имени непривилегированных пользователей, ошибка в его потоке авторизации имеет системное воздействие уровня root.


Технический анализ

Корневая причина

pk-transaction.c (до версии 1.3.5) не обеспечивал защиту состояния при повторном вызове методов действий. Клиент D-Bus мог вызывать InstallFiles (или другие методы действий) несколько раз на одном и том же объекте транзакции после того, как он уже перешёл из состояния PK_TRANSACTION_STATE_NEW.

Цепочка атаки

root@kitploit:~
Атакующий (непривилегированный)
  │
  ├─① CreateTransaction()          → PackageKit возвращает путь объекта транзакции (tid)
  │
  ├─② InstallFiles(tid, FLAG_SIMULATE=4, [dummy.pkg])
  │       PackageKit ставит в очередь проверку авторизации polkit для dummy.pkg.
  │       Установка ещё не происходит — SIMULATE означает только пробный запуск.
  │
  ├─③ InstallFiles(tid, FLAG_NONE=0, [payload.pkg])   ← окно TOCTOU
  │       Повторный вызов на том же tid до разрешения авторизации.
  │       Уязвимые версии перезаписывают поставленные в очередь параметры на payload.pkg.
  │
  └─④ polkit предоставляет авторизацию (пользователь одобрил или авто-авторизация)
          packagekitd устанавливает payload.pkg от имени root.
          postinst/post-скрипт payload: install -m 4755 /bin/bash /tmp/.suid_bash
          Атакующий выполняет /tmp/.suid_bash -p  →  root-оболочка.

Почему гонка выигрывается

Шаги ② и ③ отправляются как неблокирующие асинхронные вызовы D-Bus по одному соединению и сбрасываются одним записывающим вызовом. Два сообщения достигают packagekitd до того, как он сможет обработать ② и продвинуть конечный автомат, оставляя окно TOCTOU открытым. Исправление в 1.3.5 добавляет явную проверку состояния, которая возвращает PK_TRANSACTION_ERROR_INVALID_STATE при любом повторном вызове после PK_TRANSACTION_STATE_NEW.


Описание тестового скрипта

Файл: cve-2026-41651-purpleteam.py
Язык: Python 3
Зависимости: python3-gi (интроспекция GObject / привязки GLib/Gio)

Назначение

Демонстрирует эксплуатируемость CVE-2026-41651 на подготовленной тестовой системе с целью:

  • Проверки, уязвима ли установленная версия PackageKit
  • Генерации реалистичной телеметрии IOC для настройки SIEM/EDR
  • Тестирования покрытия обнаружения до и после установки исправления

Поведение

Поддержка усиленных сред

Системы с усиленной защитой по умолчанию могут блокировать эксплойт в двух независимых точках. Скрипт обрабатывает обе автоматически.

1. Ограничительный umask (027 / 077)

Унаследованный от процесса umask 027 или 077 приводит к тому, что mkdir() создаёт каталоги с правами 750 или 700. И dpkg-deb, и rpmbuild должны пройти по всему дереву сборки — если какой-либо каталог недоступен для чтения, сборка молча завершается неудачей.

Применяемое исправление: os.umask(0o022) вызывается при запуске до создания любых файлов или каталогов. Кроме того, каждый каталог и файл в дереве сборки получает явный chmod сразу после создания (0o755 для каталогов и скриптов, 0o644 для файлов данных), поэтому правильные права гарантированы независимо от унаследованного umask.

2. Флаги монтирования nosuid / noexec на /tmp

ФлагВлияние на эксплойт
nosuidЯдро молча снимает бит SUID с любого файла, хранящегося на этой файловой системе — скопированный bash никогда не становится root
noexecSUID-бинарник вообще не может быть выполнен

Применяемое исправление: При запуске _find_suid_dir() читает /proc/mounts и проверяет каталоги-кандидаты в порядке предпочтения, пока не найдёт файловую систему без обоих флагов. Разрешённый путь затем встраивается в пост-установочный скрипт полезной нагрузки и используется для опроса и выполнения.

Если все кандидаты заблокированы, скрипт завершается с понятной ошибкой, а не молча терпит неудачу.

Совместимость

Семейство дистрибутивовИнструмент пакетовПротестировано
Debian / Ubuntudpkg-deb✓

Индикаторы компрометации

IOC перечислены от общих/инфраструктурных до специфичных для скрипта артефактов. Обнаружения, построенные на общих индикаторах, поймают эту CVE независимо от того, какой вариант PoC используется.

Файловая система

Процессы и выполнение

Активность D-Bus

Паттерны журналов аудита

Включите с помощью: auditctl -a always,exit -F arch=b64 -S all -F path=/usr/bin/packagekitd
Или используйте правила ниже в /etc/audit/rules.d/:

root@kitploit:~
# Обнаружение создания SUID-файлов во всех каталогах-кандидатах сброса
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/var/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/dev/shm -k suid_drop

# Обнаружение dpkg-deb / rpmbuild не-root
-w /usr/bin/dpkg-deb -p x -k pkg_build_nonroot
-w /usr/bin/rpmbuild -p x -k pkg_build_nonroot

# Обнаружение выполнения SUID bash из любого каталога-кандидата сброса
-a always,exit -F arch=b64 -S execve -F dir=/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/var/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/dev/shm -F uid!=0 -F euid=0 -k priv_esc_drop

Артефакты менеджера пакетов

Артефакты повышения привилегий


Логика обнаружения

Псевдоправило SIEM (общее — покрывает все варианты CVE-2026-41651)

root@kitploit:~
(
  event.category == "process"
  AND process.name IN ("dpkg-deb", "rpmbuild")
  AND process.user.id != "0"
  AND NOT process.parent.name IN ("apt", "apt-get", "dpkg", "rpm", "dnf", "yum", "zypper", "mock", "koji")
)
OR
(
  event.category == "file"
  AND file.path LIKE "/tmp/%" OR file.path LIKE "/var/tmp/%" OR file.path LIKE "/dev/shm/%"
  AND file.owner == "root"
  AND (file.mode LIKE "04%")
)
OR
(
  event.category == "process"
  AND process.name == "bash"
  AND process.real_user.id != "0"
  AND process.effective_user.id == "0"
  AND NOT process.parent.name IN ("sudo", "su", "sshd", "login", "pam")
)

Поведенческая цепочка EDR

root@kitploit:~
packagekitd
  └─ sh / bash  (cwd или аргумент соответствует /tmp, /var/tmp, /dev/shm или $HOME)
       └─ install / cp / chmod  (цель имеет SUID + владелец root)

Помечайте всю цепочку. Любой отдельный шаг сам по себе может быть безобидным; связь родитель-потомок через packagekitd с командой, устанавливающей SUID, является высокоточной независимо от выбранного каталога сброса. Расширьте правила на основе путей, чтобы покрыть все четыре кандидата.


Затронутые системы и версии

Проверьте установленную версию: pkcon backend-details или packagekit --version
Уязвим, если сообщённая версия ≤ 1.3.4.


Устранение

Основное: Обновите PackageKit до 1.3.5 или примените бэкпорт от конкретного вендора.

root@kitploit:~
# Debian / Ubuntu
apt update && apt install --only-upgrade packagekit

# Fedora / RHEL
dnf upgrade packagekit

# SUSE
zypper update packagekit

Смягчающие меры (если установка исправления немедленно невозможна):


Ссылки


Сгенерировано: 2026-04-24 | Обновлено: 2026-04-25 | Оценка Purple Team | Только для внутреннего использования

Скачать инструмент
ПолеЗначение
ID CVECVE-2026-41651
CWECWE-367 — Гонка «проверка-по-времени-использование-по-времени» (TOCTOU)
КомпонентPackageKit (packagekitd, служба D-Bus)
ЗатронутыPackageKit ≤ 1.3.4
Исправлено вPackageKit 1.3.5
ВоздействиеЛокальное повышение привилегий → root
Вектор атакиЛокальный / D-Bus (сеанс непривилегированного пользователя)
Раскрыто2026-04-22 (Deutsche Telekom Red Team)
КонсультацияGHSA-f55j-vvr9-69xv
Коммит исправления76cfb675fb31acc3ad5595d4380bfff56d2a8697
ФазаДействие
ПодготовкаПроверяет /proc/mounts для выбора каталога с SUID/exec-возможностями, устанавливает umask(022), применяет явный chmod ко всем артефактам сборки, затем собирает фиктивный и полезный пакеты в /tmp
ЭксплуатацияОткрывает системное соединение D-Bus, создаёт транзакцию PackageKit, запускает гонку из двух вызовов
Полезная нагрузкаПост-установочный скрипт пакета копирует /bin/bash в <drop_dir>/.suid_bash с режимом 04755, владелец root. Каталог сброса определяется во время выполнения (см. Поддержка усиленных сред)
ПовышениеОжидает появления SUID-бинарника (таймаут 90 с), затем выполняет execl в него с -p для получения root-оболочки
ОчисткаУдаляет временные файлы .deb/.rpm при выходе (успех или неудача)
ПриоритетКандидатТипичная усиленная защита
1/var/tmpРедко несёт nosuid/noexec; переживает перезагрузки
2/dev/shmtmpfs, обычно разрешающая; очищается при перезагрузке
3/tmpЧасто усилен на системах CIS/STIG
4$HOMEПоследнее средство; всегда доступен для записи пользователю
RHEL / Fedorarpmbuild✓
SUSE / openSUSErpmbuild✓
IOCПуть / ПаттернПримечания
SUID-бинарник в каталоге, доступном для записи всем<drop_dir>/.suid_bash — каталог сброса: /var/tmp, /dev/shm, /tmp или $HOME в зависимости от флагов монтированияСкрипт выбирает первый каталог без nosuid/noexec; расширьте обнаружения на все четыре кандидата
Временный файл пакета в /tmp/tmp/*.deb, /tmp/*.rpmСоздан непривилегированным пользователем; легитимные операции с пакетами используют /var/cache или пути загрузки
Дерево сборки dpkg/tmp/pkbuild_*, /tmp/build_*Промежуточные каталоги для dpkg-deb -b
Дерево rpmbuild в /tmp/tmp/rpmbuild_*Промежуточные каталоги для rpmbuild, вызванного вне ~/rpmbuild
Скрипт postinst / %post в /tmp/tmp/*/DEBIAN/postinst, /tmp/*/SPECS/*.specСкрипты, копирующие или изменяющие права системных бинарников, — высокая уверенность
IOCДеталь
dpkg-deb, запущенный не-root, не-apt процессомРодитель — пользовательский процесс Python/shell, а не apt, dpkg или unattended-upgrades
rpmbuild, запущенный непривилегированным пользователемБез родителя, связанного с упаковкой (mock, koji, CI runner), это аномалия
packagekitd запускает /bin/sh или /bin/bash из пути /tmppackagekitd выполняет postinst-скрипты; исходный путь в /tmp — аномалия
Процесс bash, где UID ≠ EUIDВыполнение SUID; EUID=0, UID=<атакующий>
Вызов bash -pФлаг -p включает привилегированный режим при установленном SUID — редко используется легитимно
Родословная короткоживущего процесса .suid_bashДедушка — packagekitd, родитель — оболочка атакующего
IOCДеталь
org.freedesktop.PackageKit.Transaction.InstallFiles вызван дважды на одном пути объектаОба вызова приходят в пределах миллисекунд; легитимные клиенты вызывают один раз на транзакцию
FLAG_SIMULATE (4), немедленно за которым следует FLAG_NONE (0) на том же tidЭта последовательность не имеет легитимного сценария использования
Паттерн CreateTransaction → быстрый двойной InstallFilesОбнаруживается через монитор D-Bus (dbus-monitor --system) или правила аудита dbus
InstallFiles с путём к файлу в /tmpЛегитимные графические установщики пакетов (GNOME Software, Discover) используют пути в $HOME или /var/cache
IOCДеталь
Пакет с именем pk-dummy-* или pk-payload-* в истории dpkg/rpmСпецифично для скрипта, но варианты будут использовать другие имена
Пакет, установленный из локального файла (/tmp/*.deb или /tmp/*.rpm)dpkg -l или rpm -qa --last — ищите пакеты без происхождения из репозитория
Пакет, установленный без журнала изменений / с пустым описаниемСозданные пакеты используют минимальные метаданные; dpkg -s <pkg> или rpm -qi <pkg>
Пакет, удалённый сразу после установки или никогда не появляющийся в базе пакетовНеудачные попытки эксплойта могут оставить частичное состояние
Записи журнала транзакций packagekit для установок из локальных файлов/var/log/PackageKit/transactions.db или записи journald packagekitd
IOCДеталь
.suid_bash в любом каталоге-кандидате сбросаПуть сброса выбирается во время выполнения из /var/tmp, /dev/shm, /tmp, $HOME на основе флагов монтирования — проверьте все четыре: find /var/tmp /dev/shm /tmp $HOME -uid 0 -perm -4000 2>/dev/null
Любой файл, принадлежащий root с битом SUID в каталоге, доступном для записи пользователюНа чистых системах всегда должен возвращать пустой результат
Дерево процессов bash с euid=0 и без предка PAM / sudo / suУказывает на путь выполнения SUID, а не на легитимный переход привилегий
Предоставление polkit для org.freedesktop.packagekit.package-install не-администраторуНеожиданно, если пользователь не в группе sudo / wheel
ДистрибутивPackageKit по умолчаниюУязвимДоступна исправленная версия
Ubuntu 24.04 LTS1.3.xДаЧерез apt upgrade
Ubuntu 22.04 LTS1.2.xДаБэкпорт в процессе
Debian 12 (Bookworm)1.2.xДаТрекер безопасности ожидает
Fedora 411.3.xДаdnf upgrade packagekit
RHEL 9 / CentOS Stream 91.2.xДаRHSA ожидается
SUSE Linux Enterprise 151.1.xВероятноКонсультация SUSE ожидается
Arch Linux1.3.xДаAUR / pacman обновлён
МераКоманда / КонфигурацияПредостережение
Отключить службу PackageKitsystemctl disable --now packagekitdЛомает графические обновления GNOME Software / Discover
Ограничить доступ D-BusДобавить правило deny в /etc/dbus-1/system.d/org.freedesktop.PackageKit.conf для непривилегированных пользователейМожет сломать легитимные пользовательские инструменты пакетов
Усиление polkitУстановить org.freedesktop.packagekit.package-install в auth_admin (всегда требовать пароль администратора)Снижает удобство, но сужает поверхность атаки
Мониторинг аудитаРазвернуть правила аудита из раздела Паттерны журналов аудитаТолько детективное, не превентивное
РесурсСсылка
Раскрытие OSS-Securityhttps://www.openwall.com/lists/oss-security/2026/04/22/6
Консультация по безопасности GitHubGHSA-f55j-vvr9-69xv
Коммит исправленияhttps://github.com/PackageKit/PackageKit/commit/76cfb675fb31acc3ad5595d4380bfff56d2a8697
Релиз PackageKit 1.3.5https://github.com/PackageKit/PackageKit/releases/tag/v1.3.5
Ссылка на публичный PoChttps://github.com/CipherCloak/CVE-2026-41651
CWE-367https://cwe.mitre.org/data/definitions/367.html
Документация polkithttps://www.freedesktop.org/software/polkit/docs/latest/