Question:
L'exécution d'un serveur CGI en tant que root est-elle trop dangereuse?
Tomas
2012-10-16 19:38:21 UTC
view on stackexchange narkive permalink

J'ai configuré mon Raspberry Pi avec nginx et fcgiwrap en CGI. Je voulais contrôler les ports GPIO à l'aide d'un script Python avec la bibliothèque Rpi.GPIO. Le problème est que pour pouvoir contrôler les ports, j'ai besoin d'exécuter python en tant que root, donc CGI en tant que root.

J'ai lu ici la question Comment inclure RPi. GPIO dans un script python CGI avec lighttpd? qui exécuter un serveur CGI en tant que root ouvre un grand trou de sécurité. Pouvez-vous expliquer pourquoi?

Deux réponses:
#1
+4
Der Hochstapler
2012-10-16 19:51:36 UTC
view on stackexchange narkive permalink

L'exécution d'un serveur Web en tant que root est considérée comme dangereuse car toute faille de sécurité dans vos applications Web pourrait potentiellement permettre à un attaquant d'exécuter du code avec les privilèges root.

Si votre serveur Web fonctionne avec des privilèges limités, un l'attaquant peut obtenir, tout au plus, les mêmes privilèges que le serveur Web.

Le serveur Web ne fonctionne pas en tant que root mais il appelle le serveur CGI qui s'exécute en tant que root. Est-ce le même scénario?
@Tomas: L'essentiel est que l'entrée utilisateur ne doit jamais être évaluée dans un contexte racine. Parce que cela introduit la possibilité que du code malveillant soit exécuté dans ce contexte.
Un attaquant peut obtenir des privilèges supplémentaires même avec un serveur Web limité, mais il devra également casser quelque chose d'autre. Par exemple. utiliser un bogue httpd pour accéder à un hôte, puis trouver de mauvaises autorisations, renifler le trafic réseau interne de confiance ou installer des chevaux de Troie pour obtenir la racine ou accéder à un autre ordinateur, etc. Les personnes qui pensent que la sécurité est un produit ou un périmètre ont généralement d'autres erreurs dans leur réseau et il y aura toujours des bogues, vous ne pouvez donc pas non plus faire confiance aux privilèges limités.
#2
+3
Chris Stratton
2012-10-16 20:53:24 UTC
view on stackexchange narkive permalink

Vous pouvez changer la propriété des fichiers de périphérique GPIO requis en un ID utilisateur non root sous lequel vous exécutez le serveur Web et les assistants associés. Mieux encore, attribuez-les à un groupe d'utilisateurs comprenant à la fois le serveur Web et votre compte de test, et définissez les bits d'autorisation de groupe.

Ou vous pouvez écrire un démon qui s'exécute en tant qu'utilisateur auquel l'accès a été accordé ces fichiers, et accepte les commandes et les requêtes qu'il nettoie soigneusement sur un canal tel qu'une socket de domaine unix, un tube nommé avec des restrictions d'accès au niveau des fichiers, etc.

La version récente du module GPIO python (à partir de la version 0.3.0) utilise des registres GPIO mappés en mémoire par `/ dev / mem` (au lieu de / sys / class / gpio). On pourrait changer la propriété de `/ dev / mem` mais ce ne serait pas vraiment beaucoup plus sûr de fonctionner en tant que root. Votre deuxième suggestion est bien meilleure, mais elle implique beaucoup plus de travail.
Ou on pourrait revenir à l'ancienne méthode de faire GPIO ...


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...