¿Por qué los archivos temporales con sufijo PID son una vulnerabilidad

2

¿Por qué es esto un problema de seguridad?

> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=820331
>
> very predictable temporary files (like
> /tmp/cronic.out.$$) that depends only on PID:

> OUT=/tmp/cronic.out.$$
> ERR=/tmp/cronic.err.$$
> TRACE=/tmp/cronic.trace.$$

> "$@" >$OUT 2>$TRACE

Use CVE-2016-3992.

La seguridad a través de la oscuridad nunca ralentiza el software de piratería moderno y siempre hace que la depuración sea más difícil.

Dado que el directorio /tmp siempre tiene establecido un bit fijo (drwxrwxrwt), ¿no impide eso la eliminación y el reemplazo por parte de un usuario malintencionado?

Actualización 2016-05-08

Basados en la Respuesta de Lie Ryan, he experimentado con los siguientes resultados ...

System
  Puppy Linux 5.2.8 (based on Ubuntu 10.04)

Privileged User
  root
    /etc/passwd
      root:x:0:0:root:/root:/bin/bash
    $PATH
      :/root/bin::/src/bin:/root/bin:/bin:/usr/bin: ...
    > groups root
      root : root tty
    > id -nG root
      root tty

Unprivileged User
  spot
    /etc/passwd
      spot:x:502:502:Linux User,,,:/home/spot:/bin/sh
    $PATH
      :/root/bin::/src/bin:/root/bin:/bin:/usr/bin: ...
    > groups spot
      spot : spot
    > id -nG spot
      spot

Owners, Groups, Permissions
  > ls -l /bin/busybox /bin/cat
    -rwxr-x--- 1 root root 637960 2011-08-17 11:04 /bin/busybox
    -rwxr-xr-x 1 root root  50820 2011-08-17 11:04 /bin/cat

  > ls -l /usr/bin/less
    lrwxrwxrwx 1 root root 17 2011-08-17 10:49 /usr/bin/less -> ../../bin/busybox

  > ls -l /home/spot/myless /home/spot/text
    lrwxrwxrwx 1 spot spot 13 2016-05-08 12:23 /home/spot/myless -> /usr/bin/less
    -rw-r--r-- 1 spot spot 12 2016-05-08 13:01 /home/spot/text

Expected Behavior
  Thus, unprivileged user 'spot' should be able to run 'cat', but not 'less'.

Attempt to run 'less' via the symlink (indented for clarity)

  root@LX03:~  su spot     

  spot@LX03:~  pwd
    /home/spot

  spot@LX03:~  echo $PATH
    :/root/bin::/src/bin:/root/bin:/bin:/usr/bin: ...

  spot@LX03:~  ls -l myless text
    lrwxrwxrwx 1 spot spot 13 2016-05-08 12:23 myless -> /usr/bin/less
    -rw-r--r-- 1 spot spot 12 2016-05-08 13:01 text

  spot@LX03:~  cat text
    sample text

  spot@LX03:~  myless text
    sh: ./myless: Permission denied

Si entiendo correctamente, la vulnerabilidad de los archivos tmp con sufijos pid sería un programa malicioso que crea "un enlace simbólico a un archivo privilegiado" (presumiblemente un archivo ejecutable) para poder ejecutarlo, aunque el propietario del programa malicioso no tiene los permisos necesarios para hacerlo. ¿Es esta una comprensión correcta?

Si es así, me estoy perdiendo algo.

La propiedad, el grupo y los permisos (OGP) están en el archivo real, no en la entrada del directorio. Un enlace simbólico es una entrada de directorio que apunta a otra entrada de directorio.

No entiendo cómo un enlace simbólico puede abrir una vulnerabilidad.

Tal como lo entiendo, y el soporte de mis experimentos, los OGP son globales para todo el sistema de archivos, independientemente de cómo se encuentre el archivo. No importa si se accede al archivo mediante un enlace simbólico, buscando en los directorios $PATH o ingresando la ruta completa directamente.

La única forma en que veo que un ejecutable puede usarse para acceder a los directorios y archivos a los que tiene acceso el propietario del ejecutable, pero el usuario que lo ejecuta no lo hace, es si el ejecutable tiene SETUID o SETGID habilitado.

¿Qué estoy entendiendo mal?

    
pregunta DocSalvager 10.04.2016 - 23:49
fuente

1 respuesta

4

El problema es que el atacante puede crear un enlace simbólico antes que un programa vulnerable. Por ejemplo, podría escribir un script que observe la lista de procesos, y tan pronto como un programa con el nombre correcto aparezca en la lista, el script correrá para crear un enlace simbólico a un archivo privilegiado antes de que el programa vulnerable pueda hacerlo. Si el programa vulnerable se ejecuta como un proceso privilegiado (como suelen ser los cronjobs), esto puede permitir que el atacante escriba en archivos en los que el atacante no tenga privilegios para escribir.

En algunos casos, incluso puede comenzar a crear los enlaces simbólicos incluso antes de que el programa se inicie, ya que el PID se asigna secuencialmente y, si sabe que otro programa siempre se inicia antes del inicio del programa vulnerable, puede crear algunos archivos PID de forma preventiva. antes de tiempo.

Una vez que se crea el archivo, la vulnerabilidad no es un problema debido a la poca adherencia.

    
respondido por el Lie Ryan 11.04.2016 - 01:20
fuente

Lea otras preguntas en las etiquetas