Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2025-38502-Linux-LPE — Forschungs-Repository für CVE-2025-38502, einen Out-of-Bounds-Zugriff auf den lokalen Speicher der Linux-Kernel-BPF-Cgroup über Tail Calls, der lokale Rechteausweitung ermöglicht. | Kitploit
Tools/GitHubGitHub/abraxas/cve-2025-38502-linux-lpe
Privilege EscalationSpeicherforensikSchwachstellenanalyseExploitationReverse EngineeringPapers & ForschungLernen & BildungBinary-Exploitation

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
GitHub
abraxas/cve-2025-38502-linux-lpe

CVE-2025-38502-Linux-LPE

Forschungs-Repository für CVE-2025-38502, einen Out-of-Bounds-Zugriff auf den lokalen Speicher der Linux-Kernel-BPF-Cgroup über Tail Calls, der lokale Rechteausweitung ermöglicht.

Repository anzeigen
vor 9h 35mNoch nicht geprüft

ABRAXAS LABS — CVE-2025-38502

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

CVE-2025-38502

Linux-Kernel-BPF-Cgroup-Local-Storage-Out-of-Bounds-Zugriff über Tail Calls

CVECVE-2025-38502
CWECWE-125 — Out-of-bounds Read
HerstellerLinux-Kernel
Komponentekernel/bpf/core.c, include/linux/bpf.h (Cgroup Local Storage + Tail Calls)
AuswirkungLokale Kernel-Speicherbeschädigung; Privilegieneskalation ist auf ungepatchten Kerneln im Rahmen des Möglichen
AngriffsvektorLokal (AV:L)
PrivilegienNiedrig (PR:L) — ein Prozess, der BPF-Programme vom Typ CGROUP_SKB (oder äquivalente cgroup-attached Programme) laden kann
BenutzerinteraktionKeine
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
Veröffentlicht16. August 2025
Upstream-Fixabad3d0 in 6.17-rc1; zurückportiert nach 6.16.1, 6.12.46, 6.6.105, 6.1.151, 5.15.192

Nur für Forschung / Bildungszwecke. Führen Sie Material in diesem Repository nicht aus, setzen Sie es nicht ein und verwenden Sie es nicht gegen einen Host, es sei denn, Sie haben die ausdrückliche schriftliche Genehmigung sowohl der Partei, die dieses Repository hostet, als auch des Eigentümers der Zielsysteme. In freier Wildbahn gefunden.

Der Quelldateiname CVE-2025-3850-Linux-LPE-Abaraxas-Labs.c schneidet den Bezeichner ab. Der veröffentlichte Eintrag ist CVE-2025-38502. Es gibt kein Linux-CVE CVE-2025-3850.


Inhalt

  • Zusammenfassung
  • Auswirkung
  • Ursache
  • Betroffene Kernel-Versionen
  • Distributionsstatus
  • Voraussetzungen
  • Der Fix
  • Überprüfung eines laufenden Systems
  • Mitigation
  • Repository-Struktur
  • Referenzen
  • Kontakt
  • Haftungsausschluss

Zusammenfassung

Lonial meldete, dass Cgroup-BPF-Local-Storage über einen Tail Call hinweg außerhalb der Grenzen zugegriffen werden kann.

Der eBPF-Verifier prüft jedes Programm isoliert auf Typen. Zur Laufzeit sucht bpf_get_local_storage() nicht die Map des aktuell ausgeführten Programms. Es liest den Cgroup-Storage-Zeiger aus current->bpf_ctx → bpf_cg_run_ctx → prog_item->cgroup_storage[]. Dieser Slot wird vom ursprünglich angehängten Programm befüllt, nicht von dem Programm, in das per Tail Call gesprungen wurde.

Wenn Programm A (kleine BPF_MAP_TYPE_CGROUP_STORAGE-Wertgröße) per Tail Call in Programm B (große Wertgröße) springt, liefert bpf_get_local_storage() von B weiterhin den kleineren Puffer von A. Zugriffe, die der Verifier gegen B's Map erlaubt hat, laufen dann über das Ende von A's Allokation hinaus.

Der Defekt wurde in Linux 5.9 durch 7d9c342 (bpf: Make cgroup storages shared between programs on the same cgroup) eingeführt. Behoben wurde er durch Erweiterung von bpf_map_owner um ein storage_cookie[], sodass Tail-Call-Kombinationen nur akzeptiert werden, wenn der Callee dieselben Cgroup-Storage-Maps wie der Caller verwendet oder gar keine.


Auswirkung

Dies ist ein lokaler Kernel-Heap-Out-of-Bounds-Zugriff. Die Schweregradbewertung variiert je nach Hersteller, weil sie sich uneinig darüber sind, ob das Primitiv ein „Read-only-DoS“ oder vollständige Speicherbeschädigung ist:

Was das in der Praxis bedeutet:

  • Vertraulichkeit. Ein OOB-Read des benachbarten kmalloc-Objekts kann Kernel-Zeiger (KASLR-Slide), Heap-Cookies und Inhalte angrenzender Strukturen preisgeben.
  • Integrität. Dieselbe Fehlanpassung ist ein größenbasierter Schreibzugriff relativ zur Map des Callee gegen den kleineren Puffer des Caller. Benachbarte Heap-Objekte (zum Beispiel ein in dieselbe Slab/Order gespraytes struct bpf_array) können beschädigt werden.
  • Verfügbarkeit. Ein fehlgeleiteter Schreibzugriff ist ein unkomplizierter Kernel-Oops / Panic.
  • Privilegien. Auf einem ungepatchten Kernel, auf dem BPF-Cgroup-Programme geladen werden können, wurde diese Klasse von Heap-OOB als Primitiv für lokale Privilegieneskalation verwendet (Überschreiben von map->ops, Hijacking eines Helpers, commit_creds / Namespace-Wechsel). Deshalb bezeichnet dieser Tree das Problem als LPE. Red Hats niedrigerer Score spiegelt deren produktspezifische Bewertung wider, nicht die Abwesenheit des Bugs.

Der Bug erfordert keinen netzwerkseitig erreichbaren Dienst. Er ist lokal. Er erfordert kein TTY, keinen setuid-Helper und keine Benutzerinteraktion.


Ursache

Verifier vs. Laufzeit

Zwei Cgroup-BPF-Programme, jedes mit eigenem BPF_MAP_TYPE_CGROUP_STORAGE (Shared-Flavor, BPF_CGROUP_STORAGE_SHARED):

ProgrammRolleStorage-Wertgröße
Aangehängt / Tail-Call-Callerklein (z. B. passt in eine gegebene kmalloc-Order)
BTail-Call-Zielgroß (Verifier erlaubt Zugriffe bis zu dieser Größe)

Der Verifier prüft A gegen A's Map und B gegen B's Map. Beide bestehen.

Zur Laufzeit macht der Helper Folgendes:

root@kitploit:~
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 ist der Array-Eintrag für das Programm, das den Cgroup-Run gestartet hat, nicht für das Programm, das nach bpf_tail_call aktuell ausgeführt wird. B arbeitet daher auf A's Storage-Objekt.

Warum die Größen wichtig sind

bpf_cgroup_storage_alloc() dimensioniert den zugrunde liegenden Puffer anhand der value_size der Map. A's Puffer ist zu klein für B's verifizierte Zugriffe. Das Ergebnis ist eine klassische Typverwechslung der Map-Identität über einen Kontrolltransfer hinweg — dieselbe Bug-Familie wie andere BPF-Probleme, bei denen „der Helper eine andere Map sieht als der Verifier“.

Shared Storage auf einer Cgroup

Commit 7d9c342 machte Cgroup-Storages zwischen Programmen, die an dieselbe Cgroup angehängt sind, geteilt. Diese Teilung ist der Grund, warum der Run-Context-Slot ein einzelner Zeiger ist statt eines Lookups pro Programm, und warum Kernel vor 5.9 nicht betroffen sind.

Benachbarte Objekte

BPF_PROG_TEST_RUN auf einem BPF_PROG_TYPE_CGROUP_SKB-Programm allokiert Cgroup-Storage für die Dauer des Tests. Diese Allokation liegt auf dem Kernel-Heap neben allem anderen, was kürzlich in derselben Größenklasse freigegeben wurde — einschließlich struct bpf_array-Maps, deren value_size so gewählt wurde, dass sie in derselben kmalloc-Order landen. Ein OOB vom Storage-Puffer kann daher bpf_map-Felder (ops, RCU-Liste, value[]) einer benachbarten Array-Map erreichen.

Dieses Heap-Layout-Detail ist der Grund, warum ein „bloßes OOB-Read“-Advisory und ein LPE-Write-up dieselbe CVE beschreiben können.


Betroffene Kernel-Versionen

Eingeführt: Linux 5.9 (7d9c3427894fe70d1347b4820476bf37736d2ff0)
Nicht betroffen: alle Kernel vor 5.9

Einzeiler:

root@kitploit:~
/* CVE-2025-38502: affected 5.9–5.15.191, 5.16–6.1.150, 6.2–6.6.104, 6.7–6.12.45, 6.13–6.16.0; fixed in 5.15.192, 6.1.151, 6.6.105, 6.12.46, 6.16.1, 6.17-rc1 */

In einigen Stables noch offen: Debian's Kernel-Tracker listete 5.10 Upstream-Stable / bullseye 5.10 als needed. Gehen Sie nicht davon aus, dass jedes 5.10.y gepatcht ist.

Distro-ABI-Nummern täuschen. Ubuntu 5.15.0-163 ist ein gepatchter 5.15, obwohl 5.15.0 älter aussieht als Upstream 5.15.192. Vergleichen Sie das Paket-Changelog / USN / DSA / ALAS / RHSA, nicht uname -r mit der obigen Tabelle.


Distributionsstatus

Jede Distribution, die einen Kernel in den obigen Bereichen ausgeliefert hat, war im Rahmen, bis sie abad3d0 (oder den passenden Stable-Commit) zurückportiert hat. Dies ist generischer BPF-Code, kein distro-spezifischer Patch.

Typischerweise betroffen bis gepatcht

Nicht betroffen (GA-Kernel älter als 5.9)

  • Ubuntu 20.04 GA (5.4), 18.04, 16.04
  • RHEL 8 Standard (4.18)
  • Amazon Linux 1; Amazon Linux 2 core / 5.4 extra

Bekannte gepatchte Paketversionen (Beispiele)

Ubuntu 26.04 / 25.10 sind als nicht betroffen gelistet (sie zweigten nach dem Fix ab). Ubuntu 25.04 erreichte EOL weiterhin needed.


Voraussetzungen

Ein Host kann einer betroffenen Version entsprechen und dennoch nicht erreichbar sein. Nützliche Prüfungen:

unprivileged_bpf_disabled=1 ist kein vollständiger Fix — ein Benutzer mit BPF-Capability kann den Bug weiterhin auslösen — aber es entfernt den unprivilegierten Pfad.


Der Fix

Upstream-Commit abad3d0bad72a52137e0c350c59542d75ae4f513 (bpf: Fix oob access in cgroup local storage, Daniel Borkmann).

struct bpf_map_owner erhält ein storage_cookie[]-Array. Beim Update des Tail-Call-Ziels macht der Kernel nun Folgendes:

  1. Wenn der Callee bpf_get_local_storage() verwendet — verlange, dass die Cgroup-Storage-Maps des Callee exakt die Maps des Caller sind (gleiche Cookies).
  2. Wenn der Callee keinen Cgroup Local Storage verwendet — erlaube die Tail-Call-Kombination.

Nicht übereinstimmende Wertgrößen können nicht mehr hinter dem Rücken des Verifiers kombiniert werden. Jedes Programm wird weiterhin allein verifiziert; die neue Prüfung liegt auf der Kante zwischen ihnen.

Cherry-picken Sie den Commit nicht auf einen beliebigen Tree ohne die umgebenden BPF-Owner/Cookie-Helper. Verwenden Sie den Stable-Backport für Ihre Serie.


Überprüfung eines laufenden Systems

root@kitploit:~
uname -r
# Compare against the table above, then against your distro advisory —
# Ubuntu/Debian ABI numbers are not upstream stable numbers.

grep -E 'CONFIG_BPF_SYSCALL|CONFIG_CGROUP_BPF' \
  /boot/config-$(uname -r) /proc/config.gz 2>/dev/null

sysctl kernel.unprivileged_bpf_disabled
# 0  = unprivileged bpf allowed (widest exposure)
# 1  = disabled after first privileged use, or fully disabled depending on kernel
# 2  = disabled (admin can re-enable)

Bestätigen Sie das Paket, nicht nur den Versionsstring:

root@kitploit:~
# Debian / Ubuntu
apt changelog linux-image-$(uname -r) 2>/dev/null | grep -i 38502

# RHEL family
rpm -q --changelog kernel | grep -i 38502

Ein Kernel ≥ 6.17, oder ein Stable aus der Spalte „Erstmals behoben“, oder ein Distro-Paket aus der Advisory-Tabelle, ist der tatsächliche Abschluss.


Mitigation

  1. Patchen. Installieren Sie den Distro-Kernel, der abad3d0 / das Stable-Äquivalent enthält. Dies ist der einzige vollständige Fix.
  2. Bis Sie patchen können:
    • Setzen Sie kernel.unprivileged_bpf_disabled=1 (oder 2), um unprivilegierte Loader auszuschließen.
    • Beschränken Sie CAP_BPF, CAP_PERFMON und CAP_SYS_ADMIN für nicht vertrauenswürdige Benutzer und Container.
    • In User-Namespaces / unprivilegierten Containern: Deaktivieren Sie BPF (seccomp, LSM oder Entfernen dieser Caps in der Runtime).
  3. Betrachten Sie „wir hängen selbst keine Cgroup-SKB-Programme an“ nicht als Sicherheit. BPF_PROG_TEST_RUN reicht aus, um den Allokationspfad zu durchlaufen; ein lokaler Angreifer liefert die Programme.

Repository-Struktur

root@kitploit:~
CVE-2025-38502/
├── README.md
├── banner.png
├── CVE-2025-3850-Linux-LPE-Abaraxas-Labs.c
└── ebpf_lpe.h
DateiWas sie ist
banner.pngREADME-Banner (Abraxas Labs / CVE-2025-38502)
CVE-2025-3850-Linux-LPE-Abaraxas-Labs.cIn freier Wildbahn wiederhergestellter Forschungsquellcode (Dateiname schneidet die CVE-ID ab)
ebpf_lpe.hGemeinsame BPF-Instruktionskonstruktoren, Map-Helper und Kernel-Offset-Makros, die von diesem Quellcode verwendet werden

Dieses Verzeichnis dokumentiert die Schwachstelle und enthält den zugehörigen Forschungs-Tree. Es ist kein Drop-in-Exploit-Kit: Kernel-Gadget-Symbole (ARRAY_MAP_OPS_OFF, COMMIT_CREDS, …) sind Compile-Zeit-Eingaben für ein spezifisches vmlinux, und das Ausführen des Programms gegen einen laufenden Kernel liegt außerhalb des Rahmens dieses README.


Referenzen

CVE / NVD

  • CVE-2025-38502
  • NVD
  • GitHub Advisory GHSA-x96j-4m6x-jcvx

Upstream

  • Eingeführt: 7d9c342 — bpf: Make cgroup storages shared between programs on the same cgroup
  • Behoben: abad3d0 — bpf: Fix oob access in cgroup local storage
  • linux-cve-announce

Stable-Backports

  • 6.16.1 19341d5c
  • 6.12.46 41688d1f
  • 6.6.105 7acfa07c
  • 6.1.151 66da7cee
  • 5.15.192 c1c74584

Distros

  • Ubuntu CVE-Seite
  • Debian Security Tracker
  • Debian kernel-sec
  • Red Hat
  • Amazon Linux ALAS
  • SUSE

Kontakt

Abraxas Labs — nur Forschung / autorisierte Tests

Websitehttps://abraxaslabs.tech
GitHubhttps://github.com/abraxas
X@abraxas_null

Haftungsausschluss

Dieses Repository dient Forschung und Bildung.

Kompilieren, führen Sie aus, setzen Sie ein oder verwenden Sie den Code hier anderweitig nicht gegen ein System, es sei denn, Sie haben die ausdrückliche schriftliche Genehmigung sowohl der Partei, die dieses Repository hostet, als auch des Eigentümers des Ziels. Unbefugter Zugriff auf Computersysteme ist eine Straftat.

Die Autoren und Abraxas Labs stellen dieses Material wie besehen bereit, ohne Gewährleistung, dass es vollständig, korrekt oder sicher auszuführen ist. Kernel-Exploitation-Forschung kann eine Maschine zum Absturz bringen, Dateisysteme beschädigen und Datenverlust verursachen. Sie übernehmen dieses Risiko.

In freier Wildbahn gefunden.

Tool herunterladen
QuelleScoreIntegritätAnmerkungen
kernel.org CNA / cve.org7.8 HIGHHochC:H/I:H/A:H — behandelt den Bug als vollständige lokale Auswirkung
NVD7.1 HIGHKeineC:H/I:N/A:H — Vertraulichkeit + Verfügbarkeit
UbuntuMittel (7.1)—USN-7909
Red Hat4.0 LOWKeineC:N/I:N/A:L — als eingeschränkte Verfügbarkeit bewertet
Amazon Linux4.0 MittelKeinegleicher Vektor wie Red Hat
SUSE6.1 ModerateKeineeinige SLE-15-Streams als WONTFIX markiert
SerieBetroffenErstmals behoben
5.9 – 5.155.9 bis 5.15.1915.15.192 (c1c74584…)
5.16 – 6.15.16 bis 6.1.1506.1.151 (66da7cee…)
6.2 – 6.66.2 bis 6.6.1046.6.105 (7acfa07c…)
6.7 – 6.126.7 bis 6.12.456.12.46 (41688d1f…)
6.13 – 6.166.13 bis 6.16.06.16.1 (19341d5c…)
mainlinebis der Fix landete6.17-rc1 (abad3d0b…)
DistroReleases / Kernel, die im Bereich lagen
Ubuntu22.04 LTS (5.15), 24.04 LTS (6.8), 25.04 (EOL weiterhin needed). 20.04 HWE 5.15.
Debian11 bullseye (5.10), 12 bookworm (6.1), 13 trixie (6.12)
RHEL 9 / 10, Rocky, Alma, FedoraRHEL 9 ≈ 5.14; RHEL 10 ≈ 6.12; Fedora rolling 5.9–6.16
SUSE / openSUSESLE Micro 5.3/5.4; einige SLE-15-Streams WONTFIX
Amazon Linux 2023Standard-Kernel und kernel6.12
Amazon Linux 2 extras5.10 extra (kein Fix geplant) und 5.15 extra
Arch, Gentoo, TumbleweedRolling-Kernel zwischen 5.9 und dem Fix in 6.16.1 / 6.17-rc1
DistroBehobenes Paket (indikativ)Advisory
Ubuntu 22.04linux 5.15.0-163.173USN-7909
Ubuntu 24.04linux 6.8.0-106.106dieselbe
Debian 12linux 6.1.153-1DSA-6009-1
Debian 13linux 6.12.48-1DSA-6008-1
Debian 11 (6.1-Backport)linux-6.1 6.1.153-1~deb11u1DLA-4328-1
Amazon Linux 2023kernel / kernel6.12, 2025-09-29ALAS2023-2025-1210 / 1208
Amazon Linux 2 5.15 extra2025-09-29ALAS2KERNEL-5.15-2025-091
BedingungWarum sie wichtig ist
CONFIG_BPF_SYSCALL=ybpf(2) muss existieren
CONFIG_CGROUP_BPF=ycgroup-attached Programme und Cgroup Local Storage
kernel.unprivileged_bpf_disabled0 erlaubt unprivilegiertes Laden von Programmen; 1/2 erfordern CAP_BPF / CAP_PERFMON / CAP_SYS_ADMIN
Lockdown / LSM / seccompkann BPF_PROG_LOAD oder BPF_PROG_TEST_RUN blockieren
BPF_PROG_TYPE_CGROUP_SKB (oder andere Cgroup-Programmtypen, die Local Storage tragen)der Run-Context, der cgroup_storage[] enthält