Nextcloud — CVE de force brute WebDAV et détection des attaques
Analyse des avis de sécurité Nextcloud sur la force brute WebDAV et OAuth2, détection des attaques dans les logs et mitigation au niveau applicatif et reverse proxy.
Détection et mitigation des attaques par force brute sur Nextcloud, en particulier sur l’API WebDAV, sujet de plusieurs avis de sécurité.
Menace
Plusieurs avis de sécurité Nextcloud (nextcloud/security-advisories) décrivent une absence de protection contre la force brute sur l’API WebDAV (remote.php/dav) et sur les secrets des clients OAuth2, permettant le test illimité d’identifiants. Les versions Server à partir de 25.0.0 antérieures aux branches correctives, et Enterprise à partir de 22.0.0 antérieures aux versions de maintenance correspondantes, sont concernées. La détection repose sur l’analyse des échecs d’authentification sur les endpoints DAV.
Détection
Échecs d’authentification sur l’API WebDAV dans les logs Nextcloud :
grep -aE '"app":"(no app in context|core)".*(Login failed|Trusted domain)' /var/www/nextcloud/data/nextcloud.log
sudo -u www-data php occ log:tail -n 500 | grep -iE 'login failed|bruteforce|throttle'
Volumétrie des requêtes 401 sur les endpoints DAV au niveau du reverse proxy :
grep -aE 'remote.php/dav.*" 401 ' /var/log/nginx/access.log | grep -oP '^\S+' | sort | uniq -c | sort -rn | head
grep -aE 'remote.php/(webdav|dav)' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
État du brute-force throttling Nextcloud pour une adresse suspecte :
sudo -u www-data php occ security:bruteforce:attempts 192.0.2.90
Mitigation
Application des mises à jour de maintenance correspondant à la branche en service (la version corrigée dépend de la branche) :
sudo -u www-data php occ status --output=json | jq -r '.version'
sudo -u www-data php updater/updater.phar
sudo -u www-data php occ upgrade
Activation et réglage du brute-force throttling applicatif, en s’assurant que les trusted proxies sont correctement déclarés (sinon le throttling s’applique à l’IP du proxy) :
sudo -u www-data php occ config:system:set auth.bruteforce.protection.enabled --value=true --type=boolean
sudo -u www-data php occ config:system:set auth.bruteforce.protection.testing --value=false --type=boolean
sudo -u www-data php occ config:system:set trusted_proxies 0 --value="192.0.2.10"
Rate limiting au niveau du reverse proxy sur les endpoints DAV et de connexion, défense complémentaire au throttling applicatif :
limit_req_zone $binary_remote_addr zone=ncdav:10m rate=20r/s;
location ~ ^/remote.php/(dav|webdav) {
limit_req zone=ncdav burst=40 nodelay;
limit_req_status 429;
proxy_pass http://nextcloud_backend;
}
location = /login {
limit_req zone=ncdav burst=5 nodelay;
proxy_pass http://nextcloud_backend;
}
Bannissement des sources persistantes via fail2ban sur le log Nextcloud (filtre sur Login failed) :
[nextcloud]
enabled = true
filter = nextcloud
logpath = /var/www/nextcloud/data/nextcloud.log
maxretry = 8
findtime = 600
bantime = 86400
Vérification
Confirmation que la version en service est une version de maintenance corrigée et que le throttling est actif :
sudo -u www-data php occ status --output=json | jq -r '.versionstring'
sudo -u www-data php occ config:system:get auth.bruteforce.protection.enabled
Test que des échecs répétés sur WebDAV incrémentent le compteur de throttling et déclenchent le rate limiting :
for i in $(seq 1 25); do
curl -s -o /dev/null -w '%{http_code} ' -u "test:faux" https://nextcloud.exemple.fr/remote.php/dav/files/test/
done; echo
sudo -u www-data php occ security:bruteforce:attempts 192.0.2.90
L’augmentation du compteur d’attempts et l’apparition de 429 au-delà du burst confirment la double protection applicative et reverse proxy.
Vous avez un projet sur ces sujets ?
Nous contacter →