Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 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
221vor 13 TagenNoch 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:

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

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:

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

Tool herunterladen