[pyar] Peligrosidad de un lambda

Claudio Freire klaussfreire en gmail.com
Jue Oct 7 13:45:12 ART 2010


2010/10/7 Alejandro Santos <listas en alejolp.com>

> A riesgo de ganarme la expulsion de la lista por hacer un comentario
> del estilo de Sheldon, hacer un mini programita en C para correr algo
> como setuid es super facil y super inseguro:
>
> #include <stdlib.h>
> int main(int argc, char* argv) { return (argc > 0) ? system(argv[1]) : 0; }
>
> $ gcc launcher.c -o launcher
> $ chmod a+s launcher
> $ launcher "python programa.py"
>

1) (argc > 0) ? system(argv[1]) - para más dramatismo yo hubiera evitado el
condicional, y que haga segfault nomás ;-)

2) setuid no es mágico, tu ejemplo sólo logra correr launcher con tus
propios permisos. El tema de setuid es que el usuario que creó el archivo
ejecutable sea otro. Como /usr/bin/passwd, que es de root, y corre como
root, aunque lo invoques vos. El launcher que generaste corre como vos.
Incluso si lo invoca root - no es escalado, es degradación de privilegios.

La idea de mencionar setuid es viéndolo desde el punto de vista del
administrador. Si soy un administrador, y me veo en la necesidad de marcar
un programa como setuid/setgid por la razón que fuere, tengo que (si voy a
ser responsable) evaluar la seguridad del programa. Si el programa hace algo
que permita ejecución de código arbitrario (como eval(raw_input())), no
debería marcarlo como setuid.

O sea, saber que eval(raw_input()) te permite ejecutar cualquier cosa...
cualquiera... incluso código en C (porque como una variante de lo que vos
mencionaste, podés compilar y ejecutar C desde python, incluso sin
compilador), saber eso es útil para un administrador responsable.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20101007/d9a39f6b/attachment.html>


More information about the pyar mailing list