Ensayar la remediación de secretos de forma segura
Eliminar una credencial filtrada de la versión más reciente de un archivo no la revoca ni la elimina del historial. El proveedor de la credencial es la autoridad sobre su validez.
[!CAUTION] Nunca crees ni incluyas en un commit un token real para este ejercicio. No eludas la protección de inserción, no publiques un repositorio intencionalmente vulnerable ni pegues valores secretos en Copilot. El laboratorio principal es una simulación y no contacta con ningún proveedor.
Resumen del laboratorio

Ilustración conceptual original (SVG)
| De un vistazo | Tu ruta |
|---|---|
| Nivel y tiempo | 300; 45 minutos (estimación de facilitación) |
| Acción inicial | Usa solo el marcador de entrenamiento y distingue la simulación de la acción del proveedor. |
| Materiales del aprendiz | Descarga 12-secrets.zip |
| Espacio de trabajo | Abre la raíz del kit extraído; ejecuta la baseline desde . relativa a esa raíz |
| Comprobación inicial esperada | Las pruebas base suministradas pasan. |
| Ayuda de configuración | Descarga, extrae, Git local y GitHub opcional |
[!NOTE] Quitar un literal no revoca su autoridad.
Conceptos · Primera tarea · Lista de evidencias · Restablecer
Objetivos de aprendizaje
- Separa la clasificación inicial, la revocación, la remediación del código, la revisión de exposición y la prevención.
- Usa evidencia para justificar el cierre de una alerta.
- Reconoce lo que una simulación local no puede demostrar.
Antes de empezar
Prepara 12-secrets con la configuración común.
Node 24 es suficiente. El análisis de secretos en repositorios privados depende del plan y las políticas;
no hagas público un repositorio para habilitar una función del laboratorio.
Conceptos y casos de uso
| Acción | Establece | No establece |
|---|---|---|
| Eliminar un literal | El archivo actual ya no lo contiene | Revocación por parte del proveedor |
| Revocar o rotar con el propietario | La credencial antigua pierde autoridad | Que no haya ocurrido acceso no autorizado en el pasado |
| Revisar exposición e historial | El alcance de la exposición y los consumidores dependientes | Eliminación automática de todas las copias remotas |
| Cerrar una alerta | Una resolución documentada | Seguridad si no se realizó ninguna mitigación |
| Protección de inserción | Prevención para patrones compatibles | Detección de todos los secretos posibles |
Escenario del ejercicio
El fixture describe una exposición simulada de un token de servicio usando únicamente el valor
TRAINING_ONLY_NOT_A_CREDENTIAL. Intencionalmente no contiene ningún token activo ni credencial
con formato de proveedor. Tu resultado es un plan de respuesta a incidentes, no una afirmación de que
GitHub haya detectado o revocado algo.
Tarea 1 - Leer el incidente y establecer el alcance
-
Inspecciona
incident.jsonyresponse.json. -
Identifica el propietario, el consumidor hipotéticamente afectado, el alcance de exposición y la evidencia ausente.
-
En Ask:
This is a simulation with no real credential. Draft the triage questions: owner, provider, exposure locations, validity, dependent consumers, and possible misuse. Do not request or print a token value. -
Mantén los hechos no verificados etiquetados como preguntas.
Tarea 2 - Planificar una remediación que empiece por la revocación
Usa esta secuencia:
---
config:
theme: base
look: classic
themeVariables:
darkMode: false
background: "#ffffff"
primaryColor: "#f5f5f5"
primaryTextColor: "#111111"
primaryBorderColor: "#555555"
secondaryColor: "#e0e0e0"
secondaryTextColor: "#111111"
secondaryBorderColor: "#666666"
tertiaryColor: "#bdbdbd"
tertiaryTextColor: "#111111"
tertiaryBorderColor: "#444444"
lineColor: "#444444"
textColor: "#111111"
mainBkg: "#f5f5f5"
nodeBorder: "#555555"
clusterBkg: "#ffffff"
clusterBorder: "#999999"
edgeLabelBackground: "#ffffff"
actorBkg: "#e0e0e0"
actorBorder: "#555555"
actorTextColor: "#111111"
actorLineColor: "#777777"
signalColor: "#333333"
signalTextColor: "#111111"
labelBoxBkgColor: "#f5f5f5"
labelBoxBorderColor: "#777777"
labelTextColor: "#111111"
loopTextColor: "#111111"
activationBkgColor: "#bdbdbd"
activationBorderColor: "#555555"
noteBkgColor: "#f5f5f5"
noteTextColor: "#111111"
noteBorderColor: "#777777"
attributeBackgroundColorOdd: "#f5f5f5"
attributeBackgroundColorEven: "#e0e0e0"
---
stateDiagram-v2
accTitle: Ciclo de vida simulado de remediación de secretos
accDescr: La clasificación inicial conduce a la revocación coordinada con el propietario, la reparación de consumidores, la revisión de exposición y la prevención antes de un cierre documentado.
[*] --> Triage
Triage --> Revoke: Coordinar con el propietario de la credencial
Revoke --> Replace: Actualizar de forma segura los consumidores afectados
Replace --> ReviewExposure: Inspeccionar el historial y la evidencia de acceso
ReviewExposure --> Prevent: Añadir protecciones y verificación
Prevent --> Close: Registrar la resolución
Close --> [*]
Leyenda. Los nodos redondeados son etapas de respuesta, las flechas muestran su orden y los círculos rellenos indican el inicio y el fin del ejercicio. Las etiquetas describen el punto de control de evidencia.
Explicación. La secuencia evita que «eliminar la cadena y cerrar la alerta» cuente como remediación. En un incidente real, la revocación y la coordinación con consumidores siguen el proceso de incidentes del propietario; este diagrama no ejecuta esas operaciones.
- Añade los seis IDs de etapas del fixture a
response.jsonen el orden revisado. - Para cada uno, indica la evidencia que se requeriría.
- Incluye un plan de interrupción para los consumidores afectados. Nunca registres la credencial de sustitución.
- Propón únicamente un cambio de código acotado: leer un valor de configuración con nombre, fallar con claridad si no existe y evitar una alternativa de «desarrollo» codificada de forma fija.
Tarea 3 - Verificar el plan, no un incidente inventado
node --test --test-concurrency=1 policy.test.mjs
node verify.mjs
Las pruebas de políticas deberían pasar. El verificador de respuesta rechaza el punto de partida vacío; una vez completado, valida únicamente el orden de las etapas y las descripciones de evidencia.
Después coloca temporalmente el cierre antes de la revocación. Confirma que el verificador falle y restaura el plan correcto.
Tarea 4 - Inspección opcional autorizada de GitHub
Si ya posees un repositorio con alertas legítimas y tienes autorización para inspeccionarlas, revisa la pestaña Seguridad y registra solo metadatos con los datos sensibles ocultos. No crees una alerta filtrando un token. Mantén las acciones del proveedor manuales y aprobadas por separado. Usa los motivos actuales documentados de las alertas; no descartes un secreto real como «usado en pruebas».
Si Actions, la facturación o las políticas bloquean la función, la simulación sigue siendo utilizable. Registra «operaciones de GitHub y del proveedor no ejecutadas» en la evidencia.
Verifica tu trabajo
- No se generó, incluyó en commits, mostró ni envió a un modelo ninguna credencial.
- La respuesta separa revocación, sustitución, historial y exposición y prevención.
- Cerrar una alerta requiere evidencia, no la ausencia de un literal.
- Una respuesta reordenada falla localmente.
- Los resultados de la simulación no se presentan como verificación del proveedor ni de GitHub.
Solución de problemas
No se espera ninguna alerta de GitHub para el marcador de formación. Un último commit limpio no demuestra que el historial esté limpio. No reescribas un historial compartido de Git ni elimines la credencial de otra persona sin el proceso de incidentes aprobado por el propietario.
Práctica independiente
Escribe una lista de comprobación de despliegue para sustituir un secreto revocado sin exponer su sustituto en los registros. Usa marcadores de posición y ninguna infraestructura real.
Restablecimiento
Restaura únicamente response.json en tu copia. Cierra la sesión de aprendizaje. En el laboratorio principal no hay
credenciales, repositorios, servicios de pago ni recursos en la nube que eliminar.