Bonjour,
deux failles ont �t� trouv�es cette semaine:
- un DoS (Denial-of-Service) dans la gestion des liens symboliques;
- une attaque root locale
En ce qui concerne l'attaque root locale, elle fonctionne ainsi:
un processus (user) 1 s'attache � un processus 2 (user) via ptrace(2)
autoris� (strace -p PROC_NUM, o� PROC_NUM appartient au m�me `user'
le processus 1 (celui qui peut tracer l'autre) ex�cute un programme
suid-root qui a la propri�t� de lancer ensuite un shell sous
le m�me l'utilisateur `user': sous certaines conditions, p.ex. newgrp
(changement de groupe SVR3), ou su (switch user).
pendant l'ex�cution de ce programme, le processus 2 appelle un
autre programme suid. Vu que le processus 1 est remplac� par un
programme suid (exec(2)), le processus 2 obtient les droits
suid *m�me sous ptrace*.
le processus 1 (programme suid-root newgroup ou su) ex�cute maintenant
un shell sous l'utilisateur normal `user'.
mais ce processus a maintenant la possibilit� de tracer un
processus suid (2), ce qui ne devrait jamais �tre possible.
Cela veut dire qu'il a les pouvoirs de debugger ce programme,
de le modifier, etc.
-> modification du programme suid en m�moire, ex�cution d'un shell
sous root.
Comment on voit, une attaque assez complexe mais dont l'impl�mentation
circule. Cette attaque est rendu possible par:
- l'h�ritage du tra�age d'un processus via exec(2)
- en particulier provenant d'un passage suid -> non suid.
Ce probl�me est corrig� dans 2.4.12, et il y a un patch pour 2.2.19.
A voir seul Linux souffre de cette attaque (et pas 2.0.38 p.ex.).
Sur la base du patch pour 2.2.19 j'ai produit un patch simple pour 2.4.9,
qui emp�che dans tous les cas l'exec(2) en suid d'un processus
d�j� trac� (y compris si l'autre programme a les droits).
diff -urP linux-2.4.9/fs/exec.c linux-2.4.9-ptrace-fix/fs/exec.c
--- linux-2.4.9/fs/exec.c Fri Jul 20 05:32:54 2001
+++ linux-2.4.9-ptrace-fix/fs/exec.c Sat Oct 20 14:05:56 2001
@@ -588,12 +588,11 @@
}
/*
- * We mustn't allow tracing of suid binaries, unless
- * the tracer has the capability to trace anything..
+ * We shall not allow tracing of suid binaries, not matter what.
*/
static inline int must_not_trace_exec(struct task_struct * p)
{
- return (p->ptrace & PT_PTRACED) && !cap_raised(p->p_pptr->cap_effective,
CAP_SYS_PTRACE);
+ return (p->ptrace & PT_PTRACED);
}
/*
Ce n'est pas une solution correcte, mais elle devrait corriger les
sympt�mes. On voit que must_not_trace_exec() est appel� depuis
compute_creds() et que si elle retourne TRUE, et que le processus courant
n'est pas capable de faire suid, on remet les effective U/GIDs �
current.
Elle pourrait aider ceux qui veulent utiliser 2.4.9 car 2.4.10-2.4.11
n'ont pas prouv� leur stabilit� (changement de VM), et les -ac ne sont pas
forc�ment compatibles avec certaines extensions comme LVM/ext3.
PS: ces attaques sont strictement locales.
--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se d�sabonner aussi.