erlug
[Top] [All Lists]

Re: [Erlug] kill di un processo via CGI

To: ERlug - Lista Pubblica <erlug@xxxxxxxxxxxxxx>
Subject: Re: [Erlug] kill di un processo via CGI
From: Andrea Paolini <ap@xxxxxxx>
Date: Wed, 25 Jan 2006 11:25:18 +0100
Maurizio Lemmo - Tannoiser wrote:

Solo una malinconia da security through obscurity[1]. In presenza di
piu` "uploader", se si diffonde l'informazione di questa feature,
chiunque puo` scrivere qualcosa che killa processi.

Chiosando sulla questione, l'assunto di base è che www-data deve poter eseguire uno ed un solo comando con euid 0, e che questo deve poter avere come unico effetto di killare il singolo processo "pippo".

Questo porta con sé che ogni entità in grado di far eseguire quel comando come www-data (facendo eseguire il cgi precotto col browser o creando una pagina in un qualsiasi linguaggio che permette di fare una system(3)) potrà killare pippo. E da questo non si scappa.

Se www-data deve eseguire qualcosa con euid 0 non ci sono alternative, serve un wrapper setuid. Ce lo si può scrivere (cattiva idea, IMHO) o si può usare un wrapper precotto e considerato stabile e sicuro (suid, super).

In ogni modo, qualsiasi cosa si usi, secondo me non si deve permettere a www-data di poter scegliere o modificare _cosa_ killare, il parametro deve essere hardcoded. Questo perché fare validazione e sanitizzazione dell'input è comunque troppo gravoso e prono ad errori, dovendo riscrivere da 0 il codice.

Usando sudo anche la validazione dell'input viene "gratis", ed è per questo che era la soluzione che mi piaceva di più:

# tail -1 /etc/sudoers
www-data      localhost= NOPASSWD: /usr/bin/killall pippo
# su - www-data
$ sudo /usr/bin/killall pippo
$ sudo /usr/bin/killall init
Sorry, user www-data is not allowed to execute '/usr/bin/killall init' as root on localhost.

Ciao,
        - ap

<Prev in Thread] Current Thread [Next in Thread>