Linux Script SUID Wrapper

0

¿Es una buena práctica usar un contenedor para ejecutar un script?

En tal caso, el siguiente conjunto de envoltorio / script puede considerarse seguro:

wrapper.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>

int main(void)
{
    if (setuid(geteuid()) != 0)
    {
        fputs(strerror(errno), stderr);
        return EXIT_FAILURE;
    }
    system("cat script | /bin/bash");
    return EXIT_SUCCESS;
}

script

IFS=""
/bin/echo -n "[Whoami]: "
/usr/bin/whoami

/bin/echo -n "[ls /root]: "
/bin/ls /root

El archivo script no contiene ningún shebang. ¿Cambiaría algo si hubiera agregado uno?

En el Wrapper, ¿podría simplemente haber llamado al script ya que ejecutaría cualquier script de Linux en lugar de incluir su contenido en un shell?

    
pregunta Ra'Jiska 08.10.2017 - 18:14
fuente

2 respuestas

1

Dado que proporciona una puerta de acceso al acceso privilegiado, el uso de programas setuid debe considerarse un último recurso para proporcionar funcionalidad. Esto generalmente se explota invocando un programa adicional del setuid one, algo que su código hace por diseño . Como no hay permisos inusuales en script (ni siquiera necesita ser ejecutable) existe una falta de transparencia en lo que hace el código. No usar una ruta explícita es un error de novato: su código puede verse comprometido simplemente cambiando $ PATH

Dado que existe una forma bien definida de proporcionar dicho acceso privilegiado en sistemas UNIX, que ha sido bien probado, se comprende ampliamente y proporciona un control de acceso granular y flexible (estoy hablando de sudo en caso de que no lo haya hecho). adivinado) ¿por qué alguien querría implementar el código anterior?

    
respondido por el symcbean 08.10.2017 - 19:56
fuente
1

No, esto no se considera seguro, no intentes sanear el entorno en el que estás ejecutando. Lo que permitirá al atacante manipular lo que se ejecuta como root al manipular el entorno a través de varias variables de entorno, desde PATH hasta LD_PRELOAD. Las vulnerabilidades específicas varían, y hay un cierto esfuerzo para mitigar el cargador dinámico, pero aún así debe desinfectar el entorno y asegurarse de que está en control de lo que se ejecuta en el contexto de privilegios;

    
respondido por el Meir Maor 08.10.2017 - 18:43
fuente

Lea otras preguntas en las etiquetas