Secretos: nunca hacerlos transitar, nunca mostrarlos en claro
Un secreto pegado en una conversación, aunque sea brevemente, permanece después presente en los registros y en cualquier relectura automática del historial, y un comando de configuración lanzado por un motivo preciso puede mostrar un secreto vecino en claro si su filtro es demasiado amplio.
Un secreto pegado en una conversación nunca desaparece realmente. Permanece en los registros del servicio que recibió el mensaje, y cualquier relectura automática de ese historial, la tuya o la de una herramienta externa, puede volver a mostrarlo meses después. La regla más simple sigue siendo la primera: una contraseña, una clave de API o un token de acceso nunca se pega en una conversación, ni siquiera para una pregunta rápida o una corrección puntual.
El mínimo privilegio, antes que todo lo demás
El mínimo privilegio es el principio que consiste en dar a una herramienta, un agente o una persona solo el acceso mínimo necesario para la tarea en curso, nunca un acceso más amplio por comodidad. Un agente encargado de renombrar archivos en una carpeta no necesita ningún derecho sobre una base de datos vecina, aunque esa base sea técnicamente accesible desde el mismo puesto. Restringir el acceso desde el principio cuesta menos que descubrir, después, todo lo que un acceso demasiado amplio permitió leer.
El filtro demasiado amplio, un canal de fuga discreto
Un comando que lista variables o consulta una tabla de configuración por un motivo preciso puede mostrar, junto al valor buscado, todo lo que se encuentre justo al lado. El riesgo no viene del comando en sí, viene de la amplitud de su filtro. El siguiente ejemplo crea sus propios datos de demostración, sin tocar nada real de tu puesto:
echo "CLE_API=ax92kQ" > fixture.txt
echo "NOM_SERVEUR=serveur-principal" >> fixture.txt
grep NOM fixture.txt
grep -i "e" fixture.txt
El primer comando, filtrado por NOM, solo devuelve la línea esperada. El segundo, filtrado únicamente por la letra e, devuelve las dos líneas, incluida la clave. Nada ha cambiado en la intención entre los dos comandos, solo la precisión del filtro cambió el resultado mostrado en la pantalla.
El comando desnudo es un filtro ausente
Un filtro demasiado amplio no es la única trampa: un comando sin argumento, como env, printenv o set solo, muestra todas las variables con sus valores, secretos incluidos, y esa salida entra en la transcripción. El caso típico nace de un cambio de shell: un comando escrito con comillas para un shell las pierde al pasar a otro, que ejecuta entonces un set desnudo. Para comprobar una variable, mídela en lugar de mostrarla:
CLE_API=ax92kQ sh -c 'echo "longitud: ${#CLE_API}"'
longitud: 6
La longitud basta para saber que la variable está definida, sin que aparezca su valor. En Claude Code, las transcripciones locales registran ahora también el prompt de sistema, las herramientas y los parámetros de cada solicitud: trata una transcripción como sensible antes de compartirla. La redacción automática de secretos cubre más casos desde octubre, pero vale para las transcripciones compartidas y los registros de depuración, no como garantía general.
Filtrar por lo esperado, nunca por un patrón genérico
Antes de lanzar un comando que muestra una configuración, conviene preguntarse qué va a mostrar realmente en la pantalla. Filtrar por los nombres esperados, o por una longitud precisa, reduce este riesgo mucho mejor que un filtro de una sola letra o un patrón demasiado corto. Este reflejo vale tanto para un comando local como para una petición confiada a un agente: pídele que filtre por nombres precisos, nunca por un patrón amplio que arrastre todo un conjunto de columnas o variables. La lección siguiente trata lo que ocurre cuando un secreto termina, a pesar de todo, escrito en un repositorio seguido por una herramienta de control de versiones.
Tres canales de fuga, y su remedio
| Canal | Lo que se fuga | Remedio |
|---|---|---|
| Secreto pegado en una conversación | Permanece en los registros del servicio y en cualquier relectura automática del historial | Nunca pegar un secreto en claro, ni siquiera para una pregunta rápida |
| Comando que lista variables | Un filtro demasiado amplio muestra un secreto vecino en claro | Filtrar por los nombres esperados, nunca por una letra o un patrón corto |
| Consulta sobre una tabla de configuración | Sube una columna entera, secreto incluido, por un motivo sin relación | Seleccionar las columnas útiles, nunca el conjunto de la tabla |
Para verificar una variable de configuración llamada NOM_SERVEUR antes de una intervención técnica, un administrador lanza un comando que muestra todas las variables de entorno cuyo nombre contiene la letra e.
Escribe en una frase lo que esta situación establece, y en una frase lo que no establece.
Lo que esto establece: Establece que el filtro utilizado, la letra e, es lo bastante amplio como para devolver cualquier variable cuyo nombre contenga esa letra, secreta o no.
Lo que esto no establece: No establece la lista exacta de las variables realmente mostradas por este comando en este puesto concreto.
Los tres calibrados falsos más frecuentes
- Demasiado amplio Este comando forzosamente mostró todos los secretos almacenados en este puesto, sea cual sea su nombre.
- Demasiado estrecho Esta situación no muestra nada más que un comando lanzado antes de una intervención técnica.
- Fuera de lugar Muestra que la intervención técnica se refería al servidor nombrado en NOM_SERVEUR.
- Un secreto pegado en una conversación permanece después en los registros del servicio y en cualquier relectura automática del historial, incluso meses después.
- El mínimo privilegio limita el acceso de una herramienta o un agente a lo estrictamente necesario de su tarea, nunca a un acceso más amplio por comodidad.
- El riesgo de un comando de configuración rara vez viene de su intención, casi siempre viene de la amplitud de su filtro.
- Filtrar por los nombres esperados, nunca por una letra o un patrón demasiado corto, evita que un secreto vecino se muestre por accidente.
- Un comando de entorno sin argumento muestra todas las variables, secretos incluidos: medir la longitud de una variable basta para comprobar que está definida.
Elige, hoy, un comando de configuración que uses regularmente en tu puesto, lista de variables, exportación o consulta de una tabla, y ejecútalo observando con precisión lo que muestra en la pantalla en vez de lo que se supone que hace. Si aparece también un campo vecino al que buscabas, cierra el filtro antes de volver a lanzarlo.
Cada afirmación datable de esta lección remite aquí al texto público que la respalda. Una fuente que no se abre no prueba nada.