Exposición de datos sensibles: cuando la información se filtra sola
Guía en castellano sobre exposición de datos sensibles: claves en código y apps, datos personales en respuestas, registros y errores.
Qué es
Esta categoría agrupa los casos en que información sensible queda al alcance de quien no debería verla, sin que haga falta romper ninguna protección: simplemente está ahí. Claves en el código de una web, datos personales en una respuesta, copias de seguridad públicas o mensajes de error que lo cuentan todo.
Dónde suele aparecer
- Código del cliente: claves de API, tokens y credenciales en ficheros JavaScript o dentro de aplicaciones móviles.
- Repositorios públicos: credenciales subidas por error a GitHub u otros servicios, incluso en el historial de cambios.
- Respuestas de la API que incluyen correos, teléfonos, direcciones o datos internos que la pantalla no muestra.
- Registros y analíticas: tokens o contraseñas guardados en logs o enviados a servicios externos.
- Mensajes de error con trazas, rutas internas, consultas o versiones de software.
- Ficheros olvidados: copias de seguridad, volcados de bases de datos o exportaciones accesibles por URL.
- Caché: páginas con datos personales guardadas por una CDN y servidas a otros usuarios.
Cómo se busca
- Revisa los ficheros JavaScript de la web y descompila las apps móviles buscando claves y endpoints.
- Busca en repositorios públicos referencias a los dominios del programa.
- Lee las respuestas completas de la API, no solo lo que muestra la interfaz.
- Provoca errores (parámetros de tipo incorrecto, valores enormes) y mira qué cuenta el servidor.
Si encuentras una credencial, comprueba solo que es válida con la operación más inofensiva posible y no la uses para acceder a datos. Muchas claves expuestas son públicas a propósito (por ejemplo, algunas de mapas o analíticas): confirma antes que la clave da acceso a algo.
Cómo se evita
- Ningún secreto en el código que llega al cliente. Las operaciones con claves privadas, siempre en el servidor.
- Escáneres de secretos en los repositorios y rotación inmediata de cualquier clave expuesta.
- Respuestas de la API con solo los campos necesarios.
- Errores genéricos para el usuario y el detalle solo en registros internos, sin datos sensibles.
- Cabeceras de caché correctas en las páginas con datos personales.
Al reportarlo
Explica qué permite la información expuesta. Una clave con permisos de escritura en un servidor de producción es crítica. Una versión de software en un error, casi nunca lo es.
Casos reales de Exposición de datos
Liberapay: el historial de pagos de un equipo revelaba donantes que habían pedido no aparecer en listas públicas
La exportación pública de pagos de los equipos de Liberapay solo miraba la visibilidad que tenía la donación al pagarse, así que mostraba nombre, importe y fecha de donantes que después se habían ocultado.
5 min
Monero: la caché de sincronización en segundo plano conserva claves secretas adicionales de transacciones salientes
La función que limpia la caché de sincronización en segundo plano del monedero de Monero borraba m_tx_keys pero olvidaba m_additional_tx_keys, dejando claves secretas de transacciones salientes en una caché menos protegida.
3 min