Alerta de seguridad — CVE de elusión del 2FA de mayo de 2026
En mayo de 2026 se divulgaron en Nextcloud dos vulnerabilidades críticas de elusión de la autenticación de dos factores:
CVE-2026-45690 (puntuación CVSS 5.9, divulgada el 15 de mayo de 2026): un atacante que disponga del identificador y de la contraseña de una cuenta puede eludir la verificación 2FA utilizando una conexión HTTP Basic Auth (autenticación básica mediante la cabecera Authorization: Basic base64(user:pass)). En las versiones afectadas, Nextcloud aceptaba HTTP Basic Auth incluso cuando el 2FA estaba activado en la cuenta objetivo, sin exigir la verificación del segundo factor.
CVE-2026-45691 (puntuación CVSS 5.9, divulgada el 13 de mayo de 2026): misma clase de vulnerabilidad, pero explotable mediante un token Bearer DAV — el protocolo WebDAV, utilizado en particular por los clientes de sincronización de escritorio (Nextcloud Desktop, Nautilus, Finder). Un atacante capaz de interceptar o adivinar un token WebDAV puede acceder a la instancia sin 2FA.
Ambas CVE están corregidas en Nextcloud 32.0.9 (rama 32), 33.0.3 (rama 33) y 34.0.2 (rama 34). Compruebe si su instancia es vulnerable (véase la sección dedicada más abajo).
NC 34.0.0 — apps recomendadas ausentes en el primer arranque
Nextcloud 34.0.0 introduce una regresión en el asistente de instalación: las aplicaciones recomendadas (Notes, Calendar, Contacts) no se proponen durante la configuración inicial. La lista de apps sugeridas permanece vacía, sea cual sea el perfil de instalación elegido.
Impacto concreto: una instancia nueva en NC 34.0.0 no dispone de las aplicaciones básicas. Los usuarios que esperan sincronizar su calendario CalDAV o sus contactos CardDAV deben instalarlas manualmente desde la interfaz de administración.
Fuentes: issues de GitHub #61313 y #61611 — corregido en 34.0.2.
Compruebe si sus apps están presentes:
docker compose exec -u www-data app php occ app:list | grep -E 'calendar|contacts|notes'Si el comando no devuelve nada, las apps no están instaladas. Para añadirlas manualmente:
docker compose exec -u www-data app php occ app:install calendar
docker compose exec -u www-data app php occ app:install contacts
docker compose exec -u www-data app php occ app:install notesRecomendación: empezar directamente en 34.0.2 o superior en lugar de en 34.0.0. Si su instancia funciona en 34.0.0, la actualización a 34.0.2 restaura el asistente — pero las apps que faltan en la instancia existente deben instalarse igualmente de forma manual.
NC 34.0.0 — restricción duplicada en PostgreSQL y explosión de CPU
En las instancias que utilizan PostgreSQL (en lugar de MariaDB/MySQL), una migración interrumpida de Nextcloud 34.0.0 puede dejar una restricción duplicada en la tabla oc_filecache_extended. Este duplicado pasa desapercibido en el arranque, pero provoca una explosión de CPU y de RAM durante el siguiente escaneo de archivos (files:scan) o un mantenimiento automático.
Síntomas: carga de CPU anormalmente elevada en el contenedor Nextcloud, escaneo de archivos que no termina, errores en los registros del tipo duplicate key value violates unique constraint.
Fuente: issue de GitHub #61597.
Verificación y corrección:
# 1. Limpiar las entradas huérfanas de la caché de archivos
docker compose exec -u www-data app php occ files:cleanup
# 2. Recrear los índices de la tabla problemática
docker compose exec -u www-data app php occ db:add-missing-indices
# 3. Comprobar que no queda ningún índice duplicado
docker compose exec -u www-data app php occ db:add-missing-columnsSi los errores persisten, pase directamente a 34.0.2, que contiene la corrección de migración.
Nota: este problema no afecta a las instancias MariaDB/MySQL. Las instancias PostgreSQL en producción en NC 34.0.0 deben aplicar estos comandos antes del próximo escaneo automático.
Requisitos previos y dimensionamiento
Nextcloud es una aplicación PHP polivalente que puede funcionar de forma ligera en un VPS pequeño o volverse exigente si la utiliza como almacenamiento principal de archivos voluminosos.
Configuración mínima recomendada:
- VPS con 2 GB de RAM (4 GB si gestiona más de 5 usuarios activos).
- SSD obligatorio: Nextcloud realiza numerosas operaciones de archivos y de miniaturas. Un disco HDD vuelve la interfaz muy lenta.
- 20 GB de espacio como mínimo para la instalación, más el espacio para sus datos (prevea 2× el tamaño de sus archivos para las miniaturas y las versiones).
- Ubuntu 22.04 o Debian 12.
- Docker Engine ≥ 24 y Docker Compose V2.
- Un nombre de dominio y un certificado TLS (Let's Encrypt mediante Certbot).
- Los puertos 80 y 443 abiertos en su firewall.
Instalación de Nextcloud con Docker Compose
Paso 1 — Crear la estructura del proyecto
mkdir -p /opt/nextcloud && cd /opt/nextcloudCree el archivo
docker-compose.yml:version: '3.8' services: db: image: mariadb:10.11 restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: nextcloud MYSQL_USER: nextcloud MYSQL_PASSWORD: ${MYSQL_PASSWORD} volumes: - db:/var/lib/mysql redis: image: redis:7-alpine restart: unless-stopped command: redis-server --requirepass ${REDIS_PASSWORD} volumes: - redis:/data app: image: nextcloud:34.0.2-apache restart: unless-stopped ports: - '127.0.0.1:8080:80' environment: MYSQL_HOST: db MYSQL_DATABASE: nextcloud MYSQL_USER: nextcloud MYSQL_PASSWORD: ${MYSQL_PASSWORD} NEXTCLOUD_ADMIN_USER: ${NEXTCLOUD_ADMIN_USER} NEXTCLOUD_ADMIN_PASSWORD: ${NEXTCLOUD_ADMIN_PASSWORD} NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_DOMAIN} REDIS_HOST: redis REDIS_HOST_PASSWORD: ${REDIS_PASSWORD} volumes: - nextcloud:/var/www/html depends_on: - db - redis volumes: db: redis: nextcloud:Paso 2 — Crear el archivo de entorno
cat > /opt/nextcloud/.env << 'EOF' MYSQL_ROOT_PASSWORD=root_password_fort MYSQL_PASSWORD=nextcloud_password_fort REDIS_PASSWORD=redis_password_fort NEXTCLOUD_ADMIN_USER=admin NEXTCLOUD_ADMIN_PASSWORD=admin_password_fort NEXTCLOUD_DOMAIN=cloud.votredomaine.com EOFPaso 3 — Iniciar los contenedores
docker compose up -dEl primer arranque tarda de 2 a 4 minutos: Nextcloud instala y configura la aplicación, crea las tablas de la base de datos y configura Redis. Siga el progreso con:
docker compose logs -f appEspere el mensaje
Nextcloud was successfully installedantes de continuar.Paso 4 — Configurar Nginx con TLS
apt install -y nginx certbot python3-certbot-nginx cat > /etc/nginx/sites-available/nextcloud << 'EOF' server { server_name cloud.votredomaine.com; client_max_body_size 10G; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 3600s; } } EOF ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/ certbot --nginx -d cloud.votredomaine.com nginx -t && systemctl reload nginxPaso 5 — Configurar la URL de confianza en Nextcloud
Tras la instalación, Nextcloud debe conocer su dominio público para generar enlaces correctos y aceptar las conexiones.
Edite
config.phpen el contenedor:docker compose exec -u www-data app php occ config:system:set trusted_domains 0 \ --value=cloud.votredomaine.com docker compose exec -u www-data app php occ config:system:set overwrite.cli.url \ --value=https://cloud.votredomaine.com docker compose exec -u www-data app php occ config:system:set htaccess.RewriteBase --value='/' docker compose exec -u www-data app php occ maintenance:update:htaccess
Comprobar si su instancia es vulnerable a las CVE de 2FA
Si su instancia Nextcloud funciona con una versión anterior a 32.0.9, 33.0.3 o 34.0.2 (y tiene el 2FA activado), así es como comprobar su exposición y corregirla.
Comprobar la versión actual:
docker compose exec -u www-data app php occ status
# Muestra: Nextcloud version: 32.0.X, 33.0.X o 34.0.XVersiones vulnerables: todas las versiones Nextcloud 32.x < 32.0.9, 33.x < 33.0.3 y 34.x < 34.0.2.
Prueba de vulnerabilidad (únicamente sobre su propia instancia):
# Compruebe si HTTP Basic Auth elude el 2FA
curl -u utilisateur:motdepasse -X PROPFIND \
https://cloud.votredomaine.com/remote.php/dav/files/utilisateur/ \
-H "Depth: 0" -s -o /dev/null -w "%{http_code}"Si el comando devuelve 207 Multi-Status sin que se solicite el código 2FA, su instancia es vulnerable a CVE-2026-45690.
Actualizar a 34.0.2:
# Modificar docker-compose.yml: cambiar la etiqueta de la imagen
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:34.0.2-apache|g' docker-compose.yml
docker compose pull app
docker compose up -d app
docker compose exec -u www-data app php occ upgradeOptimizar el rendimiento con Redis y OPcache
Una Nextcloud sin Redis es una Nextcloud lenta. Redis desempeña dos papeles críticos: caché de sesiones (evita las lecturas y escrituras en disco en cada petición autenticada) y bloqueo distribuido (file locking), que impide los conflictos durante sincronizaciones simultáneas.
Compruebe que Redis está correctamente conectado:
docker compose exec -u www-data app php occ config:system:get redis
# Debe mostrar una tabla con host, port, passwordSi no aparece nada, añádalo manualmente en el config.php del volumen Nextcloud:
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'redis',
'port' => 6379,
'password' => 'VOTRE_REDIS_PASSWORD',
],OPcache PHP. La imagen Docker oficial de Nextcloud incluye OPcache preconfigurado. Compruebe que está activo:
docker compose exec app php -r "echo opcache_get_status()['opcache_enabled'] ? 'OPcache actif' : 'OPcache inactif';"Resultado esperado: la interfaz de Nextcloud debe resultar notablemente más reactiva con Redis. La diferencia se percibe desde la primera navegación: las peticiones que leían el disco en cada acceso se apoyan ahora en la caché en memoria.
Los 5 errores frecuentes en una instancia Nextcloud
Error 1 — Redis sin configurar. La interfaz es lenta y las sincronizaciones simultáneas crean conflictos. Solución: comprobar y configurar Redis tal como se describe más arriba.
Error 2 — overwrite.cli.url apuntando a http:// en lugar de https://. Los enlaces de compartición, las notificaciones por correo electrónico y los enlaces OIDC generan URL HTTP no seguras. Solución: php occ config:system:set overwrite.cli.url --value=https://votre-domaine.com.
Error 3 — trusted_domains mal configurado. Acceso denegado con el error «You are accessing the server from an untrusted domain». Solución: añadir su dominio con php occ config:system:set trusted_domains 0 --value=votre-domaine.com.
Error 4 — Tamaño máximo de los archivos subidos limitado a 2 MB. El valor por defecto de PHP es demasiado bajo para archivos reales. Solución: en Nginx, añadir client_max_body_size 10G; y, en el contenedor PHP, configurar upload_max_filesize=10G y post_max_size=10G en un archivo .ini montado.
Error 5 — Actualización omitida e instancia vulnerable. Nextcloud publica actualizaciones de seguridad con regularidad. Sin vigilancia de las CVE y sin actualización automática, la instancia se vuelve vulnerable. Solución: configurar las notificaciones de actualización en la interfaz de administración y planificar actualizaciones periódicas.
Verificación de la eficacia de Redis con occ
Nextcloud ofrece una herramienta de diagnóstico integrada para comprobar que su caché Redis se utiliza efectivamente:
# Comprobar el estado general de la instancia
docker compose exec -u www-data app php occ status
# Comprobar las advertencias de configuración (memcache, Redis, HTTPS…)
docker compose exec -u www-data app php occ check
# Mostrar la configuración Redis actual
docker compose exec -u www-data app php occ config:system:get redisEl comando occ check enumera todos los problemas de configuración detectados: Redis ausente, HTTPS no forzado, servidor de correo sin configurar, archivos de datos en el directorio web (riesgo de seguridad), etc. Es el primer diagnóstico que hay que lanzar sobre cualquier instancia Nextcloud existente antes de declararla limpia.
Copias de seguridad de Nextcloud — datos, base y configuración
Nextcloud almacena sus datos en tres lugares distintos, y una copia de seguridad completa debe cubrir los tres:
1. La base de datos MariaDB: contiene los metadatos de los archivos, los usuarios, los recursos compartidos, las aplicaciones instaladas y su configuración.
2. El volumen nextcloud (datos de la aplicación): contiene el código PHP de Nextcloud, las aplicaciones instaladas y config/config.php — el archivo de configuración principal.
3. Los archivos de los usuarios: por defecto en el volumen Docker o en una ruta externa definida por datadirectory en config.php.
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/opt/nextcloud/backups
mkdir -p $BACKUP_DIR
# 1. Activar el modo mantenimiento para garantizar la coherencia
docker compose exec -u www-data app php occ maintenance:mode --on
# 2. Copia de seguridad de la base de datos
docker compose exec -T db \
mysqldump -u nextcloud -p${MYSQL_PASSWORD} nextcloud | gzip > $BACKUP_DIR/db-$DATE.sql.gz
# 3. Copia de seguridad de config.php
docker compose cp app:/var/www/html/config/config.php $BACKUP_DIR/config-$DATE.php
# 4. Desactivar el modo mantenimiento
docker compose exec -u www-data app php occ maintenance:mode --offPróximos pasos — ir más lejos con su instancia
Una vez instalado y asegurado Nextcloud, puede ir más lejos:
Activar Talk (videoconferencia): instale la aplicación Nextcloud Talk desde la interfaz de administración. Para las reuniones de más de 4–5 participantes se requiere un servidor TURN (Coturn en un VPS dedicado).
Activar OnlyOffice o Collabora Online (edición de documentos en línea): estas aplicaciones necesitan su propio contenedor Docker y una configuración de Nextcloud Office. Permiten crear y modificar archivos .docx, .xlsx y .pptx directamente en la interfaz web.
Monitorización de la instancia: configure las alertas en Administración → Monitorización para recibir notificaciones por correo electrónico si Nextcloud detecta errores de configuración, actualizaciones de seguridad o problemas de cuota.
Actualizar Nextcloud en producción
La actualización de Nextcloud debe pasar siempre por el modo mantenimiento para evitar corrupciones de datos mientras hay clientes sincronizando:
# 1. Activar el modo mantenimiento
docker compose exec -u www-data app php occ maintenance:mode --on
# 2. Copia de seguridad de la base de datos
docker compose exec -T db mysqldump -u nextcloud -p${MYSQL_PASSWORD} nextcloud \
| gzip > /opt/nextcloud/backups/pre-update-db.sql.gz
# 3. Cambiar la versión en docker-compose.yml (ej.: 34.0.2-apache)
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:34.0.2-apache|g' docker-compose.yml
# 4. Descargar la nueva imagen y reiniciar
docker compose pull app
docker compose up -d app
# 5. Ejecutar las migraciones
docker compose exec -u www-data app php occ upgrade
# 6. Desactivar el modo mantenimiento
docker compose exec -u www-data app php occ maintenance:mode --offCompruebe los registros después de la actualización (docker compose logs app) y pruebe un acceso de usuario antes de dar la actualización por buena.