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.

Répondre à