Resumen
A finales de 2016, HackerOne estaba estrenando una función de conjuntos de habilidades (skill sets). Sirve para enviar invitaciones a programas privados a los hackers que encajan con lo que busca cada programa. Para apuntarse a una habilidad, el hacker adjunta como prueba algunos de sus propios reportes.
El fallo estaba en la página que gestiona esa función:
https://hackerone.com/settings/skills
Una consulta mal construida en el servidor no se limitaba a las pruebas del usuario que hacía la petición. La respuesta incluía también los reportes que otros hackers habían enviado como prueba para la misma habilidad. Es decir, el servidor devolvía datos ajenos sin comprobar a quién pertenecían.
El investigador lo reportó en una sola frase: al consultar esa página, la respuesta exponía todos los reportes enviados para revisión.
Pasos de reproducción
El reporte original no detalla más pasos que estos:
- Iniciar sesión con una cuenta que tenga acceso a la función de habilidades (en ese momento solo unas 20 cuentas, porque se estaba desplegando por fases).
- Abrir
https://hackerone.com/settings/skills. - Revisar la respuesta del servidor: además de las pruebas propias, aparecen los reportes que otros hackers aportaron como prueba para esa misma habilidad.
Impacto
Según el análisis de HackerOne, lo que quedaba expuesto era:
- Solo el título de los reportes, no su contenido.
- Solo reportes de vulnerabilidades ya corregidas, y solo los que cada hacker había elegido enviar como prueba.
- Solo a otros hackers que se hubieran apuntado a la misma habilidad, dentro de un grupo muy pequeño (unas 20 personas con acceso a la función).
A primera vista parece poca cosa, pero un título de reporte puede decir mucho: el programa afectado, el tipo de fallo y a veces el endpoint exacto. HackerOne no puede controlar qué escribe cada hacker en sus títulos, y ese riesgo es el que pesó en la valoración.
La severidad asignada fue media (CVSS 6.5): ataque por red, complejidad baja, requiere una cuenta con privilegios bajos, sin interacción del usuario y con impacto alto en confidencialidad (ninguno en integridad ni disponibilidad).
Remediación
HackerOne corrigió la consulta pocas horas después de recibir el reporte, el mismo 6 de diciembre de 2016. El reporte se hizo público el 5 de enero de 2017.
En cuanto a la recompensa, la política de HackerOne ofrece 10.000 $ por cualquier fallo que dé acceso no autorizado a descripciones confidenciales de vulnerabilidades. El equipo consideró que este caso no encajaba exactamente, porque solo se filtraban títulos, pero pagó igualmente los 10.000 $ por lo que esos títulos podían revelar.
Qué aprender de este caso
- Las funciones que se lanzan por fases a pocos usuarios también son superficie de ataque. Aquí, el fallo se encontró cuando solo unas 20 cuentas tenían acceso.
- Cada consulta que devuelve datos de usuarios debe filtrar por el propietario en el servidor. Que la interfaz solo muestre los datos propios no garantiza que la respuesta no incluya los de otros.
Nota para el revisor: el texto original del investigador es solo de dos líneas; casi todo el detalle (número de usuarios, qué se exponía, recompensa y plazos) viene del resumen público que publicó el equipo de HackerOne en el propio reporte. No hay petición/respuesta de ejemplo ni capturas, así que no se incluye bloque diff. La sección "Qué aprender de este caso" es análisis propio, bórrala si prefieres ceñirte al reporte.