Advertencias de seguridad

Entrega incorrecta de registro parcial

3 de septiembre de 2020

Consulta a continuación una advertencia de seguridad de Fastly (FSecA) en la que se describe la investigación del enrutamiento erróneo de registros debido a la confluencia de una serie de condiciones poco frecuentes.


El objetivo de esta FSecA es exponer que comprendemos claramente la aplicabilidad y el impacto de esta investigación, así como describir la solución que se ha implementado.


Resumen


El 29 de julio a las 00:00 UTC, Fastly recibió un mensaje de un cliente (cliente X) en el que se informaba de que su sistema de registros había recibido una línea de registro que estaba destinada a otro cliente (cliente Y). Fastly empezó a investigar inmediatamente y determinó que, cuando confluyen una serie compleja de condiciones, es posible que una línea de registro se enrute por error a un servicio de registro que no corresponde. Logramos averiguar que la raíz del incidente era un error en la lógica que Fastly había introducido en abril de 2012 para mejorar el rendimiento. En Fastly nos consta que la notificación de este cliente ha sido el único caso en ocho años en que se han dado a la vez todas las condiciones necesarias.


Aplicabilidad


Fastly ha determinado que esta incidencia puede ocurrir si se combinan las siguientes condiciones (todas deberán cumplirse):



  1. Un subsistema del daemon de Varnish entra en un estado transitorio en el que se queda sin memoria o casi sin memoria (esto puede ocurrir debido a una carga inesperada o a errores de programación).

  2. El daemon de Varnish escribe activamente una línea de registro en su búfer de registro (destinada al cliente X), pero esta queda incompleta debido a la falta de memoria (línea de registro X1).

  3. Parte de la memoria se recupera dinámicamente gracias a la liberación de recursos en otro lugar, y se escribe una línea de registro completa desde otro cliente (línea de registro Y1).

  4. Como la línea de registro X1 estaba incompleta, las dos líneas de registro se unifican (formando la línea de registro X1Y1).

  5. El servidor de registro incorpora la línea de registro (línea X1Y1) y lee la información de destino del cliente a partir del principio de la línea de registro concatenada (línea X1Y1) y entrega toda esta (línea X1Y1) al cliente X.


Solución


Creemos que, si todas estas condiciones se hubieran dado con cierta frecuencia en los últimos ocho años, habríamos recibido alguna notificación al respecto. Nos tomamos muy en serio cualquier posible corrupción de datos (consulta «Enrutamiento de servicio incorrecto en conexiones de cliente HTTP/2» y «Divulgación del cuerpo de la petición a otros servicios de Fastly». No aceptamos el más mínimo error en la línea de registro si no va acompañado de un análisis de la raíz de la incidencia. Hemos implantado medias preventivas para evitar que esto vuelva a suceder.


Fastly ha desplegado una solución que garantiza que Varnish gestione las situaciones de falta de memoria durante la escritura de una línea de registro (condición n.º 2 anterior). Esta solución evita que la concurrencia de estas condiciones provoque el enrutamiento erróneo de los datos de registro. Tras aplicar la solución, si se produce un error en la interpretación de un evento de registro, el proceso falla y descarta la línea en lugar de escribirla. La solución se publicó en un despliegue por fases el 31 de julio a las 10:51 UTC y se completó el 9 de agosto a las 14:49 UTC.


Fastly llevó a cabo una revisión exhaustiva de las condiciones de error tras el despliegue de la solución, desde el 13 de agosto hasta el 2 de septiembre, para determinar la posible tasa de incidencia del enrutamiento erróneo de líneas de registro.
Nuestra revisión concluye que nuestros clientes no tienen que adoptar medidas complementarias. Si has recibido una línea de registro inesperada, ponte en contacto con nosotros: nos pondremos a trabajar de inmediato para comprobar si se trata de un problema relacionado con este error.


Secuencia de eventos


Eventos del 29 de julio de 2020



  • (00:00 UTC): El cliente encuentra en su envío de registros una línea de registro procedente de otro cliente de Fastly y se lo notifica a Fastly.

  • (00:35 UTC): Fastly inicia los procesos de gestión de incidentes.

  • (00:57 UTC): Fastly obtiene una copia de los datos de registro filtrados e inicia la evaluación.

  • (01:03 UTC): Se localiza la fuente de la corrupción de datos en Varnish; se inicia la investigación sobre posibles soluciones.


Eventos del 31 de julio de 2020



  • (07:44 UTC): Se propone un parche de Varnish para corregir el error.

  • (08:15 UTC): Se realizan pruebas con el parche de Varnish y se aprueba su despliegue.

  • (10:51 UTC): Se inicia el despliegue de Varnish.


Eventos del 9 de agosto de 2020



  • (14:49 UTC): Se completan el despliegue y la solución del parche de Varnish.


Eventos del 13 de agosto de 2020 al 2 de septiembre de 2020



  • Se completa la investigación de las condiciones de error.


Información de contacto


Si tienes alguna duda más, ponte en contacto con el personal de ingeniería de Fastly a través de support@fastly.com o con el equipo de seguridad de Fastly a través de security@fastly.com.

Suscríbete a las advertencias de seguridad.

Al enviar la solicitud, das tu consentimiento para que tus datos se envíen a Fastly en los Estados Unidos y sean tratados conforme a nuestra Política de privacidad.

¿List@ para empezar?

Ponte en contacto o crea una cuenta.