Resumen
Deck, la aplicación de tableros tipo kanban de Nextcloud, permite al administrador limitar la creación de tableros a ciertos grupos. Según el propio texto de la configuración, quien quede fuera de esos grupos no podrá crear tableros propios, aunque sí trabajar en los que le compartan.
La restricción solo se aplicaba a la acción de crear un tablero. La función de clonar tablero no la comprobaba: un usuario sin permiso podía duplicar un tablero al que tuviera acceso (por ejemplo, su tablero "Personal") y renombrar la copia, con lo que obtenía un tablero nuevo con todas las opciones normales. El endpoint afectado es:
POST /nextcloud/apps/deck/boards/board_number/clone
HackerOne lo clasifica como Improper Access Control - Generic. El reporte se envió el 23 de febrero de 2024, se resolvió con recompensa (importe no público) y se divulgó el 16 de enero de 2026.
Pasos de reproducción
- Como administrador, crear
user1,group1ygroup2, y añadiruser1agroup1. - En la aplicación Deck, abrir Deck settings y añadir
group2al campo Limit board creation to some groups. La propia interfaz avisa: "Users outside of those groups will not be able to create their own boards, but will still be able to work on boards that have been shared with them." - Entrar como
user1en Deck. El botón + Add board no aparece, como se espera. Si se envía directamente la petición de creación, el servidor responde con un 403 y el mensaje:
Creating boards has been disabled for your account.
- Abrir las opciones del tablero Personal y elegir Clone board. Se crea una copia del tablero, que se puede renombrar y usar como un tablero nuevo cualquiera. El mismo resultado se obtiene enviando directamente:
POST /nextcloud/apps/deck/boards/board_number/clone
Impacto
Un usuario al que el administrador ha prohibido crear tableros puede crearlos igualmente, lo que deja sin efecto la opción "Limit board creation to some groups". El reporte no describe acceso a datos de otros usuarios: el efecto es saltarse esa política de creación.
Qué aprender de este caso
- Cuando una aplicación restringe "crear X", revisa todas las rutas que acaban creando un X: clonar, duplicar, importar, restaurar desde plantilla o desde la papelera. En Deck, crear devolvía 403 y clonar no.
- Ocultar el botón en la interfaz no es un control: aquí el botón "+ Add board" desaparecía, pero había otra acción en el menú del tablero y su endpoint directo que hacían lo mismo.
- Al programar, conviene centralizar la comprobación del permiso en la capa que crea la entidad (el servicio que inserta el tablero) y no en cada controlador, para que una función nueva como "clonar" la herede sin acordarse de añadirla.