
Prova de conceito para CVE-2026-43494 (PinTheft): LPE no Linux via bug de refcount zerocopy do RDS + buffers fixos do io_uring → substituição do 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 arquivo único para CVE-2026-43494 (PinTheft): uma escalada de privilégio local no kernel Linux que encadeia um bug de contagem de referência no zerocopy do RDS com buffers fixos do io_uring para sobrescrever o cache de páginas de um binário SUID-root.
Aviso: Este repositório destina-se exclusivamente a pesquisa de segurança autorizada, educação e testes defensivos. Executá-lo 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 a PoC foram publicadas 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 no 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 habilitado?
cat /proc/sys/kernel/io_uring_disabled # esperado 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 com 256 cores ANSI, barra de progresso, registro em fases). Certifique-se de que seu terminal suporta UTF-8 e truecolor/256 cores para a interface com caracteres de desenho 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 entrega o controle ao binário SUID descoberto com a primeira página sobrescrita — resultando em um shell root se a corrida e o estado do kernel se alinharem.
Em kernels corrigidos, hosts protegidos ou com RDS/io_uring ausentes, a PoC falhará cedo (sem alvo SUID, erros de mmap/io_uring/socket, etc.).
Avisos de segurança específicos da distribuição podem conter correções adaptadas — 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 | put_page() duplicada quando a fixação da página falha → roubo de referências FOLL_PIN |
| Armamento | Buffer fixo do io_uring + zerocopy do RDS com falha → UAF no cache de páginas (escrita) |
| Impacto | Root local em configurações vulneráveis |
| Correção upstream | e17492979319 |
| Ação | Observações |
|---|
| Corrigir kernel | Aplicar a correção estável que contém 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 |
| Privilégio mínimo | Remover binários SUID desnecessários; usar contêineres com perfis protegidos |
| Monitorar | Alertar sobre picos de falhas de zerocopy do RDS + padrões de registro de buffer do io_uring |