¡A todos nos encantan los scripts de shell! No es de extrañar, entonces, que se usen con frecuencia en la mayoría de los productos de seguridad basados en Linux. Generalmente, son fáciles de desarrollar en comparación con los programas en C/C++, ya que no presentan complicaciones de compilación y son fáciles de prototipar.
Sin embargo, aparte de tener infinitas aplicaciones, los scripts de shell tienen muchos peligros ocultos en el contexto de la seguridad; a menudo se pasan por alto al escribir scripts de shell.
Por ejemplo, considere un script de shell que simplemente utiliza el comando ping para verificar la conectividad entre dos hosts.
#! / Bin / bash
ping –c1 “$1”
En este caso de uso, $1 es una entrada que podría derivarse de algún CGI u otro script. Si una entrada no se valida correctamente, un hacker puede explotar fácilmente la sustitución de comandos.
ping –c1 “8.8.8.8 && comando”
En este ejemplo, un script de shell tratará los argumentos pasados a ping como un comando independiente al ejecutarse. Sin embargo, existen otras maneras de lograr esta sustitución de comandos.
ping –c1 “8.8.8.8`comando`”
ping –c1 8.8.8.8| comando
ping –c1 8.8.8.8; comando
En la mayoría de los productos de seguridad de nivel de puerta de enlace, como la Gestión Unificada de Amenazas (UTM) , los firewalls proporcionan portales para los usuarios finales. Estos portales facilitan diversos servicios, como la descarga de herramientas de acceso remoto, la recuperación de correos electrónicos en cuarentena, el cambio de preferencias de usuario, etc.
Estos servicios esperan algún tipo de entrada de usuario y pueden invocar un script de shell en el backend del producto de software.
Gracias a estas vulnerabilidades, un atacante puede obtener permisos de root mediante la ejecución remota de comandos en un dispositivo vulnerable mediante el envío de entradas maliciosas. Una vez que se accede a un dispositivo vulnerable, un atacante puede infiltrarse en la red de una organización.
Aunque las entradas del usuario se validan la mayoría de las veces, siempre existe la posibilidad de que falten algunas validaciones una y otra vez.
Este ataque de sustitución de comandos también se conoce como "Ejecución remota de comandos previa a la autenticación", ya que un atacante puede ejecutar esta explotación sin ninguna credencial válida.
Muy recientemente se descubrió esta falla en un dispositivo de firewall de una marca reconocida.
In Seqrite UTMNos centramos explícitamente en dichas áreas durante el desarrollo para que los dispositivos no sean vulnerables a ataques tan comunes.
A continuación se presentan algunas pautas para escribir scripts de shell seguros:
- Utilice rutas absolutas o relativas para los comandos utilizados en los scripts.
- Establecer valores correctos de la variable PATH en los scripts.
- Utilice comillas adecuadas para las variables que se pasan como argumentos.



