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.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-46558 — El subsistema de activos V2 de Plane confiaba en slugs de espacio de trabajo y UUIDs de activos sin aplicar las verificaciones de membresía correctas, lo que permitía a un usuario autenticado leer, copiar, eliminar y sobrescribir activos en otros espacios de trabajo. | Kitploit
Herramientas/GitHubGitHub/0xmrma/cve-2026-46558
Análisis de VulnerabilidadesExplotación de Aplicaciones WebPruebas de PenetraciónPapers e InvestigaciónAprendizaje y EducaciónRecursos Curados
GitHub0xmrma/cve-2026-46558

CVE-2026-46558

El subsistema de activos V2 de Plane confiaba en slugs de espacio de trabajo y UUIDs de activos sin aplicar las verificaciones de membresía correctas, lo que permitía a un usuario autenticado leer, copiar, eliminar y sobrescribir activos en otros espacios de trabajo.

Ver Repositorio
7hace 3 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-46558

El subsistema de activos V2 de Plane confiaba en slugs de espacios de trabajo y UUIDs de activos sin aplicar las comprobaciones de membresía correctas, lo que permitía a un usuario autenticado leer, copiar, eliminar y sobrescribir activos en otros espacios de trabajo.

Introducción

Encontré este problema mientras revisaba Plane, la plataforma de gestión de proyectos de código abierto, con una pregunta muy específica en mente:

¿Los endpoints de activos V2 realmente imponen los límites del espacio de trabajo, o confían demasiado en los slugs de espacios de trabajo y los IDs de activos proporcionados por el atacante?

En este caso, la respuesta fue no.

El subsistema de activos V2 de Plane expuso dos fallos de autorización relacionados que rompían el aislamiento del espacio de trabajo para cualquier usuario autenticado:

  • el endpoint de activos a nivel de espacio de trabajo no aplicaba la membresía del espacio de trabajo destino antes de las operaciones con activos
  • el flujo de duplicación de activos autorizaba solo el espacio de trabajo destino y confiaba en el UUID del activo fuente sin verificar el acceso al espacio de trabajo fuente

Eso hizo posible el abuso de activos entre espacios de trabajo.

En mi PoC validado, un usuario normal en el espacio de trabajo Bravo pudo:

  • descargar el activo subido privado de Alpha
  • duplicar ese activo en el propio espacio de trabajo de Bravo
  • eliminar el activo original de Alpha
  • sobrescribir el logotipo del espacio de trabajo de Alpha con contenido controlado por el atacante

Ese problema luego fue asignado como CVE-2026-46558.

Plane: Plane en GitHub
CVE: CVE-2026-46558

Esto afectó a Plane, que en su sitio oficial se presenta como utilizado por más de 50.000 equipos en todo el mundo. Plane también destaca una fuerte adopción de código abierto, incluyendo más de 46.000 estrellas en GitHub y más de 1.000.000 de descargas en Docker, y muestra organizaciones como Tencent, Accenture, Microsoft y Amazon.

photo0

Cadena de ataque

atacante autenticado en espacio de trabajo B → ruta de activos V2 a nivel de espacio de trabajo confía en el slug del espacio de trabajo destino y el UUID del activo sin comprobaciones de membresía adecuadas → lectura presignada / parche / eliminación contra activos del espacio de trabajo A + búsqueda de fuente de duplicación de activos confía en el UUID de fuente subido → divulgación, copia, eliminación y sobrescritura de marca entre espacios de trabajo


Qué hace Plane

Plane es una plataforma de gestión de proyectos de código abierto utilizada para gestionar:

  • tareas
  • incidencias
  • sprints
  • documentos
  • triaje
  • marca y activos a nivel de espacio de trabajo

Eso significa que su subsistema de activos se encuentra en un límite de confianza real.

La pregunta importante aquí no era si Plane admite subidas.

La verdadera pregunta era:

¿Plane impone el aislamiento del espacio de trabajo cuando un usuario autenticado hace referencia a activos propiedad de otro espacio de trabajo?

En este caso, no lo hizo.


Por qué valió la pena investigar este error

Muchas revisiones de aplicaciones multiinquilino se centran primero en endpoints de administrador obvios o actualizaciones directas de configuración.

Eso pasa por alto una clase de errores muy común y muy real:

acceso a objetos secundarios a través de subsistemas de archivos o activos compartidos

Los sistemas de activos son fáciles de equivocar porque a menudo combinan:

  • identificadores controlados por el usuario
  • indirección de la capa de almacenamiento
  • vinculación de objetos basada en metadatos
  • generación de URL presignadas
  • múltiples tipos de entidad detrás de una ruta compartida

Eso es exactamente el tipo de lugar donde los límites del inquilino se debilitan silenciosamente.

Este problema no era sobre corrupción de almacenamiento. No era sobre S3 en sí mismo. No era sobre el manejo de MIME en las subidas.

Era una falla en el límite de autorización:

  • identificadores controlados por el atacante cruzaron el límite
  • el servidor resolvió objetos entre espacios de trabajo
  • la autorización estaba incompleta o ausente
  • las acciones privilegiadas sobre activos aún tuvieron éxito

Eso es suficiente para crear una vulnerabilidad real.


El límite en el que me centré

No abordé Plane probando ciegamente endpoints aleatorios o adivinando UUIDs sin un modelo.

El enfoque más sólido fue identificar primero el límite de aislamiento más prometedor.

Para Plane, ese fue el subsistema de activos V2.

¿Por qué?

Porque un sistema de activos compartido se vuelve peligroso cuando:

  • existen múltiples espacios de trabajo
  • los objetos subidos se referencian por UUID
  • los slugs de espacios de trabajo son entradas de ruta controladas por el atacante
  • la aplicación luego convierte búsquedas exitosas en rutas de descarga o mutación presignadas

Ese era el límite correcto para inspeccionar.

Y fue exactamente donde vivía el error.


Causa raíz

En realidad, fueron dos fallos de autorización relacionados en el mismo subsistema.

Causa raíz 1: rutas de activos del espacio de trabajo sin aplicación de membresía

Las rutas de activos a nivel de espacio de trabajo estaban expuestas a través de:

  • apps/api/plane/app/urls/asset.py:50-56

Los controladores vulnerables estaban en:

  • apps/api/plane/app/views/asset/v2.py:314
  • apps/api/plane/app/views/asset/v2.py:379
  • apps/api/plane/app/views/asset/v2.py:400
  • apps/api/plane/app/views/asset/v2.py:409

El problema era simple.

WorkspaceFileAssetEndpoint aceptaba un slug de espacio de trabajo y un UUID de activo, luego resolvía objetos directamente como:

workspace = Workspace.objects.get(slug=slug)

y:

asset = FileAsset.objects.get(id=asset_id, workspace__slug=slug)

sin antes verificar que quien llamaba era realmente un miembro autorizado de ese espacio de trabajo destino.

Eso significaba que el endpoint aún podía:

  • crear activos
  • finalizar activos
  • eliminar activos
  • devolver URL de descarga presignadas

para objetos de otro espacio de trabajo.

Causa raíz 2: duplicación de activos confiaba en el UUID del activo fuente

La ruta de duplicación de activos estaba mapeada a través de:

  • apps/api/plane/app/urls/asset.py:100-101

La lógica vulnerable estaba en:

  • apps/api/plane/app/views/asset/v2.py:736-780

El espacio de trabajo destino tenía un decorador de autorización. Pero la búsqueda del activo fuente no.

El objeto fuente se cargaba con:

original_asset = FileAsset.objects.filter(id=asset_id, is_uploaded=True).first()

Eso significaba que quien llamaba solo necesitaba:

  • acceso válido al espacio de trabajo destino
  • un UUID de activo fuente que estuviera subido

No había ninguna comprobación de que quien llamaba perteneciera al espacio de trabajo fuente que realmente poseía ese activo.

Ese es todo el segundo error.


Por qué esto es un problema de seguridad, no solo una lógica de acceso deficiente

La distinción importante es el impacto entre espacios de trabajo.

Muchos errores de autorización se minimizan como:

“aún requiere inicio de sesión”

Eso no capta el punto.

La verdadera pregunta no es:

“¿Quien llama está autenticado?”

La verdadera pregunta es:

“¿Quien llama está autorizado para el espacio de trabajo específico y el activo específico sobre el que se actúa?”

En Plane, la respuesta fue no.

Eso convierte lo que podría parecer un manejo ordinario de objetos en un problema real de seguridad multiinquilino.

Hay una clara diferencia entre:

  • acceso autenticado dentro de tu propio espacio de trabajo
  • y acceso autenticado que cruza el límite de otro inquilino
Descargar herramienta