
Repositório de pesquisa para CVE-2026-74469 (DiagSpill), um overflow de contador de transporte de peer SCTP do kernel Linux que causa uma escrita fora dos limites, com PoC, análise de causa raiz e detalhes do patch.
DiagSpill
Uma vulnerabilidade do SCTP no kernel Linux causada por um estouro do contador de transportes de peer de 16 bits, permitindo que o contador passe de 65535 para 0. Durante um dump de diagnóstico do SCTP, o valor estourado pode causar reserva insuficiente de payload do skb, seguida de uma escrita fora dos limites de dados de endereço de peer.
Este repositório destina-se apenas a pesquisa de segurança autorizada, análise de vulnerabilidades de kernel, ambientes de CTF, depuração de kernel e testes defensivos.
Não utilize código de prova de conceito contra sistemas sem autorização explícita.
O aviso de CVE do Kernel Linux descreve o problema como um estouro de
transport_count de 16 bits no SCTP, seguido de uma alocação subdimensionada de
INET_DIAG_PEERS e uma escrita fora dos limites durante o dump de diagnóstico.
O código vulnerável mantém o número de transportes de peer únicos em um contador de 16 bits:
transport_count
Cada novo peer único adicionado incrementa o contador.
O limite crítico é:
65535
Adicionar outro transporte único causa:
65535 + 1
↓
0
O wraparound resultante cria uma inconsistência entre:
transport_count
e:
transport_addr_list
O subsistema de diagnóstico posteriormente confia no contador estourado ao calcular o tamanho do buffer de resposta, enquanto ainda itera pela lista completa de endereços de peer.
A vulnerabilidade pode ser representada como:
SCTP Association
│
▼
Add unique peers
│
▼
transport_count
uint16_t
│
▼
65,535 peers
│
▼
+ 1 unique peer
│
▼
Integer wrap
│
▼
transport_count = 0
│
▼
SCTP sock_diag
│
▼
Reserve incorrect payload
│
▼
Iterate complete peer list
│
▼
Out-of-bounds skb write
O aviso upstream afirma especificamente que o 65.536º transporte faz o contador voltar a zero.
O código de diagnóstico efetivamente depende de duas visões diferentes do mesmo estado.
transport_count
│
▼
payload size
transport_addr_list
│
▼
copy every peer address
Após o inteiro estourar:
transport_count = 0
transport_addr_list =
[peer 1]
[peer 2]
[peer 3]
...
[peer 65536]
O alocador, portanto, reserva espaço com base em:
0 peers
enquanto a operação de cópia ainda pode processar:
65536 peer addresses
Essa incompatibilidade produz a violação de segurança de memória.
O aviso do Kernel Linux descreve o dump de diagnóstico resultante como reservando um payload vazio e então escrevendo aproximadamente 8 MiB de endereços de peer além do tail do skb.
Conceitualmente:
Expected skb:
┌───────────────────────────────┐
│ INET_DIAG header │
├───────────────────────────────┤
│ Peer addresses │
└───────────────────────────────┘
▲
│
valid end
Actual vulnerable state:
┌───────────────────────────────┐
│ INET_DIAG header │
└───────────────────────────────┘
▲
│
skb tail
↓
Peer address writes
↓
Peer address writes
↓
Peer address writes
↓
OUT-OF-BOUNDS WRITE
A Red Hat classifica a falha como CWE-787: Escrita Fora dos Limites.
O caminho relevante pode ser resumido como:
SCTP association
│
▼
sctp_assoc_add_peer()
│
▼
transport_count++
│
▼
16-bit overflow
│
▼
SCTP sock_diag
│
▼
INET_DIAG_PEERS
│
▼
skb payload reservation
│
▼
transport_addr_list iteration
│
▼
Out-of-bounds write
O arquivo-fonte afetado é:
net/sctp/associola.c
O anúncio de CVE do Kernel Linux identifica esse arquivo explicitamente.
A correção upstream é:
bd0e9289e2642f6a5c54faad304ce0f41e926d22
Commit:
sctp: prevent peer transport count overflow
A correção rejeita um novo peer único quando:
transport_count >= U16_MAX
É importante notar que a verificação ocorre após a busca por peer existente.
Isso preserva a capacidade de recuperar um transporte já existente mesmo quando a associação atingiu o limite.
New peer
│
▼
transport_count++
│
▼
Possible 16-bit wrap
│
▼
Diagnostic size mismatch
│
▼
OOB write
New peer
│
▼
Existing peer?
│
┌─┴──────────┐
│ │
YES NO
│ │
▼ ▼
Reuse Check U16_MAX
transport │
▼
Reject at limit
A propriedade de segurança importante é impedir que o contador estoure enquanto preserva a semântica normal de busca para um peer existente.
A corrupção de memória pode potencialmente resultar em:
Pesquisas públicas divulgadas após a divulgação relatam exploração local-root sob condições específicas, enquanto a pontuação original do CNA do Kernel Linux usa AV:L/AC:H/PR:L/UI:N.
A vulnerabilidade também é descrita como potencialmente alcançável remotamente sob circunstâncias muito específicas de configuração de SCTP/endereço, mas isso não deve ser tratado como equivalente a uma vulnerabilidade geralmente explorável remotamente.
Topologia isolada recomendada:
┌───────────────────────────────────────────┐
│ Linux VM │
│ │
│ ┌───────────────────┐ │
│ │ SCTP Association │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ Multiple SCTP │ │
│ │ Peer Transports │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ SCTP sock_diag │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ INET_DIAG_PEERS │
│ │
└───────────────────────────────────────────┘
Ferramentas úteis:
ip sctp
ss
ss -a
ss -A sctp
dmesg -w
gdb
pwndbg
crash
Verificar suporte a SCTP:
lsmod | grep sctp
Verificar configuração do kernel:
grep CONFIG_IP_SCTP /boot/config-$(uname -r)
Verificar o kernel em execução:
uname -r
Verificar configuração do SCTP:
grep -E 'CONFIG_IP_SCTP|CONFIG_SCTP' \
/boot/config-$(uname -r)
Verificar módulos SCTP carregados:
lsmod | grep -i sctp
Inspecionar sockets SCTP:
ss -A sctp
Para pesquisa controlada de kernel:
01. Build vulnerable kernel
↓
02. Boot isolated VM
↓
03. Enable SCTP
↓
04. Create controlled SCTP association
↓
05. Populate unique peer transports
↓
06. Reach transport-count boundary
↓
07. Trigger SCTP diagnostic dump
↓
08. Monitor skb diagnostics
↓
09. Capture kernel behavior
↓
10. Apply upstream fix
↓
11. Repeat test
↓
12. Compare vulnerable vs patched
Monitorar a saída do kernel:
sudo dmesg -w
Para depuração:
gdb vmlinux
ou:
pwndbg vmlinux
CVE-2026-74469-DiagSpill/
│
├── README.md
│
├── exploit/
│ ├── poc.c
│ └── Makefile
│
├── analysis/
│ ├── root-cause.md
│ ├── sctp-transport-count.md
│ ├── sock-diag.md
│ ├── skb-overflow.md
│ └── patch-analysis.md
│
├── kernel/
│ ├── vulnerable/
│ └── patched/
│
├── lab/
│ ├── setup.sh
│ ├── cleanup.sh
│ └── topology.md
│
├── screenshots/
│
├── docs/
│ └── research-notes.md
│
└── LICENSE
A mitigação principal é atualizar para um kernel que contenha a correção upstream.
Para Debian/Kali:
sudo apt update
sudo apt full-upgrade
Em seguida, reinicie:
sudo reboot
Verifique:
uname -r
Se o SCTP não for necessário, os administradores também podem considerar
desabilitar a funcionalidade SCTP afetada de acordo com seu ambiente e
requisitos operacionais. A pesquisa pública lista especificamente a
desabilitação do SCTP / sctp_diag como mitigação imediata quando esses
componentes não são utilizados.
O anúncio upstream de versões estáveis lista estas versões corrigidas:
Essas versões são do anúncio de CVE do Kernel Linux; as distribuições podem fazer backport da correção em pacotes com numeração de versão diferente.
Um contador de 16 bits tem um máximo rígido:
U16_MAX = 65535
Código sensível à segurança deve tratar explicitamente esse limite.
O tamanho usado para alocar um buffer deve corresponder ao número de objetos realmente copiados para dentro dele.
APIs de diagnóstico do kernel podem se tornar superfícies de ataque de corrupção de memória quando o estado interno se torna inconsistente.
A primitiva original é um estouro de inteiro, mas o impacto de segurança resultante é uma escrita fora dos limites no kernel.
Associações SCTP podem conter grandes coleções de transportes de peer, tornando limites de contadores e lógica de gerenciamento de listas críticos para a segurança.
net/sctp/associola.csctp_assoc_add_peer()sctp: prevent peer transport count overflowbd0e9289e2642f6a5c54faad304ce0f41e926d22Linux Kernel · SCTP · sock_diag · OOB Write · Kernel Security
Pesquisar • Analisar • Reproduzir • Fortalecer
| Campo | Detalhes |
|---|
| CVE | CVE-2026-74469 |
| Codename | DiagSpill |
| Componente | Linux Kernel |
| Subsistema | SCTP / sock_diag |
| Arquivo Afetado | net/sctp/associola.c |
| Função Principal | sctp_assoc_add_peer() |
| Classe do Bug | Estouro de inteiro / Escrita fora dos limites |
| Impacto | Corrupção de memória do kernel |
| Impacto Potencial | Escalação de privilégios local |
| CVSS v3.1 | 7.0 — Alta |
| Vetor de Ataque | Local |
| Complexidade do Ataque | Alta |
| Privilégios Necessários | Baixos |
| Interação do Usuário | Nenhuma |
| Status | Corrigido |
| Propriedade de Segurança | Vulnerável | Corrigido |
|---|
| Limite de transporte de 16 bits aplicado | ❌ | ✅ |
| Estouro do contador impedido | ❌ | ✅ |
| Peers existentes permanecem utilizáveis | ✅ | ✅ |
| Tamanho do payload de diagnóstico confiável | ❌ | ✅ |
| Escrita OOB no skb impedida | ❌ | ✅ |
| Corrupção de memória do kernel mitigada | ❌ | ✅ |
| Branch | Versão Corrigida |
|---|
| 5.10 | 5.10.265 |
| 5.15 | 5.15.216 |
| 6.1 | 6.1.183 |
| 6.6 | 6.6.151 |
| 6.12 | 6.12.103 |
| 6.18 | 6.18.44 |
| 7.1 | 7.1.8 |
| 7.2 | 7.2-rc6 |