exploit y parche SUID

1

Estoy trabajando en una "aplicación" de binario raíz SUID que ejecuta el comando system("ls -la /dir") . Logré explotarlo al escribir un reemplazo malicioso ls que inicia un shell, y cambié $PATH de mi usuario para que se ejecute ls en lugar del que está en /bin .

Noté que ejecutarlo como usuario devuelve un shell de root mientras lo ejecuta con sudo "./example" usa la ruta de root y simplemente lista los archivos en dir. Por lo que sé, setuid hereda los privilegios del propietario (en este caso, la raíz) al usuario y sudo se ejecuta como raíz.

¿Cómo se llaman tales vulnerabilidades? ¿Cómo un desarrollador de aplicaciones parchearlo? ¿Hay alguna forma en que pueda forzar a los usuarios a usar sudo ./app para ejecutar un programa?

** el binario es un ejecutable estáticamente vinculado

    
pregunta Gian 12.05.2018 - 00:41
fuente

1 respuesta

1

Engañar a un programa con más privilegios para hacer algo que el propietario del programa no pretendía se llama escalada de privilegios .

Cuando un programa privilegiado lee datos del exterior, debe verificar que estos datos son inofensivos. Esto se llama desinfección de datos . Por ejemplo, un programa setuid que ejecuta un programa externo debe verificar que el programa que está ejecutando sea el deseado. En este caso, el programa depende tanto de la cadena de texto ls -la /dir como del valor de la variable de entorno PATH . Los únicos valores seguros para PATH son aquellos que la primera entrada para ls y cualquier otro comando que el programa pueda ejecutar es el deseado; en la práctica, eso significa ignorar completamente la información externa (el valor de PATH en el entorno) y establecer PATH en un valor seguro conocido.

Sudo elimina la mayoría de las variables de entorno, incluido PATH , que establece en un valor predeterminado seguro. Esto facilita la escritura de componentes privilegiados seguros mediante el uso de sudo en lugar de un programa setuid personalizado para la elevación de privilegios. Una ejecución del programa a través de sudo se inicia con un valor seguro para PATH . Todavía puedes hacer las cosas mal, por supuesto. Por ejemplo, permitir que un usuario ejecute sudo ./example les permite ejecutar lo que quieran, ya que pueden crear un ejecutable llamado example en el directorio de su elección.

¹ Y LD_xxx variables utilizadas por el vinculador dinámico, pero el vinculador dinámico del programa setuid borra aquellas cuando ve que el programa al que se vincula es setuid.

    
respondido por el Gilles 12.05.2018 - 09:00
fuente

Lea otras preguntas en las etiquetas