Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Leer un script de shell con ojo de auditor

5 tareas · 40 min · Principiante

Los pipelines están llenos de scripts de shell escritos con prisa. Leerlos bien no exige ser programador: exige hacer siempre las mismas preguntas. ¿Se detiene ante un error? ¿Qué variable entra sin comillas? ¿De dónde se descarga lo que se ejecuta? Con el script de despliegue web de Molinos Zarzuela, una empresa ficticia, lees línea a línea sin ejecutar nada.

0 de 5 · 0%

Objetivo de la sala

Los pipelines están llenos de scripts de shell escritos con prisa. Leerlos bien no exige ser programador: exige hacer siempre las mismas preguntas. ¿Se detiene ante un error? ¿Qué variable entra sin comillas? ¿De dónde se descarga lo que se ejecuta? Con el script de despliegue web de Molinos Zarzuela, una empresa ficticia, lees línea a línea sin ejecutar nada.

Por defecto, un script de shell sigue adelante aunque un comando falle, trata una variable sin definir como una cadena vacía y da por buena una tubería si solo su último paso funciona. Tres opciones cambian esto: set -e detiene el script cuando un comando falla, set -u convierte el uso de una variable sin definir en un error, y set -o pipefail hace que una tubería falle si falla cualquiera de sus pasos.

No son una garantía (hay casos en los que -e no actúa, como dentro de una condición), pero su ausencia es la primera señal de un script que puede «tener éxito» con medio trabajo hecho. El auditor la busca en las primeras líneas.

Responde para continuar

¿Qué consigue poner set -euo pipefail al principio de un script?

Ver pista de ayuda

Son tres comportamientos: fallos, variables y tuberías.

Una variable sin comillas y sin valor es una bomba lenta: rm -rf $A/$B/* con $B vacía borra todo lo que cuelga de $A. Abre el script de despliegue web y busca la orden de borrado. Una de las dos variables que usa nunca recibe un valor en todo el archivo ni se lee del entorno que el script declara.

Responde para continuar

Escribe el nombre de la variable usada en el borrado con rm -rf que el script nunca define.

Ver pista de ayuda

Con grep rm desplegar-web.sh localizas el borrado.

El patrón curl ... | bash descarga un script y lo ejecuta en el acto, con los permisos de quien lanza el pipeline. Si el origen se ve alterado en el camino (aquí, además, la dirección es http, sin cifrar) o el propio servidor cambia el archivo, el pipeline ejecuta lo que le entreguen, sin que nadie haya revisado qué es.

Localiza ese patrón en el script.

Responde para continuar

Escribe el nombre del script que el programa descarga y ejecuta directamente con bash.

Ver pista de ayuda

Busca con grep la palabra bash en el script.

chmod 777 abre una carpeta o un archivo a lectura, escritura y ejecución para cualquier cuenta del equipo. En un servidor web, una carpeta donde los usuarios dejan archivos, con ese permiso, es un clásico: lo que un usuario sube puede quedar con capacidad de ejecutarse. Busca ese cambio de permisos en el script.

Responde para continuar

Escribe el nombre de la carpeta a la que el script da permiso 777.

Ver pista de ayuda

grep chmod desplegar-web.sh te lleva a la línea.

La corrección de curl | bash no es «prohibir curl». Es separar el acto de descargar del de ejecutar para poder comprobar entre los dos que lo recibido es lo esperado, como se hace con cualquier artefacto del pipeline.

Responde para continuar

¿Cómo se corrige la descarga que se ejecuta de inmediato?

Ver pista de ayuda

Falta un paso de comprobación entre bajar y ejecutar.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad