¿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

Cómo encontrar secretos olvidados en el código

Después de esta lección: Puedo encontrar una clave olvidada en un texto de código.

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

La clave que se subió por error

Un secreto en el código es una clave o una contraseña escrita dentro de un programa o de un archivo de configuración. Pasa más de lo que parece: alguien la escribe para probar y se olvida de quitarla.

Hoy aprenderás a encontrar esas claves antes que un atacante, y a guardarlas en un sitio donde no se filtren.

Al terminar esta lección

Nota

Puedo encontrar una clave olvidada en un texto de código.

La regla de este laboratorio

Importante

Busca solo en tu copia del laboratorio y solo con permiso. Si encuentras una clave real en el código de otra persona, no la uses: avísala. Las claves de esta práctica son falsas a propósito.

Palabras clave

PalabraQué significa
Secretoun dato que solo debe conocer quien tiene permiso
Clave de APIuna contraseña que usa un programa para hablar con un servicio
Variable de entornoun valor que el sistema da al programa desde fuera del código
Repositoriola carpeta donde se guarda un proyecto con todas sus versiones
Historialla lista de todos los cambios que tuvo un proyecto
Rotar una clavecambiar una clave por otra nueva y anular la vieja

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

Dónde acaban los secretos por error

Un secreto se escapa por lugares muy normales. Se escribe en el código para probar. Se deja en un archivo de configuración que se sube al repositorio. Se pega en un mensaje de ayuda.

Una vez publicado, cualquiera que vea el repositorio puede copiarlo. Hay programas que buscan claves así todo el día.

Cinco lugares donde se escapa una clave

LugarEjemploPor qué es peligroso
El códigopassword = "abc123"Lo lee quien vea el proyecto
Un archivo de configuraciónconfig.txt con la clave de la base de datosSe sube sin darse cuenta
El código de una páginaUna clave en un script de la webCualquier visitante puede verlo
El historial del repositorioUna clave borrada hace mesesSigue guardada en las versiones viejas
Un mensaje o capturaUna foto del código con la claveCircula fuera de tu control

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

Antes de empezar

Nota

Pulsa Iniciar el laboratorio y espera a que diga que está en marcha. Abre el terminal que hay junto al laboratorio. Los Runs de esta lección escriben solo un archivo de ejemplo en la carpeta temporal.

Escribe un archivo de ejemplo con claves falsas

Comando
printf 'nombre = "tienda"\npassword = "abc123"\napi_key = "k-12345"\n' > /tmp/ejemplo.txt

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

Busca las líneas con password o api_key

Comando
grep -n -i -E "password|api_key" /tmp/ejemplo.txt

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

Cómo buscar claves con grep

grep busca texto dentro de un archivo. La opción -n escribe el número de cada línea, -i ignora las mayúsculas y -E deja separar palabras con una barra.

El segundo Run escribe dos líneas: 2:password = "abc123" y 3:api_key = "k-12345". La línea 1 no sale porque no tiene ninguna de las dos palabras.

Un secreto tiene formas que se reconocen

Muchas claves se delatan por la palabra que las acompaña: password, secret, token o api_key, seguida de un signo igual y un valor.

Otras tienen una cabecera propia, como una clave privada que empieza por -----BEGIN PRIVATE KEY-----. Un buscador mira estas formas línea a línea.

Ejemplo: qué línea es un secreto

Línea¿Secreto?Por qué
precio = 5NoNo tiene ninguna palabra de clave
token = "x9f3kd8"SíPalabra de clave y un valor escrito
password = os.environ["PASSWORD"]NoLa clave se lee de fuera del código
api_key = ""NoEl valor está vacío
-----BEGIN PRIVATE KEY-----SíEs el principio de una clave privada

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

Dónde guardar una clave de forma segura

El programa debe leer la clave desde fuera: de una variable de entorno o de un gestor de secretos. En el repositorio solo queda el nombre de la variable, nunca su valor.

Si una clave se filtró, no basta con borrarla. Hay que rotarla: crear una nueva, usar la nueva y anular la vieja.

Dale un valor al programa desde fuera

Comando
MI_CLAVE=abc123 sh -c 'echo "valor: $MI_CLAVE"'

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

Qué enseña el Run de la variable

El Run escribe valor: abc123. La clave llegó al programa desde fuera de su código. Si miras el texto del programa, la clave no está escrita.

Al terminar la orden, la variable desaparece de ese terminal. Así no queda guardada en ningún archivo.

Un error frecuente

Advertencia

Mucha gente cree que borrar la clave del archivo la hace desaparecer. En un repositorio, las versiones viejas siguen guardadas en el historial. Si una clave se filtró, rótala siempre, aunque la hayas borrado.

Para ir más lejos: el laboratorio WrongSecrets

Después de esta lección, el laboratorio abre una aplicación que esconde claves falsas en su código, en sus páginas y en su configuración. Cada reto se marca en verde al dar la clave correcta.

Antes de entrar, apunta tres sitios donde buscarías según la tabla de lugares. Al acabar, anota dónde estaba cada clave y dónde debía haberse guardado.

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.