¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Contraseñas y claves en el sitio equivocado

Después de esta lección: Puedo encontrar un secreto en un sitio equivocado y decir dónde debe guardarse.

Lección de 55 min3 comandosLaboratorio de WrongSecrets: encuentra secretos incrustados y aprende dónde guardarlos

Una clave que se quedó en el repositorio

Un becario sube a un repositorio público el código de la web de una empresa. En un archivo de configuración queda la clave de la nube de la empresa.

Borra el archivo al día siguiente. Pero el historial lo conserva, y los robots que rastrean repositorios ya la habían copiado.

La regla única

Advertencia

Este laboratorio es una aplicación insegura a propósito. Ataca solo tu copia privada, que no tiene salida a internet. Atacar un sistema que no es tuyo, o que no tienes permiso para probar, es delito en casi todos los países.

Al final de esta lección

Nota

Puedo encontrar un secreto en un sitio equivocado y decir dónde debe guardarse.

Palabras clave

PalabraQué significaEjemplo
Secretodato que solo debe conocer quien lo necesitauna clave de acceso
Variable de entornovalor que el sistema da a un programa al arrancarlo
Gestor de secretosservicio que guarda claves y las entrega a quien tiene permiso
Rotarcambiar un secreto por otro nuevo
Historialregistro de todos los cambios de un repositorio
Ofuscarrevolver un texto para que cueste leerlo, sin cifrarlo

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un secreto tiene su sitio

Un secreto puede acabar en muchos sitios. Por ejemplo: el código, un archivo de configuración, una imagen de contenedor, un script del navegador o un registro.

En todos ellos lo ve más gente de la prevista. El sitio correcto es un gestor de secretos, o una variable de entorno que el sistema entrega al programa al arrancarlo.

Ejemplo resuelto: dónde va cada secreto

Dónde estabaPor qué es un problemaDónde debe ir
En el código fuenteLo ve todo el que lee el repositorioEn una variable de entorno
En una imagen de contenedorVa dentro de cada copia de la imagenEn el gestor de secretos
En un script del navegadorLo recibe cualquier visitanteSolo en el servidor
En un registro de erroresLo leen quienes revisan los registrosFuera de los registros

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Mira la aplicación de tu laboratorio

Tu laboratorio ejecuta WrongSecrets. Arráncalo y ejecuta estos tres comandos. Solo miran. El primero pregunta si la aplicación está sana. El segundo pregunta qué páginas de gestión ofrece a cualquiera. El tercero muestra los primeros caracteres de un script que envía a todos los visitantes.

¿Está sana la aplicación?

Comando
curl -s -w "\n" http://wrongsecrets:8080/actuator/health

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Qué páginas de gestión ofrece?

Comando
curl -s http://wrongsecrets:8080/actuator | grep -o 'actuator/[a-z]*' | sort -u

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

El principio del script de los visitantes

Comando
curl -s http://wrongsecrets:8080/js/index.js | head -n 1 | cut -c 1-120

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Qué te dicen las tres respuestas

El primero imprime una línea corta que termina en "status":"UP". El segundo imprime tres nombres: auditevents, health e info. Pregúntate cuál de ellos no debería leer un desconocido.

El tercero imprime un código de aspecto revuelto. Está revuelto, no cerrado con llave. El navegador debe leerlo entero para ejecutarlo, y tú también.

Un error frecuente

Advertencia

Mucha gente cree que borrar un secreto de un archivo lo elimina. No es así. El historial conserva cada versión, y quien clonó el repositorio ya tiene una copia. Si un secreto se expuso, rótalo: crea uno nuevo y anula el viejo.

Los secretos tienen formas reconocibles

Muchos secretos se parecen entre sí. Una clave de nube empieza con un prefijo fijo y tiene una longitud conocida. Una contraseña suele ir tras un nombre como password o clave. Una clave privada empieza con una línea de cabecera.

Por eso se pueden buscar con un programa antes de subir el código.

Buscar una forma en un texto

Código: python
# Líneas inventadas. Ninguna clave es real.
lines = ["host = db.local", "password = \"abc123\"", "debug = true"]
# Cambia la palabra que se busca y pulsa Run.
number = 0
for line in lines:
    number = number + 1
    if "password" in line:
        print("línea", number, "parece una contraseña")

Ejemplo resuelto: tres formas

FormaEjemplo inventadoQué es
Prefijo fijo y 16 caracteresAKIA y 16 mayúsculas o dígitosClave de acceso a la nube
Nombre, signo = y valorclave = "valor-largo"Contraseña escrita en un archivo
Línea de cabecera-----BEGIN PRIVATE KEY-----Clave privada

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Para ir más allá: un buscador menos ingenuo

El buscador de show-scan solo mira la palabra password y avisaría también de password = os.environ["DB_PASS"], que no es un secreto.

Amplíalo para que busque también clave y secret, y para que no avise cuando el valor tras el = empieza por $ o lleva os.environ. Añade tres líneas de prueba, una de cada caso, y comprueba el resultado.

Sobre este laboratorio y su código: Laboratorio de WrongSecrets: encuentra secretos incrustados y aprende dónde guardarlos

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.