Falla en Facebook permitió ejecución remota de código

Al parecer la información de sus usuarios no se ha visto comprometida

Ha sido parcheada una vulnerabilidad en un servidor de Facebook que podría haber permitido la divulgación de información y ejecución de comandos. El servicio comprometido se trataba de Sentry, una aplicación de seguimiento de errores de código abierto que ayuda a los desarrolladores a controlar y corregir fallas en tiempo real. Está escrito en Python con el framework Django.

Investigadores en ciberseguridad se encontraban examinando la aplicación y vieron que los rastros de pila (listas de la pila de funciones que están en juego en el momento de un error) aparecían regularmente en la página. De este modo, los investigadores concluyeron que la aplicación parecía inestable con respecto a la función de restablecimiento de contraseña del usuario, que ocasionalmente se bloqueaba.

Más importante aún, estos rastros de pila estaban desencadenando impresiones completas de toda la aplicación, aunque con cierta información crítica redactada.

Acorde a los expertos en ciberseguridad, el modo de depuración de Django no se apagó, lo que consecuentemente imprime todo el entorno cuando se produce un seguimiento de pila. Sin embargo, Django corta información crítica (contraseñas, secretos, claves) en esos rastros de pila, evitando así una filtración masiva de información.

Aun así, los rastros de pila revelaron suficientes piezas de información para construir un exploit para ejecutar comandos en el sistema. Por ejemplo, el nombre de la cookie de sesión; el serializador de sesiones que usa el protocolo binario Pickle para deserializar las estructuras de objetos de Python; el motor de sesión; y una lista de información de configuración de Sentry que contiene una clave secreta utilizada para la sesión.

La lista SENTRY_OPTIONS contiene una clave llamada system.secret-key, que no está cortada y es utilizada para el registro de sesión. Si esto se ve comprometido, es importante regenerarlo ya que, de lo contrario, es mucho más fácil secuestrar las sesiones de los usuarios.

Sabiendo esto, los investigadores descubrieron que podían crear su propia sesión conteniendo código arbitrario para ejecutar comandos en el sistema. Para probar el mecanismo, escribieron un script simple con una carga arbitraria en una cookie sentrysid especialmente diseñada. La carga útil fue un comando “sleep 30”, al usar esta cookie, la página en realidad tarda 30 segundos adicionales en cargarse, lo que confirma la presencia de la falla.

“Parece que Facebook no pudo desinfectar por completo los datos de error devueltos por una aplicación web pública”, mencionaron los expertos. “Este es un problema común en el mundo de la ciberseguridad de las aplicaciones web”.

Facebook reconoció la vulnerabilidad e inhabilitó el sistema el mismo día, mientras preparaba un parche de actualización. El problema fue solucionado cerca de una semana después.

Especialistas en ciberseguridad del Instituto Internacional de Seguridad Cibernética comentaron que, si bien la vulnerabilidad no afectó directamente a los usuarios de Facebook, pues fue una divulgación de información en una aplicación de terceros que Facebook estaba ejecutando en algunos de sus servidores que parecían estar desconectados de la información del usuario, es un recordatorio importante del desafío de aplicar parches de seguridad a escala empresarial.