Contributions

De Wiki Seb35
Révision datée du 21 mai 2023 à 20:27 par Seb35 (discussion | contributions) (Précision)
Aller à la navigation Aller à la recherche

J’expose sur cette page mes contributions en cours ou à venir à des logiciels libres (ou autres domaines de la culture libre).


Idées

2023-05-21 - nginx - utilisation plus exhaustive du code 405 Method Not Allowed

En parcourant des logs d’un serveur nginx et observant les attaquants opportunistes, je remarque que les méthodes HTTP exotiques ne sont pas rejetées avec le code "405 Method Not Allowed". Par exemple la configuration try_files $uri =404; donne :

  • requête = "DELETE /fichier-inexistant.pdf HTTP/1.1" réponse = "404 Not Found" car le fichier n’existe pas
  • requête = "DELETE /fichier-existant.pdf HTTP/1.1" réponse = "405 Not Allowed"

Il serait intéressant qu’il y ait un paramètre de configuration methods_allowed GET HEAD POST; par exemple pour refuser inconditionnellement des méthodes exotiques pour le serveur en question afin de limiter encore plus la surface d’attaque.

La RFC 2068 section 5.1.1 Method dit que l’implémentation des méthodes GET et HEAD est obligatoire, toutes les autres sont optionnelles et peuvent changer dynamiquement.

Il y a déjà dans le code de nginx des retours "405 Not Allowed" selon les modules (chercher la constante NGX_HTTP_NOT_ALLOWED, par exemple ngx_http_static_module.c retourne 405 si la méthode n’est pas GET, HEAD ou POST ; ou ngx_http_empty_gif_module.c retourn 405 si la méthode n’est pas GET ou HEAD), mais il serait préférable que ça retourne toujours 405 si aucun module n’est en capacité de répondre (ou laisser à l’administrateur la possibilité de faire cette liste dans la conf).

PS : je ne suis pas complètement sûr que la fonctionnalité n’existe pas déjà, il est possible que mon observation vienne du fait que Debian compile nginx avec --with-http_dav_module, et peut-être que le verbe DELETE pourrait potentiellement répondre même si on a explicitement ou implicitement dav_methods off; dans le contexte.

Actions à faire :

  1. Compiler nginx sans aucun module
  2. Re-tester
  3. Confirmer ou non le problème
  4. Éventuellement investiguer comment ça se comporte si on active le module dav