Les variables d'environnement sont-elles visibles pour les utilisateurs non privilégiés sous Linux?

12

J'essaie de déterminer si, sous Linux, les variables d'environnement d'un processus sont observables par d'autres utilisateurs (non root).

Le cas d'utilisation immédiat met des secrets dans les variables d'environnement. Ceci est discuté dans de nombreux endroits du Web comme étant peu sûr, mais je n'ai pas pu me concentrer sur le point d'exposition exact sous Linux.

Notez que je ne parle pas de mettre des secrets en texte clair dans des fichiers. Notez également que je ne parle pas de l'exposition au compte root (je vois la tentative de cacher les secrets d'un adversaire avec root comme un non-démarreur).

Cette question semble répondre à la mienne, avec des commentaires qui classent les variables d'environnement comme étant complètement sans sécurité, ou simplement masquées, mais comment peut-on y accéder?

Dans mes tests, un utilisateur non privilégié ne peut pas observer les variables d'environnement d'un autre utilisateur via la table de processus ('ps auxwwe'). Les commandes qui définissent les variables d'environnement (par exemple l'exportation) sont des commandes internes du shell qui ne parviennent pas sur la table de processus et par extension ne sont pas dans / proc / $ pid / cmdline. / proc / $ pid / environ n'est lisible que par l'UID du propriétaire du processus.

La confusion est peut-être entre différents systèmes d'exploitation ou versions. Diverses sources (récentes) sur le Web dénoncent l'insécurité des variables d'environnement, mais ma vérification ponctuelle des différentes versions de Linux semble indiquer que ce n'est pas possible depuis au moins jusqu'en 2007 (probablement plus loin, mais je n'ai pas de cases sur main pour tester).

Sous Linux, comment un utilisateur non privilégié peut-il observer les variables d'environnement pour les processus d'un autre?

Joshua Miller
la source

Réponses:

7

Comme Gilles l'a expliqué dans une réponse très complète à une question similaire sur security.stackexchange.com, les environnements de processus ne sont accessibles qu'à l'utilisateur propriétaire du processus (et racine bien sûr).

guntbert
la source
Un lien vers le message que vous vouliez dire?
cyc115
@ cyc115 cliquez sur le mot "réponse" :)
guntbert
6

Les variables d'environnement sont très sécurisées. La question à laquelle vous avez lié est de dire que si le système est compromis, le seul avantage de sécurité de l'utilisation de variables d'environnement sur un fichier de configuration est l'obscurité. Cela signifie que si quelqu'un a obtenu un accès root, il peut accéder aux deux.
Il est également discutable de savoir si l'utilisation de variables d'environnement pour des données secrètes est «obscure». Il s'agit d'une pratique très courante et, par conséquent, je ne la considérerais pas comme telle.

Vous ne pouvez accéder aux données stockées dans une variable d'environnement qu'en 2 endroits:

1. L'environnement d'exécution du processus

Lorsque le processus est en cours d'exécution, les variables d'environnement de ce processus sont accessibles via /proc/$PID/environ. Cependant, seul l'utilisateur propriétaire du processus, ou root, peut accéder à ce fichier.

2. La source des variables d'environnement

Si vous utilisez un script init et que les variables sont stockées dans ce script init, les variables peuvent bien sûr être obtenues en lisant ce script.

Ou si les variables d'environnement viennent d'ailleurs, alors où que ce soit.

3. sortie «ps»

Oui, je sais que j'ai dit 2, et dans tout système décent, ce sera 2. Cependant, si l'administrateur ne sait pas ce qu'il fait, il est possible d'ouvrir une 3ème avenue.

Si le processus est lancé via quelque chose comme sh -c 'cd /foo/bar; POP=tart /my/executable', alors ce shprocessus sera visible dans ps:

$ sh -c 'cd /; POP=tart sleep 10' &
[1] 3085

$ ps ax | grep POP
phemmer   3085  14   5  0.0  0.0 SN         00:00 sh -c cd /; POP=tart sleep 10
Patrick
la source
1
Vous devez également mentionner le emodificateur de ps. Il permet également uniquement de visualiser l'environnement des processus dont l'utilisateur est propriétaire.
Barmar
1
Un autre emplacement possible: si la variable d'environnement a été définie via le shell (par exemple export FOO=bar), elle peut également apparaître dans le fichier historique (par exemple ~/.bash_history) si l'utilisateur n'a pas pris de précautions pour l'empêcher de l'enregistrer ou la supprimer.
tavnab