Problèmes de sécurité liés aux programmes CGI - côté serveur
-
il faut toujours garder à l'esprit qu'un programme CGI dispose, par
défaut, des mêmes privilèges d'exécution que le
logiciel serveur HTTP. Entre autre, un programme CGI pourra écrire
sur le disque partout où le serveur HTTP a les privilèges
d'écriture. Un programme CGI pourra aussi exécuter n'importe
quelle commande ou programme que le serveur HTTP aurait le droit
d'exécuter. Le choix de l'utilisateur et du groupe sous lequel le
serveur HTTP s'exécute est donc important.
-
Il faut éviter que soient exécutés comme scripts CGI
des fichiers dont le webmestre n'aura pas pu vérifier l'innocuité.
Il faut donc éviter, entre autres, que le serveur HTTP puisse écrire
dans le(s) répertoire(s) où se trouvent des programmes CGI,
pour éviter que l'on puisse déposer à distance de nouveaux
programmes CGI sur le disque du serveur (voir commentaires sur la méthode
PUT)
-
Il faut absolument éviter de mettre dans un répertoire de
programmes CGI un interprêteur d'utilité générale,
t.q. Perl, Tcl, shells Unix, etc.
-
Il faut toujours s'interroger sur le comportement d'un programme CGI auquel
on passerait des arguments inhabituels préparés par une personne
malveillante. Chaque fois qu'on installe un programme CGI sur un serveur
Web, il faut se poser les questions suivantes:
- si le programme CGI écrit sur le disque, peut-on l'amener à écrire dans une zône dangereuse (répertoires CGI, répertoires système, etc.)?
- si le programme CGI écrit sur le disque, peut-on l'amener à bloquer le système en remplissant complètement le disque (disk full)?
- certains paramètres passés au programme CGI sont-ils passés tels quels à des commandes Unix, sans filtrage préalable?
-
peut on faire déborder la mémoire du programme CG en lui passant
un volume de données excessif?
-
Il faut garder à l'esprit le fait que le programme CGI peut être
activé par un programme malveillant qui se connecte directement au
serveur HTTP et non pas par l'usage d'un formulaire dans un document de votre
site.
- En rêgle générale, les données transmises au script CGI devraient être filtrées avant d'être utilisées. Plutôt que de rechercher des caractères non-autorisés et de les remplacer par un caractère sans danger, il vaut mieux clairement définir quels sont les caractères autorisés et remplacer tout autre caractère par un caractère inoffensif.
- CERT® Coordination Center: How To Remove Meta-characters From User-Supplied Data In CGI Scripts
- Making software behave, par Gary McGraw et John Viega
- Make your software behave: CGI programming made secure, par Gary McGraw et John Viega
- Vulnerable CGI programs and application extensions (e.g., ColdFusion) installed on web servers, extrait de How To Eliminate The Ten Most Critical Internet Security Threats
- 21 Rules for Writing Secure CGI Programs, par Simson Garfinkel
-
CGI Security
Tutorial, par
Michael Van Biesbrouck