
CVE-2025-6019: Escalação de privilégios TOCTOU no redimensionamento XFS do udisks2
Este repositório contém uma Prova de Conceito (PoC) para a CVE-2025-6019, uma vulnerabilidade de Condição de Corrida no udisks2 que permite a escalação local de privilégios por meio do redimensionamento do sistema de arquivos XFS.
Este exploit foi projetado para ser universal em qualquer sistema Linux que atenda aos seguintes critérios:
Serviço Vulnerável: udisks2 (com acesso D-Bus habilitado).
Ferramenta de Sistema de Arquivos: xfsprogs instalado (especificamente mkfs.xfs).
Arquitetura: Agnóstica (funciona em x86, x64, ARM, etc.).
O exploit foi verificado na seguinte configuração:
weapon.py gerencia automaticamente a configuração do PATH do ambiente para localizar o mkfs.xfs, que normalmente é restrito ao sbin.A exploração requer uma imagem XFS especialmente criada com um Protofile. Isso nos permite definir uma estrutura de sistema de arquivos que inclui um binário SUID root (pwnbash) sem exigir privilégios de root durante a fase de criação da imagem. A flag mkfs.xfs -p usa esse modelo para gravar o bit SUID diretamente nos metadados da imagem.
Usuários comuns em sessões remotas (SSH, Docker) têm restrições para usar o udisks2. Execute este script para simular uma sessão local (seat0):
python3 bypass.py
Gere a imagem SUID usando o weapon.py. Este script usa o protofile XFS para incorporar um shell com permissões 4755.
python3 weapon.py
Execute o trigger.sh para começar a inundar o udisks2 com solicitações de redimensionamento via D-Bus. Isso força o daemon a criar pontos de montagem temporários em /tmp/blockdev.XXXXXX.
chmod +x trigger.sh
./trigger.sh
Como os scripts automatizados podem ser instáveis em ambientes com recursos limitados, o método manual é recomendado:
Monitore o /tmp em busca de pontos de montagem temporários:
watch -n 0.1 "ls -la /tmp"
Identifique o Alvo: Procure um diretório com permissões legíveis por todos (por exemplo, drwxr-xr-x) em vez do padrão endurecido drwx------.
Execute o Payload: Após identificá-lo, navegue até o diretório e execute o shell:
cd /tmp/blockdev.Q797J3 # Example directory name
./pwnbash -p
Resultado: Se a execução ocorrer dentro da janela da condição de corrida (antes da flag nosuid ser aplicada), você receberá um shell root.
bypass.py: Script de configuração para simular uma sessão local (seat0) e contornar as restrições do Polkit via ~/.pam_environment.
weapon.py: Gerador de imagem SUID usando o modelo de Protofile XFS.
trigger.sh: Acionador da condição de corrida via D-Bus para o redimensionamento do sistema de arquivos do udisks2.
Para uma análise detalhada: 👉 NetaCoding - https://netacoding.com/posts/udisks2-cve_lpe/
Este projeto é apenas para fins educacionais e de testes de segurança autorizados. O acesso não autorizado a sistemas de computador é ilegal.