La red social Facebook pagó el mayor premio de su historia por encontrar vulnerabilidades en su sistema, informa la página oficial del programa Facebook Bug Bounty, lanzado en el año 2011.
El ingeniero brasileño Reginaldo Silva encontró un error, gracias al cual los atacantes podían acceder a los archivos XML arbitrarios de los servidores web de la red social. El premio pagado al ingeniero es de 33.500 dólares.
"Sabíamos que queríamos pagar una gran suma de dinero debido a la seriedad de la cuestión", han declarado representantes del Facebook.
Acá cito lo que dice en la página de Facebook Bug Bounty:
"Recientemente hemos otorgado nuestro mayor pago de bug bounty, y puesto que es un gran de validación del programa hemos estado construyendo y desde 2011, pensamos que tomamos unos minutos para describir el problema y nuestra respuesta.
En noviembre, estaban leyendo a través de informes de fallos entrante y topé con un reclamo que queríamos investigar inmediatamente: Lee archivos arbitrarios. El informe fue escrito bien e incluido prueba de código de concepto, así que fuimos capaces de reproducir el problema fácilmente. Después de ejecutar la prueba de concepto para verificar el problema, presentamos una tarea urgente — Activar notificaciones a nuestros empleados de guardia.
Reginaldo Silva explica en el post abajo enlazado que la cuestión era una vulnerabilidad de entidades externas XML en https://www.facebook.com/openid/receiver.php que pudieron permitir alguien que lea archivos arbitrarios en el servidor Web. Inmediatamente, hemos implementado una solución poniendo una bandera para hacer que nuestra biblioteca de análisis de XML para no permitir la resolución de entidades externas. Esta corrección inicial fue bastante simple caber en una sola línea: libxml_disable_entity_loader(true);.
Después de parchear el tema, tuvimos que decidir cómo salir la solución a todos nuestros servidores Web. Utilizamos una herramienta llamada Takedown para este tipo de tarea porque funciona en un nivel bajo, antes de que gran parte del procesamiento de la solicitud se produce. Permite a los ingenieros definir las reglas para bloquear, inicie sesión y modificar las peticiones. Takedown nos ayudó a asegurar que esta línea de código funcionó antes que nada para cualquier petición a /openid/receiver.php. Esta fue nuestra solución inmediata a corto plazo.
Sólo 3,5 horas después Reginaldo golpe envíe en su informe la solución a corto plazo estaba vivo. El siguiente paso era a entender mejor la cuestión: Cómo surgió, si existió en cualquier otra cosa en el código y cualquier otros pasos que queríamos tomar. Esta parte del proceso es emocionante porque hay potencial para encontrar temas relacionados u otras áreas para investigar.
Después de depurar, llegamos a la conclusión que libxml_disable_entity_loader(true) era de hecho el arreglo final correcto. Porque queremos dejar el código en mejor estado que encontramos (reescritura de código viejo, pruebas de escritura, etc.), escribir la solución a largo plazo es a menudo el paso en el ciclo de vida de un insecto que toma más tiempo. Queríamos esta línea para ejecutar antes que nada, y lo ponemos en el nivel más bajo de la pila de llamadas en nuestro código de inicialización de petición. En el proceso, nos llegó a través de otro extremo mediante el código vulnerable y aseguró que fue protegido por la misma regla Takedown que implantamos previamente, así como nuestra solución permanente. En paralelo, otros miembros del equipo de seguridad investigan los registros correspondientes a este tema y confirmaron que había no sido previamente explotado o utilizado maliciosamente.
En este punto, escribimos volver a Reginaldo que le aplauden su archivo leer vulnerabilidad. Discutimos el tema, y debido a un escenario válido que teorizó que implica una función administrativa que tenemos programado desaprueban pronto, decidimos volver a clasificar la cuestión como un posible error RCE. Sabíamos que queríamos pagar mucho debido a la gravedad de la cuestión, así que decidimos hacer un promedio de las recomendaciones de pago a través de un grupo de administradores de nuestro programa. Como siempre, diseñamos nuestros pagos para premiar el trabajo duro de los investigadores que ya están dispuestos a hacer lo correcto y reportar bugs de los vendedores afectados."
El ingeniero brasileño Reginaldo Silva encontró un error, gracias al cual los atacantes podían acceder a los archivos XML arbitrarios de los servidores web de la red social. El premio pagado al ingeniero es de 33.500 dólares.
"Sabíamos que queríamos pagar una gran suma de dinero debido a la seriedad de la cuestión", han declarado representantes del Facebook.
Acá cito lo que dice en la página de Facebook Bug Bounty:
"Recientemente hemos otorgado nuestro mayor pago de bug bounty, y puesto que es un gran de validación del programa hemos estado construyendo y desde 2011, pensamos que tomamos unos minutos para describir el problema y nuestra respuesta.
En noviembre, estaban leyendo a través de informes de fallos entrante y topé con un reclamo que queríamos investigar inmediatamente: Lee archivos arbitrarios. El informe fue escrito bien e incluido prueba de código de concepto, así que fuimos capaces de reproducir el problema fácilmente. Después de ejecutar la prueba de concepto para verificar el problema, presentamos una tarea urgente — Activar notificaciones a nuestros empleados de guardia.
Reginaldo Silva explica en el post abajo enlazado que la cuestión era una vulnerabilidad de entidades externas XML en https://www.facebook.com/openid/receiver.php que pudieron permitir alguien que lea archivos arbitrarios en el servidor Web. Inmediatamente, hemos implementado una solución poniendo una bandera para hacer que nuestra biblioteca de análisis de XML para no permitir la resolución de entidades externas. Esta corrección inicial fue bastante simple caber en una sola línea: libxml_disable_entity_loader(true);.
Después de parchear el tema, tuvimos que decidir cómo salir la solución a todos nuestros servidores Web. Utilizamos una herramienta llamada Takedown para este tipo de tarea porque funciona en un nivel bajo, antes de que gran parte del procesamiento de la solicitud se produce. Permite a los ingenieros definir las reglas para bloquear, inicie sesión y modificar las peticiones. Takedown nos ayudó a asegurar que esta línea de código funcionó antes que nada para cualquier petición a /openid/receiver.php. Esta fue nuestra solución inmediata a corto plazo.
Sólo 3,5 horas después Reginaldo golpe envíe en su informe la solución a corto plazo estaba vivo. El siguiente paso era a entender mejor la cuestión: Cómo surgió, si existió en cualquier otra cosa en el código y cualquier otros pasos que queríamos tomar. Esta parte del proceso es emocionante porque hay potencial para encontrar temas relacionados u otras áreas para investigar.
Después de depurar, llegamos a la conclusión que libxml_disable_entity_loader(true) era de hecho el arreglo final correcto. Porque queremos dejar el código en mejor estado que encontramos (reescritura de código viejo, pruebas de escritura, etc.), escribir la solución a largo plazo es a menudo el paso en el ciclo de vida de un insecto que toma más tiempo. Queríamos esta línea para ejecutar antes que nada, y lo ponemos en el nivel más bajo de la pila de llamadas en nuestro código de inicialización de petición. En el proceso, nos llegó a través de otro extremo mediante el código vulnerable y aseguró que fue protegido por la misma regla Takedown que implantamos previamente, así como nuestra solución permanente. En paralelo, otros miembros del equipo de seguridad investigan los registros correspondientes a este tema y confirmaron que había no sido previamente explotado o utilizado maliciosamente.
En este punto, escribimos volver a Reginaldo que le aplauden su archivo leer vulnerabilidad. Discutimos el tema, y debido a un escenario válido que teorizó que implica una función administrativa que tenemos programado desaprueban pronto, decidimos volver a clasificar la cuestión como un posible error RCE. Sabíamos que queríamos pagar mucho debido a la gravedad de la cuestión, así que decidimos hacer un promedio de las recomendaciones de pago a través de un grupo de administradores de nuestro programa. Como siempre, diseñamos nuestros pagos para premiar el trabajo duro de los investigadores que ya están dispuestos a hacer lo correcto y reportar bugs de los vendedores afectados."