
Exploit de escalada de privilégios local armado para CVE-2026-7867 no udisks2, usando spoofing de montagem as-user para contornar o PolicyKit e obter um shell root.
as-user Spoofing → Authorization Bypass → Root-context Mount → LPECVE-2026-7867 é uma vulnerabilidade de escalada local de privilégios no udisks2 envolvendo o método D-Bus Filesystem.Mount, a opção as-user, fluxos de montagem gerenciados por fstab e manipulação de autorização defeituosa.
Este repositório privado contém as notas técnicas de pesquisa e scripts PoC usados para validar o problema em um ambiente de laboratório controlado.
A vulnerabilidade foi descoberta e reportada por:
| Azizcan Daştan | azqzazq1 |
| Özlem Ozan | oz7oz7 |
A emissão foi atribuída:
CVE-2026-7867
A vulnerabilidade é causada por uma relação de confiança defeituosa entre o UID real do chamador D-Bus e o UID calculado/efetivo produzido pela opção de montagem as-user.
Em fluxos vulneráveis, um utilizador local não privilegiado pode influenciar o caminho de execução da montagem de modo que uma montagem de sistema de ficheiros seja realizada num contexto privilegiado/root sem o comportamento esperado de autorização do PolicyKit.
O bug central não é simplesmente "opções de montagem controladas pelo utilizador".
O verdadeiro problema é:
O
udisks2falha em distinguir consistentemente a identidade do chamador original da identidadeas-usercalculada durante a autorização e execução da montagem fstab.
A lógica vulnerável está associada ao caminho de manipulação de montagem fstab dentro do udisks2, especialmente quando o pedido de montagem envolve:
Filesystem.Mount
as-user
x-udisks-auth
user
users
As áreas relevantes de sensibilidade de segurança são:
Identidade do chamador D-Bus
↓
Manipulação da opção as-user
↓
Lógica de autorização fstab
↓
Fluxo de decisão PolicyKit
↓
Execução de montagem em contexto root
┌─────────────────────────────┐
│ Utilizador local não privilegiado │
└──────────────┬──────────────┘
│
│ Filesystem.Mount
│ com influência as-user
▼
┌─────────────────────────────┐
│ udisks2 / udisksd │
│ daemon de sistema │
│ privilegiado │
└──────────────┬──────────────┘
│
│ A lógica fstab avalia
│ opções de utilizador/autorização
▼
┌─────────────────────────────┐
│ Lacuna de Autorização │
│ mount_other_user não │
│ aplicado no caminho ignorado│
└──────────────┬──────────────┘
│
│ Ramo contexto-root alcançado
▼
┌─────────────────────────────┐
│ Sistema de Ficheiros Montado│
│ sem o fluxo de autorização │
│ esperado │
└──────────────┬──────────────┘
│
│ Impacto depende dos flags de montagem
▼
┌─────────────────────────────┐
│ Escalada Local de Privilégios│
│ validação em laboratório │
│ controlado │
└─────────────────────────────┘
O comportamento vulnerável provém de um bug de confusão de identidade.
O sistema tem múltiplos conceitos de identidade:
UID real do chamador D-Bus
UID as-user calculado
UID efetivo da montagem
Contexto de privilégio do daemon udisksd
O fluxo vulnerável falha em aplicar essas identidades de forma consistente.
Em particular:
mount_other_user pode tornar-se verdadeiro porque as-user é usadox-udisks-auth, user, ou users podem afetar o caminho de autorizaçãomount_other_user não é aplicada de forma fiável fora desse blocoO resultado é uma bypass do limite de privilégio local.
x-udisks-authA opção x-udisks-auth supostamente força um fluxo de autorização PolicyKit administrativo.
Comportamento esperado:
pedido de montagem
↓
tentar montar como chamador
↓
falha de permissão/autorização
↓
verificação PolicyKit filesystem-fstab
↓
aprovação administrativa
↓
montagem como ação privilegiada autorizada
Comportamento vulnerável:
pedido de montagem com influência as-user
↓
identidade calculada afeta execução
↓
montagem é bem-sucedida demasiado cedo
↓
caminho de autorização PolicyKit não é alcançado como esperado
↓
estado de montagem privilegiada é alcançado
Isto torna o modelo de segurança em torno de x-udisks-auth não fiável no caminho vulnerável.
Modelo esperado:
Utilizador não privilegiado
↓
Pedido de montagem D-Bus
↓
Autorização PolicyKit / fstab
↓
Comportamento restrito de montagem
Modelo quebrado:
Utilizador não privilegiado
↓
Pedido de montagem D-Bus com spoofing as-user
↓
Incompatibilidade na lógica de autorização
↓
Execução de montagem em contexto root
O bug é especialmente grave porque o serviço afetado é executado com privilégios elevados.
A exploração bem-sucedida pode permitir que um utilizador local não privilegiado monte um sistema de ficheiros através do udisks2 num caminho de execução em contexto root sem o prompt de autorização esperado.
Dependendo do sistema de ficheiros e dos flags de montagem, o impacto pode incluir:
Esta é uma vulnerabilidade local.
Condições relevantes incluem:
.
├── README.md
├── disk2root.sh ← exploit principal (LPE autocontido)
└── poc/
├── setup_lpe_env.sh ← configuração do ambiente laboratorial
├── f2_mount_as_user_bypass.sh
├── f2_check_nosuid.sh
├── f2_suid_test.sh
├── f2_final.sh
└── cleanup_lpe_env.sh
disk2root.shExploit autocontido e armadilhado. Constrói o seu próprio payload SUID root, cria uma imagem de disco preparada, monta-a através da bypass polkit as-user=root, e entra numa shell root.
Opção 1 — Executar como root (funciona em todo o lado, incluindo SSH):
./disk2root.sh
O script automaticamente:
uid=0 mode=4755 via debugfsx-udisks-authsuFilesystem.Mount com as-user=root (bypass polkit)Para especificar de que utilizador escalar:
./disk2root.sh testuser
Se nenhum utilizador for especificado, o script escolhe o primeiro utilizador regular no sistema ou cria um temporário.
Opção 2 — Executar como utilizador não privilegiado (ambiente gráfico / sessão ativa):
./disk2root.sh
Em sistemas com sessão polkit ativa (login de ambiente gráfico, GNOME/KDE), o script é totalmente autocontido — cria o seu próprio dispositivo loop via udisksctl ou D-Bus LoopSetup, monta via as-user=root, e escala sem qualquer configuração prévia.
Opção 3 — Executar como utilizador não privilegiado (SSH, após configuração):
Se o ambiente já foi preparado (ex.: executando poc/setup_lpe_env.sh como root, ou por uma execução anterior de ./disk2root.sh como root), qualquer utilizador não privilegiado pode re-explorar:
./disk2root.sh
O script deteta automaticamente entradas fstab vulneráveis e utiliza-as.
./disk2root.sh --cleanup
Remove todos os artefactos: entrada fstab, dispositivo loop, ponto de montagem, utilizador temporário.
Quando executado como não privilegiado, o script tenta vários caminhos por ordem:
[A] Autocontido
construir payload → criar imagem ext4 → debugfs injetar binário SUID
→ loop-setup (python3 GIO / udisksctl) → montar as-user=root
✓ funciona em sessões gráficas
[B] Fallback fstab
varrer /etc/fstab por entradas x-udisks-auth / user / users
→ montar as-user=root → encontrar binário SUID no fs montado
✓ funciona em SSH quando o ambiente está preparado
╔═══════════════════════════════════════════════════════════╗
║ CVE-2026-7867 — disk2root ║
║ udisks2 as-user polkit bypass → LPE root shell ║
╚═══════════════════════════════════════════════════════════════╝
[*] uid=1002 (testuser) — a explorar...
fstab: /dev/loop5 → /mnt/disk2root (x-udisks-auth)
montado: /mnt/disk2root
nosuid: não definido
suid: pwn (4755 root:root)
╔═══════════════════════════════════════════════════════════╗
║ a entrar em shell root — digite 'exit' para regressar ║
╚═══════════════════════════════════════════════════════════════╝
[+] shell root — uid=0 euid=0
root@target:/tmp#
poc/)Scripts de validação individuais usados durante a pesquisa. Estes são os blocos de construção que levaram ao disk2root.sh.
1. Executar poc/setup_lpe_env.sh como root
2. su - testuser
3. Executar poc/f2_mount_as_user_bypass.sh
4. Executar poc/f2_final.sh para validação completa
5. Executar poc/cleanup_lpe_env.sh como root
Ou simplesmente usar disk2root.sh que combina tudo acima.
A primitiva demonstrada por esta pesquisa é:
Spoofing da opção as-user dentro da orquestração de montagem privilegiada
A transição crítica é:
Chamador D-Bus não privilegiado
↓
Identidade de montagem falsificada/calculada
↓
Confusão no caminho de autorização
↓
Execução de montagem em contexto root
É por isso que a questão se qualifica como uma vulnerabilidade de escalada local de privilégios.
O udisks2 é normalmente confiável como um daemon privilegiado de gestão de armazenamento.
Um bug nesta camada tem alto impacto porque se situa entre:
Utilizadores de sessões/ambiente gráfico
Chamadas de método D-Bus
Autorização PolicyKit
Operações de montagem de sistemas de ficheiros
Privilégios do daemon root
Uma falha na manipulação de identidade aqui pode afetar diretamente os limites de privilégio local.
Defensores podem monitorizar atividade suspeita de montagem do udisks2 envolvendo as-user.
Fontes de telemetria úteis:
Logs do udisksd
Chamadas de método D-Bus
Logs do PolicyKit
Alterações na tabela de montagens
/proc/mounts
/etc/fstab
journalctl
Comandos úteis:
findmnt
mount
cat /proc/mounts
journalctl -u udisks2
journalctl | grep -i udisks
journalctl | grep -i polkit
Padrões suspeitos:
Utilizador não root a acionar Filesystem.Mount
Uso de as-user=root
Montagem inesperada sem prompt PolicyKit
Montagens sem nosuid/noexec/nodev
Execução setuid a partir de sistemas de ficheiros montados recentemente
Montagens inesperadas de dispositivos loop
udisks2Aplicar a correção fornecida pelo fornecedor quando disponível.
Correção planeada:
udisks 2.11.2
Auditar entradas que usam:
x-udisks-auth
user
users
Especialmente rever sistemas de ficheiros que podem conter conteúdo executável ou setuid.
Sendo uma vulnerabilidade local, reduzir o acesso local não confiável diminui a exposição.
Monitorizar operações de montagem inesperadas através de:
udisksd
especialmente quando acionadas por utilizadores não root.
Onde aplicável, usar:
nosuid
noexec
nodev
Estes flags podem reduzir o impacto pós-montagem.
Rever regras do PolicyKit relacionadas com ações de montagem do udisks.
Garantir que utilizadores não privilegiados não possam acionar caminhos de montagem sensíveis sem autorização explícita.
Uma correção robusta deve assegurar que:
as-user calculado não substitua a identidade do chamador para autorizaçãomount_other_user sempre acione verificações PolicyKit adequadasx-udisks-auth aplique consistentemente a autenticaçãoApós o levantamento do embargo, este repositório pode ser convertido num repositório público de pesquisa com:
docs/
├── technical-analysis.md
├── root-cause.md
├── lab-setup.md
├── exploit-flow.md
├── detection.md
└── mitigation.md
Adições públicas recomendadas:
Este repositório destina-se apenas a pesquisa de segurança autorizada, coordenação com fornecedores e validação defensiva.
Os scripts PoC destinam-se a ambientes de teste isolados.
Não execute estes scripts em sistemas que não possui ou para os quais não tem permissão explícita para testar.
Os autores não são responsáveis pelo uso indevido desta pesquisa.
CVE-2026-7867
Pesquisa de Escalada Local de Privilégios no udisks2
| Campo | Valor |
|---|
| CVE | CVE-2026-7867 |
| Produto | udisks2 |
| Componente | Filesystem.Mount |
| Tipo de Ataque | Escalada Local de Privilégios |
| Primitiva | Spoofing de as-user |
| Limite de Segurança | Identidade do chamador D-Bus → execução de montagem privilegiada |
| Camada de Autorização | Autorização PolicyKit / fstab |
| Fornecedor | Red Hat / upstream udisks |
| Estado | Correção em andamento / divulgação coordenada |
| Correção Planeada | udisks 2.11.2 |
| Condição | Necessária |
|---|
| Acesso de utilizador local | Sim |
Versão vulnerável do udisks2 | Sim |
Funcionalidade as-user presente | Sim |
| Alvo de montagem gerenciado por fstab adequado | Sim |
| Caminho de autorização vulnerável | Sim |
| Acesso remoto | Não |
| Ferramenta | Propósito | Necessário |
|---|
busctl | Chamada de montagem D-Bus | Sim |
gcc | Compilar payload SUID | Sim (fallback para cópia bash) |
mke2fs | Criar imagem ext4 | Sim (modo autocontido) |
debugfs | Injetar binário com uid=0 | Sim (modo autocontido) |
python3-gi | D-Bus LoopSetup com passagem de fd | Opcional (modo gráfico) |
udisksctl | Configuração de dispositivo loop | Opcional (modo gráfico) |
| Script | Propósito |
|---|
setup_lpe_env.sh | Preparar ambiente laboratorial (dispositivo loop, fstab, utilizador de teste) |
f2_mount_as_user_bypass.sh | Validar bypass de Filesystem.Mount com as-user=root |
f2_check_nosuid.sh | Verificar flags nosuid/noexec/nodev na montagem bypass |
f2_suid_test.sh | Testar execução de binário SUID no sistema de ficheiros montado |
f2_final.sh | PoC de ponta a ponta: configuração → bypass → verificar euid=0 |
cleanup_lpe_env.sh | Restaurar ambiente de teste |
| Data | Evento |
|---|
2026-04-21 | Relatório submetido à Red Hat Product Security |
2026-04-21 | Red Hat confirmou receção |
2026-04-28 | Fornecedor confirmou a lógica defeituosa |
2026-04-28 | Fornecedor solicitou scripts PoC |
2026-04-30 | Fornecedor solicitou atribuição CVE |
2026-04-30 | Scripts PoC enviados ao fornecedor |
2026-05-03 | Correção inicial do fornecedor partilhada |
2026-05-05 | Correção atualizada do fornecedor partilhada |
2026-05-05 | CVE-2026-7867 reservado |
2026-05-05 | Ticket marcado como resolvido |
2026-05-07 | Fornecedor indicou correção planeada para udisks 2.11.2 |
| Investigador | GitHub | Função |
|---|---|---|
| Azizcan Daştan | azqzazq1 | Descoberta, análise, desenvolvimento PoC, coordenação com fornecedor |
| Özlem Ozan | oz7oz7 | Colaboração em pesquisa e crédito de divulgação |