security-secret-scan
Buscar secretos (claves, JWT, keystores, cuentas de servicio, contraseñas) en árbol e historial sin mostrar valores; no es security-review (área) ni revisión de dependencias.
Files1
View on GitHubSKILL.md.claude/skills/security-secret-scan/SKILL.md
GitHubsecurity-secret-scan
Detecta secretos expuestos y los informa como archivo, línea, tipo y acción. Nunca imprime, copia ni resume el valor. Solo lectura: no modifica ni purga nada.
Cuándo usarla
- Antes de un commit relevante, de un release o tras añadir configuración, scripts o fixtures con credenciales posibles.
- Sospecha de filtración (clave en logs, en un commit,
local.propertieso un keystore rastreado).
Cuándo NO usarla
- Revisión de permisos, componentes o ubicación → usa
security-review. - Licencias o actualizaciones de dependencias → usa
dependency-maintenance.
Precondiciones
gitleaksdisponible:gitleaks version. En Windows puede no estar en el PATH: buscargitleaks.exebajo%LOCALAPPDATA%/Microsoft/WinGet/Packagesy llamarlo por ruta completa. Si no existe, avisar y usar solo los pasos 3-4 (no instalar).- Los hooks de
.claude/hooks/y losdenyde.claude/settings.jsonimpiden leer.env*,*.pem,*.key,*.jks,*.keystorey~/.rallycopilot/*: no intentar saltárselos.
Pasos
- Working tree:
gitleaks detect --redact --no-git. Opcional:--report-format json --report-path <ruta fuera del repo>; con--redactel informe no contiene valores. - Historial:
gitleaks git --redact(en versiones antiguas,gitleaks detect --redact). Cubre commits ya borrados del árbol. - Higiene de archivos sensibles sin leer su contenido:
git ls-filesfiltrado por.env,*.pem,*.key,*.jks,*.keystore,google-services.json,local.properties,release-signing.properties→ no debe haber ninguno rastreado (salvo ejemplos con valores vacíos).git check-ignore -v <ruta>confirma que están en.gitignore.
- Patrones propios con
Grepen modofiles_with_matches(jamáscontentni-o, mostrarían el valor):eyJ(JWT),BEGIN (RSA |EC |OPENSSH )?PRIVATE KEY,"private_key"(JSON de cuenta de servicio de Play),storePassword,keyPassword,password\s*=. Indicar solo el archivo ("línea no determinada") salvo que gitleaks dé la línea. - Regla del proyecto: los secretos viven solo en
~/.rallycopilot/o en secrets de GitHub; la app no lleva claves (no hay backend propio). Claves o contraseñas enapp/,motor/,scripts/, docs o logs son hallazgo. - Descartar falsos positivos (placeholders, hashes, fixtures) justificándolos; no añadir
.gitleaksignoresin confirmación del agente principal. - Emitir findings
SEVERIDAD | archivo:línea | tipo de secreto | acción, con acción en {rotar, purgar historial, mover a ~/.rallycopilot, añadir a .gitignore}. Para un secreto real: rotar primero, luego purgar; la purga reescribe historial y exige decisión explícita del usuario. Nunca incluir el valor ni su prefijo en informe, chat ni commits. - Hallazgo confirmado: recomendar análisis de impacto por un revisor de seguridad [opus].
Validaciones / tests
gitleaks detect --redact --no-gitygitleaks git --redactsin fugas nuevas (exit 0) o cada hallazgo clasificado.- Salida revisada: ningún valor, token ni fragmento de secreto en el informe.
Definition of Done
- Working tree e historial escaneados (o indicado por qué no).
- Todos los hallazgos con severidad,
archivo:línea, tipo y acción; cero valores expuestos. -
.gitignorecubre claves, keystores,local.propertiesy.env*. - Secretos reales: rotación recomendada antes que purga.
Docs a actualizar
docs/pasos-manuales.mdodocs/play.mdsi cambia el procedimiento · docs/ESTADO.md (skillsession-handoff)