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

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

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

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

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

Категории

Все категории
Loading categories
vfs-service-sid — VFS for Git ab95cf51 — Средний — Локальный — Остаточные привилегии — service pipe доверяет JSON OwnerSID | Kitploit
Инструменты/GitHubGitHub/abraxas/vfs-service-sid
Аутентификация и авторизацияПовышение привилегийАнализ уязвимостейЭксплуатацияТестирование на ПроникновениеНеправильная КонфигурацияЛаборатории и Практика
GitHubabraxas/vfs-service-sid

vfs-service-sid

VFS for Git ab95cf51 — Средний — Локальный — Остаточные привилегии — service pipe доверяет JSON OwnerSID

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

Популярное

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

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

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

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

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

Abraxas Labs - vfs-service-sid

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vfs-service-sid

vfs-service-sid

Класс: Остаточные привилегии Доступ: Локальный

VFS for Git master ab95cf51 (тег v2.0.26259.1) - Microsoft

GVFS.Service работает как LocalSystem. WindowsPlatform.CreatePipeByName предоставляет BUILTIN\Users права ReadWrite | CreateNewInstance на GVFS.Service.pipe. RegisterRepoHandler.Run сохраняет JSON OwnerSID как есть. Ничто не вызывает ImpersonateNamedPipeClient.

Любой субъект Users может зарегистрировать путь атакующего под SID жертвы. При SessionLogon служба выполняет CreateProcessAsUser для gvfs mount <путь атакующего> от имени жертвы. Дочерний процесс не является NT AUTHORITY\SYSTEM.

IDCVE пока нет
КлассОстаточные привилегии (отсутствие авторизации / межпользовательское выполнение)
ДоступЛокальный
CWECWE-862, CWE-284
CVSSСредний: 6.6 CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
ПродуктVFS for Git
Затронутоmaster ab95cf51d6ffd0ee0e2feae7180078fe9ecbbb3a; теги GitHub v2.0.26229.1 / v2.0.26259.1. Только Windows.
АутентификацияЛокальная. Любой субъект BUILTIN\Users. Вход жертвы для автомонтирования.
ЛицензияGNU Affero GPL v3.0
ЛабораторияТолько 127.0.0.1. how=gadget (без живого Windows GVFS.Service).

Git 2.35+ dubious-ownership может затем привести к сбою git внутри дерева, принадлежащего атакующему. Процесс всё равно запускается от имени жертвы. Если путь принадлежит жертве, но доступен для записи атакующему (vfs-clone-acl), mount git, credential.helper и хуки выполняются от имени этого пользователя.

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

Любой субъект BUILTIN\Users на машине, где установлена служба. Подключение к \\.\pipe\GVFS.Service.pipe. Без дополнительных привилегий.

ПривилегияМетод / точка назначенияЧто даётРазведка / целостность / доступностьДоказано в лаборатории или выведено
Перечислить все активные корни enlistmentGetActiveRepoListRequest без проверки SID (TryGetActiveRepos, а не GetActiveReposForUser)Пути, используемые как оракул имён каналов для остатка #2РазведкаДоказано в лаборатории. Gadget перечислил /lab/repos/victim
Деактивировать enlistment жертвы, чтобы он не автомонтировалсяUnregisterRepoRequest {EnlistmentRoot} без проверки SID (TryDeactivateRepo)Репозитории жертвы остаются несмонтированнымиДоступностьДоказано в лаборатории. Строка жертвы исчезла из активного списка
Сохранить путь атакующего под SID жертвыRegisterRepoRequest JSON EnlistmentRoot + OwnerSID; TryRegisterRepo сохраняет обаСтрока реестра: путь атакующего + SID жертвыЦелостностьДоказано в лаборатории. Строка реестра /lab/repos/attacker + S-1-5-21-1000-2000-3000-1001
Запустить GVFS.exe mount <путь атакующего> от имени жертвы при входеOnSessionChange SessionLogon -> AutoMountRepos(userId) -> TryRunAs / CreateProcessAsUserМежпользовательское создание процесса от имени вошедшего пользователяЦелостностьДоказано в лаборатории на gadget. Родитель GVFS.Service, argv mount /lab/repos/attacker, uid 1002 victim, свидетель записан
Выполнение как NT AUTHORITY\SYSTEMТот же автомонтированиеДочерний процесс LocalSystemЦелостностьЗакрыто. Дочерний whoami — это жертва, а не SYSTEM (child-not-system=yes)
Git / хук / credential.helper от имени жертвы внутри дерева, принадлежащего атакующемуСоздание процесса всё равно происходит; git 2.35+ safe.directory может дать сбойRCE через хук от имени жертвы, если дерево принадлежит жертве, но доступно для записи атакующемуЦелостностьВыведено. Лаборатория не запускала Microsoft git. Привяжите путь как принадлежащий жертве, но доступный для записи атакующему, для RCE через хук

Закрыто на этом пине: удалённый неаутентифицированный доступ (именованный канал локальный). SYSTEM shell. ACL канала по умолчанию всё ещё пропускает Users; пропатченная регистрация, привязывающая SID клиента (gadget X-Patched: 1), не автомонтирует путь атакующего для жертвы.

Остатки того же пина: vfs-quote-breakout, vfs-mount-dehydrate, vfs-clone-acl, vfs-hook-impersonate, vfs-install-cwd.

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

Я зафиксировал VFSForGit master ab95cf51 после слияния 2026-09-28. ACL канала службы — Users ReadWrite. Register сохраняет JSON OwnerSID. SessionLogon выполняет автомонтирование под этим SID. Ничто не имперсонирует клиента канала.

Уже зафиксированные ошибочные пути: называть это SYSTEM shell (автомонтирование — это CreateProcessAsUser с токеном вошедшего пользователя); рассматривать git safe.directory как авторизацию IPC; обратный шелл. Театр. Нативная Windows отсутствовала, поэтому лаборатория — это gadget из обработчиков пина плюс Unix TCP-оракул.

Лаборатория

python3 vfs-service-sid-Abraxas-Labs.py

или

cd lab
./run.sh

Gadget HTTP на 127.0.0.1:19660. Свидетель VFS-SERVICE-SID-WITNESS. Последняя строка использует how=gadget.

SUCCESS vfs-service-sid how=gadget register-forged-sid=yes automount-as-victim=yes child-not-system=yes VFS-SERVICE-SID-WITNESS

Исправление

Имперсонируйте клиента именованного канала (ImpersonateNamedPipeClient / NamedPipeServerStream.RunAsClient). Игнорируйте JSON OwnerSID; привяжите TryRegisterRepo к SID клиента. Ограничьте CreatePipeByName интерактивным пользователем и LocalSystem (уберите BuiltinUsersSid ReadWrite / CreateNewInstance). GetActiveRepoList должен возвращать только репозитории этого клиента. UnregisterRepo должен требовать совпадения того же SID.

Ссылки

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