Vulnerabilidad en Vikunja (CVE-2026-33336)
Gravedad CVSS v4.0:
MEDIA
Tipo:
CWE-94
Control incorrecto de generación de código (Inyección de código)
Fecha de publicación:
24/03/2026
Última modificación:
27/03/2026
Descripción
Vikunja es una plataforma de gestión de tareas de código abierto y autoalojada. Desde la versión 0.21.0 hasta la versión 2.2.0, el envoltorio Electron de Vikunja Desktop habilita `nodeIntegration` en la ventana principal del navegador (BrowserWindow) y no restringe las navegaciones dentro de la misma ventana. Un atacante que pueda colocar un enlace en contenido generado por el usuario (descripciones de tareas, comentarios, descripciones de proyectos) puede hacer que BrowserWindow navegue a un origen controlado por el atacante, donde JavaScript se ejecuta con acceso completo a Node.js, lo que da lugar a la ejecución de código arbitrario en el equipo de la víctima. La versión 2.2.0 corrige el problema. ## Causa raíz Dos errores de configuración se combinan para crear esta vulnerabilidad: 1. **`nodeIntegration: true`** está establecido en las preferencias web de `BrowserWindow` (`desktop/main.js:14-16`), lo que otorga a cualquier página cargada en el renderizador acceso completo a las API de Node.js (`require`, `child_process`, `fs`, etc.). 2. **No hay ningún controlador `will-navigate` o `will-redirect`** registrado en `webContents`. El `setWindowOpenHandler` existente (`desktop/main.js:19-23`) solo intercepta las llamadas a `window.open()` (solicitudes de nuevas ventanas). **No** intercepta las navegaciones dentro de la misma ventana provocadas por: - Enlaces `` (sin `target=«_blank»`) - Asignaciones de `window.location` - Redireccionamientos HTTP - Etiquetas `` ## Escenario de ataque 1. El atacante es un usuario normal en la misma instancia de Vikunja (por ejemplo, un miembro de un proyecto compartido). 2. El atacante crea o edita la descripción de un proyecto o de una tarea que contiene un enlace HTML estándar, por ejemplo: `Haga clic aquí para ver las especificaciones de diseño actualizadas` 3. La interfaz de Vikunja muestra este enlace. El proceso de sanitización de DOMPurify lo permite correctamente, ya que se trata de una etiqueta de anclaje legítima y no de una inyección de código. Ejemplo de ruta de renderizado: `frontend/src/views/project/ProjectInfo.vue` utiliza `v-html` con salida sanitizada por DOMPurify. 4. La víctima utiliza Vikunja Desktop y hace clic en el enlace. 5. Como no existe ningún controlador `will-navigate`, BrowserWindow navega a `https://evil.example/exploit` en el mismo proceso de renderizado. 6. La página del atacante se ejecuta ahora en un contexto con `nodeIntegration: true` y ejecuta: `require(“child_process”).exec(“id > /tmp/pwned”);` 7. Se ejecutan comandos arbitrarios como usuario del sistema operativo de la víctima. ## Impacto Ejecución remota completa de código en el escritorio de la víctima. El atacante puede leer/escribir archivos arbitrarios, ejecutar comandos arbitrarios, instalar malware o puertas traseras, y sustraer credenciales y datos confidenciales. No se requiere ninguna vulnerabilidad XSS: basta con un hipervínculo normal aprobado por el sanitizador. ## Prueba de concepto 1. Configura una instancia de Vikunja con dos usuarios que compartan un proyecto. 2. Como usuario atacante, edita la descripción del proyecto para incluir: `Notas de la reunión` 3. Aloja el archivo poc.html con: `` 4. Como víctima, abre el proyecto en Vikunja Desktop y haz clic en el enlace. 5. Se ejecuta calc.exe (o cualquier otro comando) en el equipo de la víctima. ## Créditos Esta vulnerabilidad se detectó utilizando [GitHub Security Lab Taskflows](https://github.com/GitHubSecurityLab/seclab-taskflows).
Impacto
Puntuación base 4.0
6.50
Gravedad 4.0
MEDIA
Puntuación base 3.x
8.80
Gravedad 3.x
ALTA
Productos y versiones vulnerables
| CPE | Desde | Hasta |
|---|---|---|
| cpe:2.3:a:vikunja:vikunja:*:*:*:*:*:*:*:* | 0.21.0 (incluyendo) | 2.2.2 (excluyendo) |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página



