
Prova de conceito para CVE-2026-43494 (PinTheft): escalonamento de privilégios no Linux via bug de contagem de referência zerocopy do RDS + buffers fixos io_uring → sobrescrita de cache de página SUID. Apenas pesquisa autorizada.
Prova de conceito — uid=1000(raken) → uid=0(root) após ./sley no WSL2 (6.6.87.2-microsoft-standard-WSL2)
Prova de conceito em um único arquivo para CVE-2026-43494 (PinTheft): uma escalada de privilégio local do kernel Linux que encadeia um bug de contagem de referências do RDS zerocopy com buffers fixos do io_uring para sobrescrever o cache de páginas de um binário SUID root.
Aviso: Este repositório é apenas para pesquisa autorizada de segurança, educação e testes defensivos. Executar isso em sistemas que você não possui ou sem permissão explícita para testar é ilegal e antiético. Os autores não assumem nenhuma responsabilidade pelo uso indevido.
A pesquisa pública original e o PoC foram publicados pela equipe V12 Security (Aaron Esau). SLEY é uma reimplementação independente e compacta com uma interface de terminal estilizada para uso em laboratório e aprendizado.
flowchart LR
A[mmap anonymous page] --> B[io_uring: register fixed buffer]
B --> C[Clone buffer table to 2nd ring]
C --> D[1024× failing RDS zerocopy sends]
D --> E[Drain FOLL_PIN bias / steal refs]
E --> F[munmap → page freed]
F --> G[SUID binary page reclaimed in page cache]
G --> H[Stale io_uring ptr writes ELF stub]
H --> I[exec SUID → root shell]su, mount, passwd, …).FOLL_PIN ≈ 1024).execve do binário SUID executa o stub injetado como root.CONFIG_RDS=y e CONFIG_RDS_TCP=yCONFIG_IO_URING=y e kernel.io_uring_disabled = 0rds / rds_tcp carregados (ou carregáveis automaticamente por usuários não privilegiados)IORING_REGISTER_CLONE_BUFFERS usada pela cadeia públicasudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# ou pacote de cabeçalhos equivalente na sua distribuição
# Corrigido? (exemplo — ajuste para sua distribuição)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS disponível?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring ativado?
cat /proc/sys/kernel/io_uring_disabled # espera 0
gcc -O2 -Wall -Wextra -o sley sley.c
Linkagem estática (opcional, para imagens de laboratório mínimas):
gcc -O2 -static -o sley sley.c
./sley
Toda saída de status vai para stderr (interface ANSI 256 cores, barra de progresso, registro em fases). Certifique-se de que seu terminal suporta UTF-8 e truecolor/256 cores para a interface com desenhos de caixa.
Exemplo de fases:
PHASE 1 │ Reconnaissance
PHASE 2 │ Memory & io_uring setup
PHASE 3 │ Pin reference theft (RDS zerocopy)
PHASE 4 │ Page cache overwrite & privesc
Em uma configuração explorada com sucesso, a cadeia é concluída e passa para o binário SUID descoberto com uma primeira página sobrescrita — gerando um shell root se a corrida e o estado do kernel se alinharem.
Em kernels corrigidos, hosts reforçados ou com falta de RDS/io_uring, o PoC falhará cedo (nenhum alvo SUID, erros de mmap/io_uring/socket, etc.).
Avisos de segurança específicos de distribuição podem fornecer patches backportados — acompanhe a fila de segurança do kernel do seu fornecedor.
.
├── README.md # Este arquivo
├── proof-of-concept.jpg # Captura de tela: LPE bem-sucedido (uid 1000 → root)
├── sley.c # PoC em arquivo único + interface de terminal
└── .gitignore
Este software é fornecido como está para pesquisa e educação. Você é responsável por cumprir as leis aplicáveis e obter autorização por escrito antes de testar qualquer sistema que não possua.
MIT — consulte o arquivo de licença do repositório, se adicionado. Use com responsabilidade.
| Item | Detalhe |
|---|
| CVE | CVE-2026-43494 |
| Nome público | PinTheft |
| Componente | net/rds — caminho de envio zerocopy (rds_message_zcopy_from_user) |
| Primitiva | Dupla chamada put_page() quando o pin da página falha → rouba referências FOLL_PIN |
| Armamentização | Buffer fixo do io_uring + falha de zerocopy do RDS → escrita UAF no cache de páginas |
| Impacto | Root local em configurações vulneráveis |
| Correção upstream | e17492979319 |
| Ação | Notas |
|---|
| Aplicar patch no kernel | Aplicar correção estável contendo o commit e17492979319 |
| Desabilitar RDS | modprobe -r rds_tcp rds (e bloquear carregamento automático) se não for necessário |
| Restringir io_uring | kernel.io_uring_disabled=1 ou 2 via sysctl |
| Menor privilégio | Remover binários SUID desnecessários; usar contêineres com perfis reforçados |
| Monitorar | Alertar sobre rajadas de falhas de zerocopy do RDS + padrões de registro de buffer do io_uring |