¿Es posible convertirse en root a través de un enlace simbólico roto que pertenece a root y se puede escribir globalmente?

5

Estoy buscando una vulnerabilidad en un servidor. Estoy buscando en el directorio /var y obtengo algo como esto:

drwxr-xr-x  3 root root 4.0K Aug 14 21:02 kerberos
drwxr-xr-x 12 root root 4.0K Nov 11 05:04 lib
drwxr-xr-x  2 root root 4.0K Jun 10  2014 local

lrwxrwxrwx  1 root root   11 Aug 14 21:00 lock -> ../run/lock     <-- CHECK THIS

drwxr-xr-x  3 root root 4.0K Aug 14 21:05 log
lrwxrwxrwx  1 root root   10 Aug 14 21:00 mail -> spool/mail
drwxr-xr-x  2 root root 4.0K Jun 10  2014 nis
drwxr-xr-x  2 root root 4.0K Jun 10  2014 opt
drwxr-xr-x  2 root root 4.0K Jun 10  2014 preserve
lrwxrwxrwx  1 root root    6 Aug 14 21:00 run -> ../run
drwxr-xr-x  4 root root 4.0K Aug 14 21:00 spool

Si veo los permisos del "archivo" lock , veo que los permisos para otros son rwx . Supongo que, por lo tanto, es posible que otro usuario que no sea el propietario (raíz en este caso), lea, ejecute y escriba este "archivo", así que compruebo qué tipo de archivo lock es:

file lock
lock: broken symbolic link to '../run/lock'

stat lock

File: ‘lock’ -> ‘../run/lock’
  Size: 11          Blocks: 0          IO Block: 4096   symbolic link
Device: fb01h/64257d    Inode: 6424574     Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-11-14 00:18:52.218518690 +0000
Modify: 2015-08-14 21:00:52.000000000 +0000
Change: 2015-11-11 04:56:35.543404826 +0000
 Birth: -

De acuerdo con esta información, ¿es posible obtener root, usar este permiso para acceder a otra información o ejecutar comandos?

Por ejemplo lo intenté:

echo  "ls /etc" >> lock

Pero obtengo Permission denied .

Algunas preguntas:

  1. ¿Es correcta mi interpretación sobre los permisos de bloqueo?

  2. ¿Puedo hacer algo para obtener una ventaja con este enlace simbólico roto?

  3. ¿Qué tipo de preguntas se deben hacer con este enlace simbólico roto?

pregunta Cristian Chaparro A. 14.11.2015 - 04:57
fuente

2 respuestas

1

No, normalmente no es posible obtener la raíz utilizando dichos enlaces.

Para responder a sus preguntas más específicas:

1. ¿Mi interpretación sobre los permisos de bloqueo es correcta?

Si este "archivo" era un archivo real y no un enlace simbólico, su interpretación sería correcta, pero no lo es.

Los permisos de los enlaces simbólicos (aka. enlaces simbólicos) casi siempre se ignoran: los enlaces simbólicos heredan sus permisos reales del archivo al que apuntan, el permiso rwxrwxrwx que se muestra puede considerarse simplemente como relleno. Esto es tan cierto que el POSIX standard ni siquiera define qué permiso debe mostrar el SO para el enlace simbólico:

  

Los valores de los bits de modo de archivo para el enlace simbólico creado son   no especificado Todas las interfaces especificadas por POSIX.1-2008 se comportarán como   Si el contenido de los enlaces simbólicos siempre se puede leer, excepto que el   valor de los bits de modo de archivo devueltos en el campo st_mode de la estadística   la estructura no está especificada.

Algunos sistemas muestran todos los conjuntos de bits de permiso ( rwxrwxrwx , como en su caso), otros muestran el permiso en el archivo vinculado si existe, otros hacen cosas más sofisticadas (como un bit a nivel y operación entre el enlace y los permisos de destino ...).

He dicho anteriormente que estos permisos son casi siempre ignorados, esto se debe a que no es completamente cierto en un puñado de sistemas operativos. Por ejemplo, los sistemas Mac OS X se desvían del estándar POSIX citado anteriormente y el permiso read controla la capacidad de resolución de enlaces, que tiene muy poco impacto (bueno o malo) en términos de seguridad (solo hace que sistema algo más difícil de mantener).

Entonces, con todo eso en mente, ¿cuál es su permiso actual con este enlace roto? Es el mismo que el objetivo si existe . Sin embargo, como el destino no existe, no puede realizar ninguna operación con el enlace, incluso si tuviera un parámetro suficiente (por eso está roto: simplemente no funciona).

2. ¿Puedo hacer algo para obtener una ventaja con este enlace simbólico roto?

Los enlaces rotos por sí mismos no son anormales y no presentan ninguna debilidad de seguridad. A menudo encontrará dichos enlaces rotos en entornos que usan chroot o recurso compartido de red, donde los enlaces simbólicos resolverán correctamente solo uno que use la raíz correcta o haya montado el recurso compartido de red correcto.

3. ¿Qué tipo de pregunta debe hacerse con este enlace simbólico roto?

Tiene un enlace cuya ruta es /var/lock que apunta al directorio no existente /run/lock . Es suficiente para poder manipular solo una de esas dos rutas para tomar la ruta /var/lock .

  • ¿Tiene permiso de escritura en el directorio principal del objetivo o en un directorio que compone su ruta? En caso afirmativo, podrá crear y hacerse cargo del directorio que falta. De lo contrario, no podrá manipular de ninguna manera el directorio de destino faltante: seguirá faltando.
  • ¿Tiene permiso de escritura en el directorio principal del enlace o en un directorio que compone su ruta? Si es así, podrá reemplazar el enlace por otro, apuntando al directorio que posee (apuntando a /home/myuser/fakelock por ejemplo), controlando así todos los bloqueos que una aplicación intentaría colocar en la ruta var/lock .

Si no tiene permiso de escritura en ninguno de estos directorios, entonces está loco y solo tiene que continuar con su investigación: no hay nada que explotar aquí.

    
respondido por el WhiteWinterWolf 19.12.2015 - 17:06
fuente
1

Los permisos en un enlace simbólico son en su mayoría sin sentido. Si no tiene permiso de lectura, no puede ver a dónde apunta, y si no tiene permiso de escritura, no puede reorientarlo, pero eso es todo, y crear un enlace con permisos distintos de 0777 Es todo el truco. Los permisos en el destino del enlace determinan lo que puede hacer con el objetivo: si tuviera que reemplazar el destino de un enlace roto de propiedad raíz con un archivo que creó, el objetivo sería suyo y actuaría de manera apropiada independientemente de si accedió directamente oa través del enlace.

    
respondido por el Mark 19.12.2015 - 08:09
fuente

Lea otras preguntas en las etiquetas