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-2021-3899_PoC — Race Condition in apport führt zu lokaler Privilegieneskalation auf Ubuntu | Kitploit
Tools/GitHubGitHub/liumuqing/cve-2021-3899_poc
Privilege EscalationSchwachstellenanalyseExploitationPenetrationstests
GitHubliumuqing/cve-2021-3899_poc

CVE-2021-3899_PoC

Race Condition in apport führt zu lokaler Privilegieneskalation auf Ubuntu

Repository anzeigen
31vor 4 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-2021-3899 PoC

Reproduktion

  1. Installieren Sie eine ältere Version von apport: sudo apt-get install apport=2.20.11-0ubuntu27 (beliebige Version <= 2.20.11-0ubuntu27.10 ist in Ordnung, aber Sie müssen den Quellcode herunterladen)
  2. (optional) setzen Sie eine kleine pid_max. Andernfalls dauert die Vorbereitung des PID-Rollbacks länger. echo 10000 | sudo tee /proc/sys/kernel/pid_max
  3. ermöglichen Sie jedem, ping als root auszuführen: fügen Sie ALL ALL=(root) NOPASSWD: /usr/bin/ping in /etc/sudoers ein.
  4. führen Sie ulimit -c unlimited; ./exploit mehrmals aus.
  5. Sie sollten eine Datei unter /etc/logrotate.d/core sehen.
  6. öffnen Sie eine weitere Shell und führen Sie nc -lvcp 1234 aus.
  7. warten Sie, bis logrotate ausgelöst wird. Sie können:
    1. stellen Sie die Uhr eine Minute vor dem crontab-daily-Trigger ein und warten Sie. (check /etc/crontab)
    2. führen Sie sudo logrotate -vf /usr/sbin/logrotate /etc/logrotate.conf aus, um logrotate sofort auszulösen. (just same as /etc/cron.daily/logrotate)
  8. es wird eine Reverse-Root-Shell hergestellt, die sich mit 127.0.0.1:1234 verbindet.

Details

Apport überprüft, ob die PID wiederverwendet wird, indem es prüft, ob die Startzeit des Prozesses später als die von Apport selbst ist:

root@kitploit:~
  # /usr/share/apport/apport
  594 apport_start = get_apport_starttime()
  595 process_start = get_process_starttime()
  596 if process_start > apport_start:
  597 error_log('process was replaced after Apport started, ignoring')
  598 sys.exit(0)

Aber diese PID könnte direkt nach dem Start von Apport wiederverwendet werden. In diesem Fall gilt get_apport_starttime() == get_process_starttime().

So können Sie Apport veranlassen, eine Core-Datei mit -rw------- root:root abzulegen, wenn Sie diese PID mit einem anderen Prozess, der unter uid==0 läuft, wieder besetzen können:

  1. bereiten Sie einen Prozess X zum Absturz vor, dessen PID A ist.
  2. wiederholen Sie den Fork-Prozess, bis die aktuelle PID A - 2 erreicht.
  3. lassen Sie Prozess X abstürzen. Apport wird vom Kernel mit PID A - 1 gestartet. Wir töten Prozess X, sodass PID A jetzt frei ist.
  4. führen Sie den Befehl sudo ping 8.8.8.8 mit cwd /etc/logrotate.d/ aus. Ein Prozess, der unter root:root läuft, besetzt PID A erneut.
  5. Da die Startzeit von sudo und apport gleich ist, wird die Prüfung in Zeile 596 umgangen. Apport legt dann eine Core-Datei von Prozess X in /etc/logrotate.d ab.
Tool herunterladen