Vulnerabilidad XSS en ansi2html permite secuestro de cuentas en SourceHut
Una cadena de escape ANSI manipulada en los logs de builds.sr.ht puede ejecutar código JavaScript en el navegador y robar credenciales de administrador.
SourceHut sufrió un ataque de toma de control de cuentas mediante una vulnerabilidad XSS en el módulo ansi2html que convierte los logs de CI a HTML. El autor del reporte descubrió que la función que parsea secuencias OSC 8 permite inyectar enlaces con atributos arbitrarios. Al enviar una cadena como \33]8;;https://example.com/"/autofocus/tabindex="1"/onfocus="alertxss\7`` al log, el renderizado genera un cononfocus` que dispara el payload en cualquier navegador que abra la página del job.
El exploit no requiere una cuenta en la instancia principal; basta con que un atacante aporte un parche a un proyecto público que active CI, o que controle una salida que aparezca en el log. El payload puede leer el token CSRF presente en la página y, usando el formulario de "Resubmit build", enviar una petición que eleve los privilegios del atacante a administrador. Con acceso a los deploy keys de builds.sr.ht, el atacante podría comprometer también los repositorios de SourceHut.
El investigador abrió un issue en el repositorio de ansi2html (issue 259) y posteriormente envió un pull request que corrige la sanitización de los atributos de enlace (PR 260). El parche elimina la inserción de atributos no permitidos y restringe los protocolos de los enlaces a http y https.
Medidas de mitigación
Mientras se despliega el parche, la defensa más rápida consiste en endurecer la política de seguridad de contenidos (CSP) de la página de logs, retirando la directiva unsafe-inline. Esto impide que scripts inyectados se ejecuten, aunque la página ya dependa de scripts inline para algunas funcionalidades, por lo que la solución definitiva pasa por aplicar el fix upstream y actualizar todas las instancias de SourceHut.
El incidente subraya la necesidad de revisar cualquier conversor de texto a HTML que acepte contenido arbitrario, sobre todo en entornos CI donde los logs pueden contener datos no confiables.


