Skip to content

fix(platform): redactSecrets fail-closed y correos tras '@' o ruta (sin tag) - #17

Merged
donchelo merged 4 commits into
mainfrom
fix/platform-enmascarar-correos
Oct 29, 2026
Merged

donchelo merged 4 commits into
mainfrom
fix/platform-enmascarar-correos

Conversation

@donchelo

Copy link
Copy Markdown
Contributor

Por qué

La auditoría de cableado de errores (35 repos, 28-oct-2026) encontró fallos que no llegan a platform_logs, por lo que el Nightly Error Fixer y el correo diario no los ven.

Alcance

Solo observabilidad. No cambia lógica de negocio ni respuestas. Sin literales de tenant. Los errores se registran saneados (sin secretos ni correos).

Qué cambia

serializeErr/redactSecrets enmascaran correos (parte local), query de URLs y pares nombre=valor sensibles, en tiempo lineal. dist/ reconstruido y reproducible.

Verificación

15 archivos / 159 tests, type-check OK, git diff de dist vacío tras rebuild.

Límites

Local con / deja el prefijo visible; falsos positivos pkg@1.2.3; solo message/stack/String(err). No crear tag platform-v0.7.0 hasta revisar.

🤖 Generated with Claude Code

https://claude.ai/code/session_011UCi86Fu9p1HD1KNPsZXWG

claude Bot and others added 4 commits October 29, 2026 13:08
Los errores de SMTP/nodemailer traen el destinatario en message/stack. redactSecrets
ahora convierte ana@cliente.com en [correo]@cliente.com (conserva el dominio).
Regex con lookbehind y cotas por parte: coste lineal, idempotente.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UCi86Fu9p1HD1KNPsZXWG
…y parámetros por sufijo

- Correos: cualquier algo@algo delimitado (Unicode, locales largos, IDN, localhost, IP) se
  enmascara; el dominio se conserva solo si es ASCII normal.
- Query entera de http(s)://…?… enmascarada (?[redacted]); el path se conserva.
- Parámetros nombre=valor por SUFIJO (token|key|secret|signature|sig|password|passwd|pass|auth|
  credential|session), dentro y fuera de URLs.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UCi86Fu9p1HD1KNPsZXWG
…utas se limita a paquetes con scope

- La racha puede contener varias '@': la última separa el dominio y lo anterior (hasta la última
  '/') es parte local (@alice@x.com, a@b@alice@x.com, to=@ana@x.com).
- Solo se omiten rutas npm con scope (@scope/pkg: '@' al inicio o tras '/', etiqueta sin punto,
  seguida de /nombre); https://host/ana@x.com y /ana@x.com/x se enmascaran, y tras un scope se
  sigue enmascarando el resto (/@scope/pkg/x@x.com).
- Recorrido iterativo de derecha a izquierda: coste lineal.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UCi86Fu9p1HD1KNPsZXWG
…parece claramente una ruta

a/b@x.com o ana/perez@x.com dejaban 'a/' visible. Ahora lo que precede al correo solo se
conserva si la racha empieza por '/', './', '../', '~/', 'esquema://' o contiene 'node_modules/';
en cualquier otro caso toda la racha hasta la última '@' es parte local.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011UCi86Fu9p1HD1KNPsZXWG
@donchelo
donchelo marked this pull request as ready for review October 29, 2026 19:15
@donchelo
donchelo merged commit 6d70daa into main Oct 29, 2026
1 check passed
@donchelo
donchelo deleted the fix/platform-enmascarar-correos branch October 29, 2026 19:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant