Vulnerabilidad de código en el script de Shell

1

Me asignaron una tarea para mi clase de Seguridad informática. Nos dieron una pieza de código para analizar y determinar las vulnerabilidades que podría tener.

#!/bin/sh
# shell script to create a copy of the shadow file to the /tmp directory

echo > /tmp/shadowcopy

# allow only root access
chmod 600 /tmp/shadowcopy

# append the original file to the copy
cat /etc/shadow >> /tmp/shadowcopy

# Hint: the access permissions of a file in linux are verified when the file is opened.
# the process will keep the original permissions as long as it keeps the file open, even
# if permissions change. 

Algunos compañeros de clase y yo determinamos que este script podría sufrir una vulnerabilidad de condición de carrera si dos procesos independientes intentan abrir / tmp / shadowcopy.

También creemos que la vulnerabilidad de inyección de comandos podría ser posible si se cambia / tmp / shadowcopy antes de que comience el anexo.

¿Son nuestras suposiciones acerca de este script de shell correctas? ¿O nos falta una vulnerabilidad importante que podría explotarse si se utiliza el script?

    
pregunta Alan W 13.05.2015 - 19:22
fuente

2 respuestas

3

El binario cat no impone llamadas flock () usando el LOCK_EX para acceso de escritura exclusivo, por lo que su suposición es correcta.

Puede verificar que siguiendo los problemas de llamadas del sistema por ese o cualquier binario ejecutando el archivo cat de strace.

Una forma de prevenir el problema sería la siguiente:

#!/bin/bash

set -e

(
  flock -n 200

  echo > /tmp/shadowcopy

  chmod 600 /tmp/shadowcopy

  cat /etc/shadow >> /tmp/shadowcopy
) 200>/var/lock/.mylock

Los permisos también pueden plantear una condición de carrera, ya que alguien puede emitir una cola -f / tmp / shadowcopy antes de su comando chmod para obtener acceso.

Para obtener más información sobre las mejores prácticas de seguridad relacionadas con las condiciones de la carrera, debe consultar fnctl (), flock () & stat ().

O si alguien más estaba en el dispositivo viendo el búfer también podían acceder a los hashes, consulte enlace .

Es una prueba de concepto para extraer memoria de un proceso en ejecución.

    
respondido por el jas- 13.05.2015 - 19:41
fuente
3

Estoy de acuerdo en que el execise está destinado a detectar la condición de carrera, pero como no hay un control de errores en su lugar (solo funcionaría un set -e ), hay más agujeros disponibles:

Como /tmp es una carpeta compartida, puedo crear un /tmp/shadowcopy con el modo 666 (para que pueda abrirlo y escribirlo, pero no chmod). Si su secuencia de comandos fue ejecutada por un miembro del grupo shadow (para que / etc / shadow pueda leerse sin ser root), su usuario podrá leerlo perfectamente.

También tenga en cuenta que la condición de carrera es infinitamente larga, ya que el atacante puede crear y abrir el archivo de antemano, no necesita carrera entre echo y chmod .

Si /tmp/shadowcopy se creó como un enlace simbólico, podría crear un archivo con un nombre arbitrario y el contenido del archivo de sombra (suponiendo que el script se ejecute por root). Sobre todo útil como una denegación de servicio, por ejemplo. ln -s /tmp/shadow /boot/vmlinuz-3.16.0-4-amd64 reemplazaría el kernel y, por lo tanto, haría que la máquina no se pueda arrancar.

    
respondido por el Ángel 14.05.2015 - 01:42
fuente

Lea otras preguntas en las etiquetas