Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2025-38502-Linux-LPE — Repository di ricerca per CVE-2025-38502, un accesso out-of-bounds alla memoria locale del cgroup BPF del kernel Linux tramite tail call che consente l'escalation locale dei privilegi. | Kitploit
Strumenti/GitHubGitHub/abraxas/cve-2025-38502-linux-lpe
Escalation di PrivilegiMemory ForensicsAnalisi delle VulnerabilitàExploitReverse EngineeringPaper e RicercaApprendimento e FormazioneBinary Exploitation

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
GitHub
abraxas/cve-2025-38502-linux-lpe

CVE-2025-38502-Linux-LPE

Repository di ricerca per CVE-2025-38502, un accesso out-of-bounds alla memoria locale del cgroup BPF del kernel Linux tramite tail call che consente l'escalation locale dei privilegi.

Vedi Repository
21813 giorni faNon ancora revisionato

ABRAXAS LABS — CVE-2025-38502

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

CVE-2025-38502

Accesso out-of-bounds alla cgroup local storage di BPF del kernel Linux tramite tail call

CVECVE-2025-38502
CWECWE-125 — Out-of-bounds Read
VendorLinux kernel
Componentekernel/bpf/core.c, include/linux/bpf.h (cgroup local storage + tail call)
ImpattoCorruzione locale della memoria del kernel; l'escalation di privilegi rientra nello scope su kernel non patchati
Vettore di attaccoLocale (AV:L)
PrivilegiBassi (PR:L) — un processo in grado di caricare programmi BPF di tipo CGROUP_SKB (o programmi equivalenti collegati a cgroup)
Interazione utenteNessuna
CVSS 3.1 (kernel.org CNA)7.8 HIGH — 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 HIGH — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
Pubblico16 agosto 2025
Fix upstreamabad3d0 in 6.17-rc1; backportato a 6.16.1, 6.12.46, 6.6.105, 6.1.151, 5.15.192

Solo per ricerca / uso educativo. Non eseguire, distribuire o utilizzare il materiale presente in questo repository contro qualsiasi host, a meno che tu non abbia esplicita autorizzazione scritta sia dal soggetto che ospita questo repository sia dal proprietario dei sistemi target. Trovato in the wild.

Il nome del file sorgente CVE-2025-3850-Linux-LPE-Abaraxas-Labs.c tronca l'identificatore. Il record pubblicato è CVE-2025-38502. Non esiste alcun CVE Linux CVE-2025-3850.


Contenuti

  • Riepilogo
  • Impatto
  • Causa principale
  • Versioni del kernel interessate
  • Stato nelle distribuzioni
  • Precondizioni
  • Il fix
  • Verifica di un sistema in esecuzione
  • Mitigazione
  • Struttura del repository
  • Riferimenti
  • Contatti
  • Disclaimer

Riepilogo

Lonial ha segnalato che la cgroup BPF local storage può essere acceduta out of bounds attraverso una tail call.

Il verifier eBPF esegue il type-check di ciascun programma in isolamento. A runtime, bpf_get_local_storage() non cerca la map del programma attualmente in esecuzione. Legge il puntatore alla cgroup-storage da current->bpf_ctx → bpf_cg_run_ctx → prog_item->cgroup_storage[]. Quello slot viene riempito dal programma originariamente collegato, non dal programma in cui è stata effettuata la tail call.

Se il programma A (con BPF_MAP_TYPE_CGROUP_STORAGE di dimensione value piccola) effettua una tail call verso il programma B (dimensione value grande), la bpf_get_local_storage() di B restituisce comunque il buffer più piccolo di A. Gli accessi che il verifier aveva consentito sulla map di B finiscono quindi oltre la fine dell'allocazione di A.

Il difetto è stato introdotto in Linux 5.9 da 7d9c342 (bpf: Make cgroup storages shared between programs on the same cgroup). È stato corretto estendendo bpf_map_owner con un storage_cookie[], in modo che le combinazioni di tail call siano accettate solo quando il callee usa le stesse cgroup-storage map del caller, oppure non ne usa alcuna.


Impatto

Si tratta di un accesso out-of-bounds locale all'heap del kernel. Il punteggio di severità varia tra i vendor perché non concordano se la primitiva sia un "DoS in sola lettura" o una vera e propria corruzione di memoria:

FontePunteggioIntegritàNote
kernel.org CNA / cve.org7.8 HIGHAltaC:H/I:H/A:H — tratta il bug come impatto locale completo
NVD7.1 HIGHNessunaC:H/I:N/A:H — riservatezza + disponibilità
UbuntuMedium (7.1)—USN-7909
Red Hat4.0 LOWNessunaC:N/I:N/A:L — valutato come disponibilità limitata
Amazon Linux4.0 MediumNessunastesso vettore di Red Hat
SUSE6.1 ModerateNessunaalcuni stream SLE 15 marcati WONTFIX

Cosa significa in pratica:

  • Riservatezza. Una lettura OOB dell'oggetto kmalloc adiacente può far trapelare puntatori del kernel (KASLR slide), heap cookie e contenuti di strutture adiacenti.
  • Integrità. Lo stesso mismatch è una scrittura dimensionata rispetto alla map del callee, contro il buffer più piccolo del caller. Gli oggetti heap adiacenti (ad esempio una struct bpf_array spruzzata nello stesso slab/order) possono essere corrotti.
  • Disponibilità. Una scrittura mal indirizzata è un banale kernel oops / panic.
  • Privilegi. Su un kernel non patchato in cui è possibile caricare programmi BPF cgroup, questa classe di heap OOB è stata usata come primitiva di local privilege escalation (sovrascrittura di map->ops, hijack di un helper, commit_creds / cambio di namespace). È per questo che questo repository etichetta il problema come LPE. Il punteggio più basso di Red Hat riflette la loro valutazione specifica per prodotto, non l'assenza del bug.

Il bug non richiede un servizio esposto in rete. È locale. Non richiede una TTY, un helper setuid o l'interazione dell'utente.


Causa principale

Verifier vs runtime

Due programmi BPF cgroup, ciascuno con la propria BPF_MAP_TYPE_CGROUP_STORAGE (variante shared, BPF_CGROUP_STORAGE_SHARED):

ProgrammaRuoloDimensione value della storage
Acollegato / caller della tail callpiccola (ad es. compatibile con un dato kmalloc order)
Btarget della tail callgrande (il verifier consente accessi fino a questa dimensione)

Il verifier controlla A rispetto alla map di A e B rispetto alla map di B. Entrambi passano.

A runtime l'helper esegue:

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 è la voce dell'array relativa al programma che ha avviato la cgroup run, non al programma attualmente in esecuzione dopo bpf_tail_call. B opera quindi sull'oggetto storage di A.

Perché le dimensioni contano

bpf_cgroup_storage_alloc() dimensiona il buffer di supporto in base alla value_size della map. Il buffer di A è troppo piccolo per gli accessi verificati di B. Il risultato è una classica type-confusion dell'identità della map attraverso un trasferimento di controllo — la stessa famiglia di bug di altre problematiche BPF in cui "l'helper vede una map diversa da quella vista dal verifier".

Storage condivisa su un cgroup

Il commit 7d9c342 ha reso le cgroup storage condivise tra programmi collegati allo stesso cgroup. È questa condivisione che rende lo slot del run-context un singolo puntatore anziché una ricerca per-programma, ed è il motivo per cui i kernel precedenti alla 5.9 non sono interessati.

Oggetti adiacenti

Scarica lo strumento