Recibimos un informe de error (expresado como un problema de seguridad) para un programa, que establecía que cuando el programa crea archivos en el disco, no verifica primero si existe un enlace simbólico en la ruta del archivo que se creará. Debido a eso, un atacante puede crear un enlace simbólico, que el programa (cuando lo ejecuta otro usuario) puede intentar sobrescribir, sobrescribiendo así un archivo al que el atacante no podría tener acceso de escritura.
Para ilustrar, aquí hay un ejemplo con gcc, que también es "vulnerable" a este problema:
- Eve envía a Alice un archivo .tar.gz que contiene un programa en C. Dentro del archivo está
evil.c
, ya.out
, que es un enlace simbólico a/home/alice/.xinitrc
. - Bajo algún pretexto, Eve le pide a Alice que compile el programa (y no haga nada más).
- Eve ejecuta
gcc evil.c
, que por sí solo debería ser seguro (salvo el desbordamiento del búfer, etc. en el compilador). -
gcc
(técnicamente el enlazador) intentará escribir el binario resultante ena.out
, por lo que se sobrescribirá el.xinitrc
de Alice. - La próxima vez que Alice inicie su servidor X, se ejecutará el código de Eve.
En nuestro caso, la situación es muy parecida a gcc: el programa crea archivos solo en el directorio actual (a menos que se indique lo contrario), con nombres predecibles, y no ejecuta ningún código desde su entrada.
¿Es esto algo por lo que los programas como los compiladores deben preocuparse?