¿Es seguro un asterisco en las especificaciones del comando sudo?

5

This sugiere que restringir a un usuario a un comando específico con sudo una línea como

%web ALL=(ALL) /usr/bin/service apache2 *

se puede utilizar. Esta línea en particular restringiría al usuario a ejecutar el programa mencionado /usr/bin/service con los argumentos apache2 * .

service apache2 status

funciona, solo

service apache2

no

Me pregunto qué tan peligroso es esto. * Puede haber muchas cosas por supuesto. (No estoy hablando de explotar el programa con información falsa, esto obviamente es un problema).

Supongo que está bien porque sudo no está ejecutando un shell, por lo que no se puede hacer nada más con esa estrella. Pero hacer ese tipo de suposición me hace sentir un poco incómodo.

¿Algún peligro que deba conocer?

    
pregunta Elias 14.12.2017 - 11:59
fuente

1 respuesta

5

Las diferentes aplicaciones tienen una comprensión diferente de lo que significa el asterisco. Los shells tienden a tratarlo para la expansión de parámetros, que puede ser bastante compleja en la implementación y, a menudo, ocasiona problemas de seguridad cuando se utilizan en scripts. Sudo, por otro lado, lo trata simplemente como un comodín para todos los parámetros adicionales en ese único comando. En otras palabras, permite que el comando de servicio se ejecute con cualquier argumento que coincida con la siguiente expresión regular:

^ apache2 .*

Si lo agrega a su sudoers(5) , se garantizará que podrá ejecutar cualquier argumento en el script de inicio apache2 como root. Si esto es seguro o no depende de cómo funciona el servicio. No hay nada intrínsecamente peligroso en el uso de un asterisco, pero algunos comandos le permitirán ejecutar otros comandos como argumentos. Por ejemplo, permitir tar(1) con cualquier argumento podría resultar en la ejecución de comandos arbitrarios en la forma de tar --use-compression-program=./evil.sh . No tengo conocimiento de ninguna forma de ejecutar comandos arbitrarios, pero eso no significa que no haya ninguno o que no lo habrá en el futuro.

En general, se supone que una persona que puede ejecutar un comando que administra servicios ya se encuentra en una posición privilegiada, por lo que se pondrá poca atención en garantizar que el servicio de inicio apache2 o los comandos de administración de servicios no puedan ser objeto de abuso. cuando se ejecuta como root.

Si considera que esto "explota el programa con una entrada falsa" y, por lo tanto, está fuera de alcance, es seguro. La entrada de sudoers no le permitirá, por ejemplo, ejecutar service apache2; ./evil.sh como root .

    
respondido por el forest 25.12.2017 - 04:50
fuente

Lea otras preguntas en las etiquetas