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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2019-13272 — Tiefgehende Analyse und Exploit für CVE-2019-13272, eine Linux-Kernel-Privilegieneskalations-Schwachstelle (ptrace). Enthält Code-Walkthrough und Exploitation-Szenario. | Kitploit
Tools/GitHubGitHub/datntsec/cve-2019-13272
Privilege EscalationSchwachstellenanalyseExploitationLernen & BildungBinary-Exploitation
GitHubdatntsec/cve-2019-13272

CVE-2019-13272

Tiefgehende Analyse und Exploit für CVE-2019-13272, eine Linux-Kernel-Privilegieneskalations-Schwachstelle (ptrace). Enthält Code-Walkthrough und Exploitation-Szenario.

Repository anzeigen
6vor 5 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2019-13272

PTRACE_TRACEME CVE-2019-13272 Analyse der lokalen Privilegieneskalations-Schwachstelle

PTRACE_TRACEME ist eine Privilegieneskalations-Schwachstelle im Linux-Kernel, die im Juli 2019 von Jann Horn entdeckt wurde.

Schwachstellenanalyse:

Ptrace ist ein Systemaufruf, der eine Methode bereitstellt, die es einem Prozess (Tracer) ermöglicht, die Ausführung eines anderen Prozesses (Tracee) zu beobachten und zu steuern, dessen Core-Abbild und Register zu überprüfen und zu ändern. Es wird hauptsächlich verwendet, um Breakpoints beim Debuggen zu setzen und den Verlauf von Systemaufrufen zu verfolgen.``` c 1 396 kernel/ptrace.c <<ptrace_attach>> ptrace_link(task, current); 2 469 kernel/ptrace.c <<ptrace_traceme>> ptrace_link(current, current->real_parent);

Es gibt zwei Möglichkeiten, eine Trace-Beziehung herzustellen:
  - Ein Prozess ruft fork auf, und sein Kindprozess ruft `PTRACE_TRACEME` (entspricht der Kernel-Funktion `ptrace_traceme`) auf, um einen Tracee zu initialisieren.
  - Ein Prozess ruft `PTRACE_ATTACH` oder `PTRACE_SEIZE` (entspricht der Kernel-Funktion `ptrace_attach`) auf, um einen Tracer zu initialisieren, der einen anderen Prozess tracen kann.

Unabhängig davon, welche Methode verwendet wird, wird am Ende die Funktion `ptrace_link` aufgerufen, um die Trace-Beziehung zwischen Tracer und Tracee herzustellen.
- Die beiden an `ptrace_link` übergebenen Parameter für `ptrace_attach` sind 'task' (Tracee) und 'current' (Tracer).
- Die beiden an `ptrace_link` übergebenen Parameter für `ptrace_traceme` sind 'current' (Tracee) und 'current->real_parent' (Tracer).

Hierbei müssen wir beachten, welche beiden Parameter von Tracer und Tracee in den beiden obigen Methoden beim Aufruf von `ptrace_link` übergeben werden, da die Schwachstelle in der Funktion `ptrace_link` liegt.``` c
static void ptrace_link(struct task_struct *child, struct task_struct *new_parent)
{
        rcu_read_lock();
        __ptrace_link(child, new_parent, __task_cred(new_parent));
        rcu_read_unlock();
}

void __ptrace_link(struct task_struct *child, struct task_struct *new_parent,
                   const struct cred *ptracer_cred)
{
        BUG_ON(!list_empty(&child->ptrace_entry));
        list_add(&child->ptrace_entry, &new_parent->ptraced); // 1. thêm chính nó vào hàng đợi 
                                                                 // ptraced của process cha
        child->parent = new_parent; // 2. Lưu địa chỉ của process cha trong con trỏ parent
        child->ptracer_cred = get_cred(ptracer_cred); // 3. Lưu ptracer_cred lại, ta cần tập trung 
                                                          // vào biến này vì lỗi nằm ở đây
}

Der Schlüssel zur Einrichtung einer Trace-Beziehung besteht darin, dass der Tracee die Credentials des Tracers aufzeichnet und sie in der Variablen 'ptracer_cred' des Tracee speichert.

Das Konzept von 'ptracer_cred' wurde durch einen Patch aus dem Jahr 2016 eingeführt: ptrace: Capture the ptracer's creds not PT_PTRACE_CAP. Der Zweck der Einführung von 'ptracer_cred' war es, eine Sicherheitsprüfung durchzuführen, wenn der Tracee einen exec ausführt, um eine setuid executable zu laden.

Warum ist diese Sicherheitsprüfung notwendig?

Die Familie der exec-Aufrufe kann das Image eines Prozesses aktualisieren. Wenn das setuid-Bit der ausführbaren Datei gesetzt ist, wird bei der Ausführung der ausführbaren Datei die euid des Prozesses auf die UID des Besitzers der ausführbaren Datei geändert. Die Berechtigungen des Prozesses sind dann höher als die des Benutzers, der exec aufgerufen hat, und die Ausführung einer solchen setuid executable hat eine Eskalationswirkung (escalation).

Stellen Sie sich vor, wenn der Prozess, der exec ausführt, selbst ein Tracee ist, nachdem er eine setuid executable ausgeführt hat, um seine Privilegien zu erweitern, kann sein Tracer jederzeit dessen (des Tracee) Register und Speicher ändern. Wenn ein Tracer mit niedrigen Privilegien einen Tracee mit hohen Privilegien kontrollieren kann, könnte der Tracer über den Tracee unbefugte Operationen ausführen.

Im Kernel scheint es jedoch nicht erlaubt zu sein, dass derartige Befugnisüberschreitungen existieren. Daher muss der Tracee beim Einrichten von Trace-Beziehungen die Credentials des Tracers (d.h. ptracer_cred) speichern. Wenn der Tracee einen exec-Prozess ausführt, wird überprüft, ob das setuid-Bit der ausgeführten Datei gesetzt ist. Falls ja, werden die Berechtigungen von 'ptracer_cred' berücksichtigt. Wenn die Berechtigungen nicht ausreichen, wird die ausführbare Datei nicht mit den erweiterten Rechten (den Privilegien des Dateibesitzers) ausgeführt, sondern mit den Rechten des ursprünglichen Benutzers.

Die Codeanalyse dieses Prozesses ist wie folgt (die Codeanalyse dieses Artikels basiert auf v4.19-rc8).``` python do_execve -> __do_execve_file -> prepare_binprm -> bprm_fill_uid -> security_bprm_set_creds ->cap_bprm_set_creds -> ptracer_capable ->selinux_bprm_set_creds ->(apparmor_bprm_set_creds) ->(smack_bprm_set_creds) ->(tomoyo_bprm_set_creds)

Tool herunterladen