Pourquoi est-il mauvais d'avoir des fichiers d'écriture root dans un répertoire qui n'appartient pas à root?

28

Cela est venu dans un commentaire à une autre question et j'aimerais que quelqu'un m'explique les raisons de cela.

J'ai suggéré à Apache de consigner les erreurs d'un VHost donné dans le répertoire personnel d'un utilisateur. Cela a été abattu parce qu'il n'était pas sûr. Pourquoi?

J'ai demandé des éclaircissements dans un commentaire de réponse, mais tout ce que j'ai obtenu, c'est qu'il n'est pas sûr d'avoir l'écriture root dans un dossier qui n'appartient pas à root. Encore une fois, quelqu'un pourrait-il expliquer?

Merci,

Bart.

Bart B
la source
4
Que fait Apache en tant que root - le principe du moindre privilège crie contre cela!
Jonathan Leffler
1
Apache s'exécute en tant que www, mais est démarré en tant que root afin qu'il puisse se lier au port 80 comme c'est la norme. Apparemment, il se connecte également en tant que root.
Bart B

Réponses:

31

Parce qu'un utilisateur malveillant peut malicieusement essayer de pointer le fichier en roottrain d'écrire vers un emplacement différent . Ce n'est pas si simple, mais vraiment possible.

Par exemple, si un utilisateur trouve le moyen de créer un lien symbolique à partir du journal Apache supposé vers, par exemple, / etc / shadow, vous aurez soudain un système inutilisable. Apache ( root) écraserait les informations d'identification de vos utilisateurs, rendant le système défectueux.

ln -s /etc/shadow /home/eviluser/access.log

Si le fichier access.log n'est pas accessible en écriture par l'utilisateur, il peut être difficile de le détourner, mais il est préférable d'éviter cette possibilité!

Une possibilité pourrait être d' utiliser logrotate pour faire le travail , en créant le lien vers un fichier qui n'existe pas déjà, mais ce logrotate écrasera dès que les journaux augmenteront:

ln -s /etc/shadow /home/eviluser/access.log.1

Remarque :

La méthode symlink n'est qu'une des attaques possibles, donnée à titre de preuve de concept.

La sécurité doit être faite avec un esprit de liste blanche , pas de liste noire de ce que nous savons être un problème.

AlberT
la source
Existe-t-il un moyen de définir des autorisations sur celui-ci afin qu'ils puissent uniquement lire le fichier et non pas supprimer, modifier ou faire autre chose (comme chown, chmod, etc.)?
Joshua
vous devez effectuer cette opération sur chaque fichier cible possible! ce fichier inscriptible est celui que vous aimez, pas le lien lui-même qui appartient à l'attaquant tel qu'il l'a créé.
drAlberT
2
@Joshua: chown ne peut être exécuté que par root. chmod peut être exécuté par la personne qui possède le fichier. IIRC, le changement de nom peut être effectué par la personne qui possède le répertoire. Comme le mentionne AlberT, la création d'un lien avant que root ne crée le fichier peut être effectuée par quiconque peut écrire dans le répertoire.
ATK
2
@atk: En outre, celui qui possède le répertoire peut généralement supprimer des fichiers de celui-ci (à moins que le +tbit collant ne soit défini), même s'il n'a pas la permission d'écrire sur les fichiers eux-mêmes (car unlink () est une écriture dans le répertoire, pas le fichier). Même si root crée le fichier à l'avance, le propriétaire du répertoire peut toujours le supprimer et le remplacer par un lien symbolique vers autre chose.
James Sneeringer, le
1
Si eviluser peut écrire dans / home / eviluser (ou peut modifier les autorisations sur le répertoire - il en est le propriétaire, IOW), alors peu importe les autorisations sur access.log; le eviluser peut (re) déplacer le fichier et placer son lien symbolique à sa place. Une autre question est de savoir si le logiciel fait attention à ce qu'il ouvre.
Jonathan Leffler
1

Le principe général de ne pas avoir de processus d'écriture dans un répertoire qu'ils ne possèdent pas ou à qui ils font confiance est bon. Mais dans ce cas particulier, il est raisonnable de croire que le code Apache ouvre le journal avec O_NOFOLLOWetc: la connexion au répertoire personnel d'un utilisateur est une configuration courante.

poolie
la source