Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Entradas no confiables e inyección en el YAML

5 tareas · 40 min · Principiante

Los títulos de las propuestas, los nombres de rama y los mensajes de commit los escribe quien contribuye, y los flujos de GitHub Actions y de GitLab CI los leen como variables. Si ese texto acaba dentro de un comando, deja de ser un dato. Con tres flujos de GitHub, un archivo de GitLab CI y un informe de revisión de Mirto Pagos aprendes a reconocer ese patrón al leer un YAML y a corregirlo. Todo es lectura de archivos de ejemplo; la consola no ejecuta nada.

0 de 5 · 0%

Objetivo de la sala

Los títulos de las propuestas, los nombres de rama y los mensajes de commit los escribe quien contribuye, y los flujos de GitHub Actions y de GitLab CI los leen como variables. Si ese texto acaba dentro de un comando, deja de ser un dato. Con tres flujos de GitHub, un archivo de GitLab CI y un informe de revisión de Mirto Pagos aprendes a reconocer ese patrón al leer un YAML y a corregirlo. Todo es lectura de archivos de ejemplo; la consola no ejecuta nada.

En GitHub Actions, una expresión como ${{ ... }} dentro de un paso run se resuelve antes de que el intérprete reciba el comando: el motor sustituye el texto y entrega el script ya armado. Si el valor lo controla quien abre la propuesta (un título, un nombre de rama, el cuerpo de un comentario, el mensaje de un commit), ese texto pasa a formar parte del propio comando y puede cambiar lo que hace.

Fíjate en el registro de la ejecución 9120: muestra el comando resultante después de la sustitución. Es la evidencia más clara de que el valor se inserta como texto del script.

Responde para continuar

¿Por qué es peligroso poner una expresión con el título de la propuesta dentro de un paso run?

Ver pista de ayuda

Compara la línea del flujo con el comando resultante del registro.

El contexto de GitHub tiene valores que controla quien contribuye y otros que no. Los títulos y cuerpos de propuestas e incidencias, los nombres de rama de una propuesta, las etiquetas y los mensajes de commit son entradas no confiables. Un identificador numérico o el nombre del repositorio, en cambio, no los elige un tercero.

Abre los tres flujos y el informe de revisión, y localiza qué expresión se inserta en el comando del flujo que construye la rama.

Responde para continuar

Escribe la expresión de contexto (sin las llaves) que construir-rama.yml inserta directamente en el comando.

Ver pista de ayuda

Mira la línea del paso Nombrar el artefacto; el informe de revisión te dice en qué línea buscar.

En GitLab CI las variables predefinidas llegan al script como variables del intérprete, y usadas entre comillas como dato son mucho menos peligrosas que una expresión que se sustituye antes. El riesgo reaparece cuando el valor se convierte en texto de comando: dentro de eval, de sh -c, o pasado a algo que lo vuelve a interpretar. El título de una solicitud de fusión, los nombres de rama y los mensajes de commit son texto que escribe una persona.

La documentación oficial de GitLab pide además que el código malicioso se detecte en la revisión, porque un pipeline lanzado sobre él puede comprometer variables enmascaradas y protegidas.

Responde para continuar

Escribe el nombre de la variable de GitLab controlada por quien abre la solicitud que el archivo .gitlab-ci.yml usa dentro de eval.

Ver pista de ayuda

Hay dos variables en el bloque script. Una es un identificador corto generado por GitLab; la otra es texto escrito por una persona.

No todos los flujos con entradas de usuario fallan. El que hace bien las cosas no deja la expresión dentro del comando: la pasa a una variable de entorno en la clave env del paso y el comando usa esa variable entre comillas. El motor sigue sustituyendo la expresión, pero el valor llega al intérprete como contenido de una variable, no como parte del script.

Es el patrón que la documentación oficial de GitHub llama variable de entorno intermedia.

Responde para continuar

Escribe el nombre (campo name) del flujo que ya trata el título como dato y no necesita corrección.

Ver pista de ayuda

El informe de revisión marca un flujo sin hallazgos; confirma abriendo el archivo.

Para los dos flujos de GitHub con hallazgo y para el trabajo de GitLab hay una sola idea de fondo: que la entrada llegue como dato y no como parte del texto del comando. Filtrar caracteres o escapar comillas es frágil: siempre queda una forma que no se previó.

Responde para continuar

¿Cuál es la corrección de fondo para los pasos con hallazgo?

Ver pista de ayuda

Si el texto no llega a formar parte del comando, no hay nada que filtrar.

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