Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-74586 — Prova de conceito sem privilégios para CVE-2026-74586, um use-after-free no SCTP ASCONF do kernel Linux. Fornece um acionador de pacotes brutos, métricas de confiabilidade e análise detalhada de weaponization, incluindo offsets de structs e primitivas de spray. | Kitploit
Ferramentas/GitHubGitHub/tarpeg007/cve-2026-74586
Frameworks de ExploraçãoAnálise de VulnerabilidadesExploraçãoExploração de Binários
GitHubtarpeg007/cve-2026-74586

CVE-2026-74586

Prova de conceito sem privilégios para CVE-2026-74586, um use-after-free no SCTP ASCONF do kernel Linux. Fornece um acionador de pacotes brutos, métricas de confiabilidade e análise detalhada de weaponization, incluindo offsets de structs e primitivas de spray.

Ver Repositório
há 13h 11mAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-74586 — Gatilho de use-after-free no SCTP ASCONF new_transport

Um PoC autônomo e sem privilégios para CVE-2026-74586, um use-after-free no tratamento de ASCONF (reconfiguração dinâmica de endereços) do SCTP no kernel Linux. O crédito pela falha em si vai para Qing Ming, que a reportou upstream; a correção é o commit beb33f8ee1ca ("sctp: clear new_transport when removing a peer"), mesclado em 2026-08-12 com Cc: stable — a Red Hat a classifica como importante, e rastreadores de terceiros a pontuam como CVSS 9.8.

O que este repositório acrescenta além do aviso:

  • um gatilho funcional de pacote bruto, sem necessidade de patches no kernel ou ferramentas especiais
  • confiabilidade medida em um kernel de distribuição padrão: 1.394 acertos em 1.397 execuções automatizadas (99,8%) contra o 7.1.5+kali-amd64 do Kali
  • as três barreiras de injeção que precisam ser resolvidas para qualquer trabalho bruto com ASCONF, já que o kernel descarta o pacote silenciosamente caso contrário
  • offsets de struct para o módulo sctp 7.1.5 (de objdump, não de adivinhação) e notas sobre até onde a weaponização chega antes de bater em uma parede dura

A falha

sctp_process_asconf_param() armazena o transport criado por um parâmetro ADD-IP em asoc->new_transport. Um DEL-IP para o mesmo endereço no mesmo chunk ASCONF libera esse transport por meio de sctp_assoc_rm_peer(), que (antes da correção) não limpa . Quando retorna, age sobre o ponteiro obsoleto — em um kernel de distribuição, o efeito visível é um HEARTBEAT emitido em direção ao endereço do transport recém-liberado; sob KASAN, é um relatório de slab-use-after-free.

new_transport
sctp_process_asconf()
sctp_sf_do_asconf()

Um único chunk ASCONF é suficiente:

root@kitploit:~
[Address Parameter L] [ADD-IP G] [DEL-IP G]

Compilando e executando

root@kitploit:~
gcc -O2 -Wall -o poc poc.c
./poc

Sem root. O PoC desfaz o compartilhamento de um namespace de usuário + rede, define os sysctls do SCTP nele, estabelece uma associação multi-homed via loopback e então injeta o ASCONF forjado com um socket bruto.

Saída esperada em um kernel vulnerável:

root@kitploit:~
[+] Association established (no AUTH)
[+] server_vtag=0x... captured_tsn=0x...
[*] serial=0x... (= initial_tsn)
[+] Injected 60 bytes
  [9222->9111 vt=...] ASCONF-ACK(0x80) len=8
  [+] ASCONF-ACK -> server processed ADD-IP + DEL-IP
  [9222->9111 vt=...] HB(0x04) len=60        <- kernel using freed transport
  [9111->9222 vt=...] ABORT(0x06) len=8
[+] GhostTransport UAF TRIGGERED (ASCONF-ACK received)
[+] HEARTBEAT to ghost address observed (dangling transport USED)

O HEARTBEAT após o ACK é a parte interessante: esse pacote só existe porque o kernel percorreu o new_transport pendente. O cliente emite ABORT logo em seguida porque o heartbeat voltou fora do esperado.

Por que a injeção bruta é irritante (as três barreiras)

Nada disso é pesquisa nova, é apenas pouco documentado o suficiente para custar uma tarde, então aqui está para a próxima pessoa:

  1. CRC32c. O loopback não entrega CHECKSUM_UNNECESSARY para pacotes de socket bruto, então sctp_rcv() verifica o checksum e descarta em caso de divergência. Calcule o CRC32C (poly 0x82F63B78, refletido) sobre o pacote SCTP inteiro com o campo de checksum zerado.
  2. A segunda verificação de auth. sctp_auth_recv_cid() é executada no caminho de entrada antes da máquina de estados e descarta ASCONF não autenticado mesmo quando addip_noauth_enable=1 — esse sysctl só relaxa a verificação dentro de sctp_sf_do_asconf(). A saída é nunca negociar AUTH no nível do socket em primeiro lugar (sem o setsockopt SCTP_AUTH_SUPPORTED), para que peer.auth_capable permaneça falso e ambas as verificações passem.
  3. O serial. O primeiro serial ASCONF aceito = TSN inicial do peer. Capture qualquer chunk DATA, pegue seu TSN e subtraia um. Erro de um aqui e o chunk é descartado silenciosamente.

Afetado / corrigido

A tag Fixes: no commit upstream é 6af29ccc223b ("sctp: Bundle HEARTBEAT into ASCONF_ACK"), então o código é antigo. Corrigido na mainline e com backport para as séries estáveis (rastreador Debian: corrigido a partir de 7.1.9-1 no sid, 6.12.107 no trixie-security). O Kali rolling em 2026-09-09 traz 7.1.5-1kali1 em todas as suítes, o que antecede tudo isso — essa é a principal relevância prática deste PoC.

Notas de weaponização (onde isto para)

Para quem quiser levar adiante — medido contra 7.1.5 no QEMU, offsets de objdump -d do sctp.ko distribuído:

campooffset
flowi (88 bytes)0x30
ipaddr0x88
af_specific0xa8
asoc0xb0
dst0xe0
state0x15c
rcu0x2b0

sctp_association->new_transport fica em 0x6b0. A tabela vem de pahole -C sctp_transport /sys/kernel/btf/vmlinux no kernel em execução — uma revisão anterior desta tabela trazia um offset de ipaddr errado (0x68, por contagem errada de flowi); o BTF é a fonte da verdade.

  • A liberação é única (callback RCU sctp_transport_destroy_rcu), não há double-free neste caminho. Se você esperava fechar um socket e obter duas liberações — sctp_association_free() só percorre a lista de transports, e rm_peer() já desvinculou o fantasma. Não gaste uma noite com isso.
  • sctp_outq_select_transport() lê state em +0x15c a partir de chunk->transport em +0xe8 do chunk. Um objeto recuperado com spray de state=1 (ACTIVE) altera o comportamento do kernel após a liberação — o objeto está sendo consultado.
  • Correção de temporização das execuções instrumentadas: a leitura obsoleta no local de seleção acontece dentro de microssegundos da injeção do ASCONF — o kernel lê o transport logicamente morto (pendente de RCU) enquanto o spray ainda está a segundos de distância. Uma execução instrumentada flagrou sctp_outq_select_transport() lendo state=0xFFFF (lixo de slab) de um ponteiro de transport obsoleto exatamente no momento da injeção. Consequência: o spray precisa pré-preparar o cache antes do gatilho, não depois — o objeto é lido antes de o período de graça expirar neste caminho.
  • O portão além disso é a verificação de lista vazia em +0x288: o kernel compara *(p+0x288) com p+0x288. Isso é um auto-ponteiro. Você não consegue passar por ele com spray sem saber o endereço do slab, ou seja, esta falha precisa de um vazamento de informação antes de o controle de af_specific se transformar em controle do ponteiro de instrução. O próprio af_specific é um local de chamada indireta (*(af_specific+0x18) com rdi = transport), então esse é o prêmio uma vez que exista um vazamento.
  • Primitiva de spray que funciona: setsockopt(SCTP_AUTH_KEY) com uma chave de 800 bytes cai no mesmo cache kmalloc-1k. Lembre-se de que o cabeçalho é struct sctp_authkey { assoc_id; keynumber; keylength; key[] } e o AUTH precisa ser habilitado por socket primeiro via SCTP_AUTH_SUPPORTED com um sctp_assoc_value — um int simples retorna EINVAL.

Escopo

Este é um PoC de gatilho/queda. Não é uma escalada de privilégios e este repositório não reivindica uma. Execute-o contra seus próprios kernels em uma VM.

Testado em: 7.1.5+kali-amd64 (Kali rolling) e 7.0.12+kali-amd64.

Referências

  • Correção: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=beb33f8ee1ca83acddb2a5ae80f3d22ec550b4c3
  • Rastreador Debian: https://security-tracker.debian.org/tracker/CVE-2026-74586
  • Relatório original de Qing Ming (link lore na mensagem do commit)

Licença

GPL-2.0 para as porções derivadas do kernel da lógica; faça o que quiser com o restante. Apenas para testes de segurança autorizados e pesquisa.

Baixar ferramenta