Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2025-38502-Linux-LPE — Repositório de pesquisa para CVE-2025-38502, um acesso fora dos limites ao armazenamento local do cgroup BPF do kernel Linux via tail calls, permitindo escalonamento local de privilégios. | Kitploit
Ferramentas/GitHubGitHub/abraxas/cve-2025-38502-linux-lpe
Escalada de PrivilégiosForensia de MemóriaAnálise de VulnerabilidadesExploraçãoEngenharia ReversaPapers e PesquisaAprendizado e EducaçãoExploração de Binários

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
GitHub
abraxas/cve-2025-38502-linux-lpe

CVE-2025-38502-Linux-LPE

Repositório de pesquisa para CVE-2025-38502, um acesso fora dos limites ao armazenamento local do cgroup BPF do kernel Linux via tail calls, permitindo escalonamento local de privilégios.

Ver Repositório
218há 13 diasAinda não revisado

ABRAXAS LABS — CVE-2025-38502

Abraxas Labs · abraxaslabs.tech · github.com/abraxas · @abraxas_null

CVE-2025-38502

Acesso fora dos limites ao armazenamento local de cgroup do BPF do kernel Linux via tail calls

CVECVE-2025-38502
CWECWE-125 — Leitura fora dos limites
FornecedorLinux kernel
Componentekernel/bpf/core.c, include/linux/bpf.h (armazenamento local de cgroup + tail calls)
ImpactoCorrupção de memória local do kernel; escalonamento de privilégios está no escopo em kernels não corrigidos
Vetor de ataqueLocal (AV:L)
PrivilégiosBaixo (PR:L) — um processo capaz de carregar programas BPF do tipo CGROUP_SKB (ou programas equivalentes anexados a cgroup)
Interação do usuárioNenhuma
CVSS 3.1 (kernel.org CNA)7.8 ALTO — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS 3.1 (NVD)7.1 ALTO — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
Público16 de agosto de 2025
Correção upstreamabad3d0 em 6.17-rc1; backport para 6.16.1, 6.12.46, 6.6.105, 6.1.151, 5.15.192

Apenas para pesquisa / uso educacional. Não execute, implante ou use o material deste repositório contra qualquer host, a menos que você tenha permissão explícita por escrito tanto da parte que hospeda este repositório quanto do proprietário dos sistemas-alvo. Encontrado em ambiente real.

O nome do arquivo de origem CVE-2025-3850-Linux-LPE-Abaraxas-Labs.c trunca o identificador. O registro publicado é CVE-2025-38502. Não existe CVE do Linux CVE-2025-3850.


Conteúdo

  • Resumo
  • Impacto
  • Causa raiz
  • Versões do kernel afetadas
  • Status nas distribuições
  • Pré-condições
  • A correção
  • Verificando um sistema em execução
  • Mitigação
  • Estrutura do repositório
  • Referências
  • Contato
  • Aviso legal

Resumo

Lonial relatou que o armazenamento local de cgroup do BPF pode ser acessado fora dos limites através de uma tail call.

O verificador do eBPF faz a checagem de tipos de cada programa isoladamente. Em tempo de execução, bpf_get_local_storage() não consulta o mapa do programa atualmente em execução. Ele lê o ponteiro do armazenamento de cgroup de current->bpf_ctx → bpf_cg_run_ctx → prog_item->cgroup_storage[]. Esse slot é preenchido a partir do programa originalmente anexado, não do programa para o qual foi feita a tail call.

Se o programa A (com tamanho de valor pequeno em BPF_MAP_TYPE_CGROUP_STORAGE) faz uma tail call para o programa B (com tamanho de valor grande), o bpf_get_local_storage() de B ainda retorna o buffer menor de A. Os acessos que o verificador permitiu em relação ao mapa de B então ultrapassam o fim da alocação de A.

O defeito foi introduzido no Linux 5.9 por 7d9c342 (bpf: Make cgroup storages shared between programs on the same cgroup). Foi corrigido estendendo bpf_map_owner com um storage_cookie[], de modo que combinações de tail call só são aceitas quando o chamado usa os mesmos mapas de armazenamento de cgroup que o chamador, ou não usa nenhum.


Impacto

Este é um acesso fora dos limites no heap do kernel local. A pontuação de severidade varia por fornecedor porque eles discordam sobre se a primitiva é “DoS somente leitura” ou corrupção total de memória:

FontePontuaçãoIntegridadeNotas
kernel.org CNA / cve.org7.8 ALTOAltaC:H/I:H/A:H — trata o bug como impacto local total
NVD7.1 ALTONenhumaC:H/I:N/A:H — confidencialidade + disponibilidade
UbuntuMédio (7.1)—USN-7909
Red Hat4.0 BAIXONenhumaC:N/I:N/A:L — avaliado como disponibilidade limitada
Amazon Linux4.0 MédioNenhumamesmo vetor do Red Hat
SUSE6.1 ModeradoNenhumaalguns fluxos do SLE 15 marcados como WONTFIX

O que isso significa na prática:

  • Confidencialidade. Uma leitura OOB do objeto kmalloc vizinho pode vazar ponteiros do kernel (deslocamento do KASLR), cookies do heap e conteúdos de estruturas adjacentes.
  • Integridade. A mesma incompatibilidade é uma escrita dimensionada em relação ao mapa do chamado, contra o buffer menor do chamador. Objetos adjacentes do heap (por exemplo, um struct bpf_array pulverizado na mesma slab/ordem) podem ser corrompidos.
  • Disponibilidade. Uma escrita com alvo errado é um oops / panic direto do kernel.
  • Privilégio. Em um kernel não corrigido onde programas BPF de cgroup podem ser carregados, essa classe de OOB no heap tem sido usada como primitiva de escalonamento de privilégios local (sobrescrever map->ops, sequestrar um helper, commit_creds / troca de namespace). É por isso que esta árvore rotula o problema como LPE. A pontuação mais baixa do Red Hat reflete sua avaliação específica de produto, não a ausência do bug.

O bug não exige um serviço exposto à rede. É local. Não exige um TTY, um helper setuid ou interação do usuário.


Causa raiz

Verificador vs tempo de execução

Dois programas BPF de cgroup, cada um com seu próprio BPF_MAP_TYPE_CGROUP_STORAGE (variante compartilhada, BPF_CGROUP_STORAGE_SHARED):

ProgramaPapelTamanho do valor de armazenamento
Aanexado / chamador da tail callpequeno (por exemplo, cabe em uma dada ordem de kmalloc)
Balvo da tail callgrande (o verificador permite acessos até esse tamanho)

O verificador checa A em relação ao mapa de A e B em relação ao mapa de B. Ambos passam.

Em tempo de execução, o helper faz:

ctx = container_of(current->bpf_ctx, struct bpf_cg_run_ctx, run_ctx);
storage = ctx->prog_item->cgroup_storage[stype];
if (stype == BPF_CGROUP_STORAGE_SHARED)
    ptr = &READ_ONCE(storage->buf)->data[0];
else
    ptr = this_cpu_ptr(storage->percpu_buf);

prog_item é a entrada do array para o programa que iniciou a execução do cgroup, não o programa atualmente em execução após bpf_tail_call. Portanto, B opera sobre o objeto de armazenamento de A.

Por que os tamanhos importam

bpf_cgroup_storage_alloc() dimensiona o buffer de suporte a partir do value_size do mapa. O buffer de A é pequeno demais para os acessos verificados de B. O resultado é uma clássica confusão de tipo da identidade do mapa através de uma transferência de controle — a mesma família de bugs de outros problemas de BPF em que “o helper vê um mapa diferente do que o verificador viu”.

Armazenamento compartilhado em um cgroup

O commit 7d9c342 tornou os armazenamentos de cgroup compartilhados entre programas anexados ao mesmo cgroup. Esse compartilhamento é o que faz o slot do contexto de execução ser um único ponteiro em vez de uma consulta por programa, e é por isso que kernels anteriores ao 5.9 não são afetados.

Objetos adjacentes

Baixar ferramenta