¿Cuáles son algunas vulnerabilidades de las variables de entorno (en cualquier plataforma)?

4

Estoy escribiendo una pequeña aplicación Python multiplataforma (un administrador de paquetes para uso interno de mi cuerpo), y estoy pensando en usar algo similar a esta respuesta en Desbordamiento de pila para verificar los privilegios de administrador / raíz. Noté que el autor menciona vulnerabilidades con variables de entorno.

No me sorprende que las variables de entorno sean vulnerables a los desbordamientos, etc., y que probablemente representen una superficie de ataque significativa. ¿Podría tener algunos ejemplos específicos de ataques contra ellos, especialmente a lo que mi aplicación podría estar expuesta si se basa en ellos? Los ejemplos de WinNT y Linux son bienvenidos.

(Además, por diversas razones, no podemos usar soluciones de administración de paquetes existentes como Nuget / APT. Mantenemos nuestra propia distribución de software interno y es más fácil escribir una pequeña solución especializada, especialmente para plataformas múltiples)

    
pregunta nerflad 09.04.2016 - 03:52
fuente

1 respuesta

3

Existen los riesgos habituales asociados con la confianza explícita o implícita en algo que viene de fuera y, por lo tanto, puede ser controlado por el atacante. Y existe el riesgo de suponer que las variables de entorno proporcionan una visibilidad restringida que no siempre hacen. Algunos ejemplos:

  • Las variables de entorno de confianza implícita como PATH, LD_LIBRARY_PATH, PERL5LIB o similares pueden llevar a una ejecución no deseada del código porque estas variables deciden dónde buscar programas y bibliotecas. Variables similares como IFS deciden cómo interpretar la información dada al programa. Y a veces el problema puede ser cualquier variable con un contenido malicioso, como la vulnerabilidad Shellshock . Es por eso que los programas que usan privilegios elevados (como sudo) deben eliminar o sanear todas las variables de entorno cuando son ejecutadas por un usuario sin privilegios. Y los programas que configuran variables de entorno (como el servidor web con interfaz CGI) deben ser muy cuidadosos con la posible información controlada por el atacante que colocan en estas variables.
  • No debe usar variables de entorno para pasar información confidencial (como contraseñas) de un proceso primario a uno secundario. Dependiendo del sistema operativo, otros usuarios del sistema pueden ver el contenido de las variables de entorno y, por lo tanto, obtener esta información confidencial.

Por lo tanto, las reglas cuando se usan variables de entorno son:

  • Nunca confíe en el contenido de estas variables, ni explícito ni implícito. Eso significa eliminar o sanear las variables, especialmente cuando las variables pueden ser establecidas por usuarios con un privilegio diferente, entonces el programa se está ejecutando.
  • Nunca coloque información confidencial en variables de entorno porque otros usuarios podrían leerlos.
  • Si configura estas variables con datos que usted no generó completamente (es decir, un posible atacante controlado), tenga mucho cuidado y desinfecte todo para desarmarlo.
respondido por el Steffen Ullrich 09.04.2016 - 08:25
fuente

Lea otras preguntas en las etiquetas