Alerte sécurité — CVE de contournement 2FA de mai 2026
En mai 2026, deux vulnérabilités critiques de contournement de l'authentification à deux facteurs ont été divulguées dans Nextcloud :
CVE-2026-45690 (score CVSS 5.9, divulguée le 15 mai 2026) : un attaquant disposant de l'identifiant et du mot de passe d'un compte peut contourner la vérification 2FA en utilisant une connexion HTTP Basic Auth (authentification basique via l'en-tête Authorization: Basic base64(user:pass)). Nextcloud, dans les versions affectées, acceptait HTTP Basic Auth même lorsque le 2FA était activé pour le compte ciblé, sans exiger la vérification du second facteur.
CVE-2026-45691 (score CVSS 5.9, divulguée le 13 mai 2026) : même classe de vulnérabilité, mais exploitable via un token Bearer DAV — le protocole WebDAV, notamment utilisé par les clients de synchronisation de bureau (Nextcloud Desktop, Nautilus, Finder). Un attaquant pouvant intercepter ou deviner un token WebDAV peut accéder à l'instance sans 2FA.
Les deux CVE sont corrigées dans Nextcloud 32.0.9 (branche 32), 33.0.3 (branche 33) et 34.0.2 (branche 34). Vérifier si votre instance est vulnérable (voir section dédiée plus bas).
NC 34.0.0 — apps recommandées absentes au premier démarrage
Nextcloud 34.0.0 introduit une régression dans le wizard d'installation : les applications recommandées (Notes, Calendar, Contacts) ne sont pas proposées lors de la configuration initiale. La liste des apps suggérées reste vide, quel que soit le profil d'installation choisi.
Impact concret : une instance fraîche en NC 34.0.0 ne dispose pas des applications de base. Les utilisateurs qui espèrent synchroniser leur agenda CalDAV ou leurs contacts CardDAV doivent les installer manuellement depuis l'interface d'administration.
Sources : issues GitHub #61313 et #61611 — corrigé dans 34.0.2.
Vérifier si vos apps sont présentes :
docker compose exec -u www-data app php occ app:list | grep -E 'calendar|contacts|notes'Si la commande ne retourne rien, les apps ne sont pas installées. Pour les ajouter manuellement :
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 notesRecommandation : démarrer directement en 34.0.2 ou supérieur plutôt qu'en 34.0.0. Si votre instance tourne en 34.0.0, la mise à jour vers 34.0.2 restaure le wizard — mais les apps manquantes sur l'instance existante doivent tout de même être installées manuellement.
NC 34.0.0 — contrainte dupliquée sur PostgreSQL et explosion CPU
Sur les instances utilisant PostgreSQL (en lieu et place de MariaDB/MySQL), une migration interrompue de Nextcloud 34.0.0 peut laisser une contrainte dupliquée sur la table oc_filecache_extended. Ce doublon passe inaperçu au démarrage mais provoque une explosion de CPU et de RAM lors du prochain scan de fichiers (files:scan) ou d'une maintenance automatique.
Symptômes : charge CPU anormalement élevée sur le conteneur Nextcloud, scan de fichiers qui ne se termine pas, erreurs dans les logs du type duplicate key value violates unique constraint.
Source : issue GitHub #61597.
Vérification et correctif :
# 1. Nettoyer les entrées orphelines du cache de fichiers
docker compose exec -u www-data app php occ files:cleanup
# 2. Recréer les index de la table problématique
docker compose exec -u www-data app php occ db:add-missing-indices
# 3. Vérifier qu'aucun index dupliqué ne subsiste
docker compose exec -u www-data app php occ db:add-missing-columnsSi les erreurs persistent, passer directement à 34.0.2 qui contient le correctif de migration.
Note : ce problème ne touche pas les instances MariaDB/MySQL. Les instances PostgreSQL en production sur NC 34.0.0 doivent appliquer ces commandes avant le prochain scan automatique.
Prérequis et dimensionnement
Nextcloud est une application PHP polyvalente qui peut tourner légèrement sur un petit VPS ou devenir gourmande si vous l'utilisez comme stockage principal de fichiers volumineux.
Configuration minimale recommandée :
- VPS avec 2 Go de RAM (4 Go si vous gérez plus de 5 utilisateurs actifs).
- SSD obligatoire : Nextcloud effectue de nombreuses opérations de fichiers et de miniatures. Un disque HDD rend l'interface très lente.
- 20 Go d'espace minimum pour l'installation, plus l'espace pour vos données (prévoyez 2× la taille de vos fichiers pour les vignettes et les versions).
- Ubuntu 22.04 ou Debian 12.
- Docker Engine ≥ 24 et Docker Compose V2.
- Un nom de domaine et un certificat TLS (Let's Encrypt via Certbot).
- Les ports 80 et 443 ouverts dans votre firewall.
Installation de Nextcloud avec Docker Compose
Étape 1 — Créer la structure du projet
mkdir -p /opt/nextcloud && cd /opt/nextcloudCréez le fichier 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:Étape 2 — Créer le fichier d'environnement
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
EOFÉtape 3 — Lancer les conteneurs
docker compose up -dLe premier démarrage prend 2 à 4 minutes : Nextcloud installe et configure l'application, crée les tables de base de données et configure Redis. Suivez la progression avec :
docker compose logs -f appAttendez le message Nextcloud was successfully installed avant de continuer.
Étape 4 — Configurer Nginx avec 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 nginxÉtape 5 — Configurer l'URL de confiance dans Nextcloud
Après l'installation, Nextcloud doit connaître son domaine public pour générer des liens corrects et accepter les connexions.
Éditez config.php dans le conteneur :
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:htaccessVérifier si votre instance est vulnérable aux CVE 2FA
Si votre instance Nextcloud tourne sur une version antérieure à 32.0.9, 33.0.3 ou 34.0.2 (et que vous avez le 2FA activé), voici comment vérifier votre exposition et la corriger.
Vérifier la version actuelle :
docker compose exec -u www-data app php occ status
# Affiche : Nextcloud version: 32.0.X, 33.0.X ou 34.0.XVersions vulnérables : toutes les versions Nextcloud 32.x < 32.0.9, 33.x < 33.0.3 et 34.x < 34.0.2.
Test de vulnérabilité (sur votre propre instance uniquement) :
# Testez si HTTP Basic Auth contourne le 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 la commande retourne 207 Multi-Status sans que le code 2FA ne soit demandé, votre instance est vulnérable à CVE-2026-45690.
Mettre à jour vers 34.0.2 :
# Modifier docker-compose.yml : changer le tag d'image
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 upgradeOptimiser les performances avec Redis et OPcache
Nextcloud sans Redis est une Nextcloud lente. Redis joue deux rôles critiques : cache de sessions (évite les lectures/écritures disque à chaque requête authentifiée) et verrou distribué (file locking) qui empêche les conflits lors de synchronisations simultanées.
Vérifiez que Redis est bien connecté :
docker compose exec -u www-data app php occ config:system:get redis
# Doit afficher un tableau avec host, port, passwordSi rien n'apparaît, ajoutez manuellement dans config.php du volume Nextcloud :
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'redis',
'port' => 6379,
'password' => 'VOTRE_REDIS_PASSWORD',
],OPcache PHP. L'image Docker officielle de Nextcloud inclut OPcache préconfiguré. Vérifiez qu'il est actif :
docker compose exec app php -r "echo opcache_get_status()['opcache_enabled'] ? 'OPcache actif' : 'OPcache inactif';"Résultat attendu : l'interface Nextcloud doit être notablement plus réactive avec Redis. La différence est perceptible dès la première navigation : les requêtes qui lisaient le disque à chaque accès s'appuient désormais sur le cache en mémoire.
Les 5 erreurs fréquentes sur une instance Nextcloud
Erreur 1 — Redis non configuré. L'interface est lente et les synchronisations simultanées créent des conflits. Solution : vérifier et configurer Redis comme décrit ci-dessus.
Erreur 2 — overwrite.cli.url pointant vers http:// au lieu de https://. Les liens de partage, les notifications e-mail et les liens OIDC génèrent des URLs HTTP non sécurisées. Solution : php occ config:system:set overwrite.cli.url --value=https://votre-domaine.com.
Erreur 3 — trusted_domains mal configuré. Accès refusé avec l'erreur « You are accessing the server from an untrusted domain ». Solution : ajouter votre domaine avec php occ config:system:set trusted_domains 0 --value=votre-domaine.com.
Erreur 4 — Taille max des fichiers upload limitée à 2 Mo. La valeur par défaut de PHP est trop basse pour de vrais fichiers. Solution : dans Nginx, ajouter client_max_body_size 10G; et dans le conteneur PHP, configurer upload_max_filesize=10G et post_max_size=10G dans un fichier .ini monté.
Erreur 5 — Mise à jour manquée et instance vulnérable. Nextcloud publie des mises à jour de sécurité régulièrement. Sans surveillance des CVE et sans mise à jour automatique, l'instance devient vulnérable. Solution : configurer les notifications de mise à jour dans l'interface admin et planifier des mises à jour régulières.
Vérification de l'efficacité de Redis avec occ
Nextcloud fournit un outil de diagnostic intégré pour vérifier que votre cache Redis est effectivement utilisé :
# Vérifier l'état général de l'instance
docker compose exec -u www-data app php occ status
# Vérifier les avertissements de configuration (memcache, Redis, HTTPS…)
docker compose exec -u www-data app php occ check
# Afficher la configuration Redis actuelle
docker compose exec -u www-data app php occ config:system:get redisLa commande occ check liste tous les problèmes de configuration détectés : Redis absent, HTTPS non forcé, serveur de mail non configuré, fichiers de données dans le répertoire web (risque de sécurité), etc. C'est le premier diagnostic à lancer sur toute instance Nextcloud existante avant de la déclarer propre.
Sauvegardes Nextcloud — données, base et config
Nextcloud stocke ses données dans trois endroits distincts, et une sauvegarde complète doit couvrir les trois :
1. La base de données MariaDB : contient les métadonnées des fichiers, les utilisateurs, les partages, les applications installées et leur configuration.
2. Le volume nextcloud (données de l'application) : contient le code PHP de Nextcloud, les applications installées et config/config.php — le fichier de configuration principal.
3. Les fichiers utilisateurs : par défaut dans le volume Docker ou dans un chemin external défini par datadirectory dans config.php.
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/opt/nextcloud/backups
mkdir -p $BACKUP_DIR
# 1. Activer le mode maintenance pour cohérence
docker compose exec -u www-data app php occ maintenance:mode --on
# 2. Sauvegarder la base de données
docker compose exec -T db \
mysqldump -u nextcloud -p${MYSQL_PASSWORD} nextcloud | gzip > $BACKUP_DIR/db-$DATE.sql.gz
# 3. Sauvegarder config.php
docker compose cp app:/var/www/html/config/config.php $BACKUP_DIR/config-$DATE.php
# 4. Désactiver le mode maintenance
docker compose exec -u www-data app php occ maintenance:mode --offProchaines étapes — aller plus loin avec votre instance
Une fois Nextcloud installé et sécurisé, vous pouvez aller plus loin :
Activer Talk (visioconférence) : installez l'application Nextcloud Talk depuis l'interface d'administration. Pour les réunions de plus de 4–5 participants, un serveur TURN est requis (Coturn sur un VPS dédié).
Activer OnlyOffice ou Collabora Online (édition de documents en ligne) : ces applications nécessitent leur propre conteneur Docker et une configuration Nextcloud Office. Elles permettent de créer et modifier des fichiers .docx, .xlsx et .pptx directement dans l'interface web.
Monitoring de l'instance : configurez les alertes dans Administration → Monitoring pour recevoir des notifications e-mail si Nextcloud détecte des erreurs de configuration, des mises à jour de sécurité ou des problèmes de quota.
Mettre à jour Nextcloud en production
La mise à jour de Nextcloud doit toujours passer par le mode maintenance pour éviter les corruptions de données pendant que des clients synchronisent :
# 1. Activer le mode maintenance
docker compose exec -u www-data app php occ maintenance:mode --on
# 2. Sauvegarder la base de données
docker compose exec -T db mysqldump -u nextcloud -p${MYSQL_PASSWORD} nextcloud \
| gzip > /opt/nextcloud/backups/pre-update-db.sql.gz
# 3. Changer la version dans docker-compose.yml (ex: 34.0.2-apache)
sed -i 's|nextcloud:[0-9.]*-apache|nextcloud:34.0.2-apache|g' docker-compose.yml
# 4. Télécharger la nouvelle image et redémarrer
docker compose pull app
docker compose up -d app
# 5. Exécuter les migrations
docker compose exec -u www-data app php occ upgrade
# 6. Désactiver le mode maintenance
docker compose exec -u www-data app php occ maintenance:mode --offVérifiez les logs après la mise à jour (docker compose logs app) et testez un accès utilisateur avant de déclarer la mise à jour réussie.