Inestabilidad en el enrutamiento de Internet por un bug en el procesamiento de BGP
(blog.benjojo.co.uk)- Un bug en el procesamiento de mensajes BGP provocó el 20 de mayo de 2025 una gran inestabilidad de enrutamiento y, en algunas redes, cortes de conectividad a Internet
- La causa fue un BGP Prefix-SID Attribute malformado, que desencadenó reacciones excepcionales en implementaciones BGP importantes, especialmente JunOS y Arista EOS
- Algunos carriers de tránsito, incluidos Hutchison y Starcloud, retransmitieron el mensaje causante y ampliaron el impacto
- El incidente provocó reseteos masivos de sesiones BGP e inestabilidad en más de unas 100 redes
- Lo ocurrido puso en evidencia lagunas en el manejo tolerante a errores de BGP según el proveedor y la necesidad de mejorarlo
27 de mayo de 2025
Inestabilidad global en el enrutamiento de Internet por un bug en el procesamiento de BGP
El martes 20 de mayo de 2025 a las 7:00 (UTC), se propagó un mensaje BGP que provocó comportamientos inesperados en dos implementaciones BGP importantes que se usan con frecuencia para manejar tráfico de Internet
Como resultado, múltiples “sesiones BGP de conectividad a Internet” se cerraron automáticamente, causando desde una inestabilidad de enrutamiento mínima hasta, en el peor caso, una interrupción de conectividad temporal en algunas redes
El mensaje BGP problemático
- El análisis de sesiones recopiladas por bgp.tools muestra que el mensaje BGP Update que causó este fenómeno parecía normal, pero contenía un BGP Prefix-SID Attribute dañado con datos internos rellenados con 0x00
- La mayoría de las implementaciones BGP (IOS-XR, Nokia SR-OS) lo filtran correctamente de acuerdo con RFC7606 (tolerancia a errores en BGP), pero el problema surgió en la interacción entre JunOS y Arista EOS
- JunOS conserva y reenvía el mensaje dañado, y Arista EOS restablece la sesión BGP al recibirlo
- En entornos donde se usa mucho hardware de Juniper (JunOS), si está conectado a Arista EOS, puede haber interrupciones de acceso a Internet de hasta unos 10 minutos
Quién emitió el mensaje problemático
-
El análisis del archivo de bgp.tools para ese período muestra que hubo varios orígenes AS involucrados
-
Esto sugiere que no fue la red que generó el prefijo, sino un carrier de tránsito en el camino el que añadió el Attribute incorrecto
-
Los principales AS vinculados al problema son los siguientes
- AS9304 (Hutchison Global Communications Limited)
- AS135338 (Starcloud Information Limited)
- AS151326 (DCConnect Communication Pte. Ltd.)
- AS138077 (PT Abhinawa Sumberdaya Asia)
-
Según los datos de bgp.tools, es muy probable que quien realmente añadió el Attribute haya sido Starcloud (AS135338) o Hutchison (AS9304)
-
Algunos prefijos representativos a los que se propagó ese Attribute son 156.230.0.0/16 y 138.113.116.0/24
-
Hutchison/AS9304 está conectado a múltiples Internet Exchange (IX), y el mensaje también se propagó a route servers usados por bird
-
Como Bird no soporta BGP SID, envió el mensaje a numerosos IX sin filtrarlo, amplificando el caos a nivel de red
¿Qué es BGP Prefix-SID?
- El BGP Prefix-SID Attribute normalmente solo debería usarse en sesiones BGP internas, y se utiliza para definir la ruta hacia un destino dentro de una misma red (RFC8669)
- La razón por la que ese Attribute se filtró a la tabla de enrutamiento global podría ser que una sesión BGP externa estuviera configurada como si fuera una sesión interna
Redes afectadas
- Es difícil identificar con precisión a las víctimas, pero se confirmó el problema en alrededor de 100 redes que mostraron una enorme variación (churn) tras el mensaje BGP inicial
- Normalmente, el route collector de bgp.tools recopila entre 20 mil y 30 mil mensajes por segundo, pero en el momento del incidente registró más de 150 mil en promedio cada 10 segundos
- Esa cifra es una señal de que hubo una interrupción grave en rutas de Internet de gran alcance
Responsabilidad de los vendors e implicaciones
- Aunque la causa raíz no está totalmente clara, el hecho de que un mensaje erróneo se haya propagado a escala de Internet demuestra que el problema existente en el manejo de errores de BGP es un riesgo real
- Otros vendors filtraron el Attribute problemático, pero Juniper lo permitió de forma indirecta y lo pasó a equipos Arista, provocando reseteos de sesión por deficiencias en el código de tolerancia a errores de BGP
- La documentación oficial de JunOS también indica que “no inspecciona el mensaje completo”
- Con este diseño, JunOS evita el riesgo de un reseteo remoto de sesión, pero sigue existiendo la posibilidad de reenviar mensajes problemáticos a otros peers o clientes
Conclusión
-
Este incidente fue breve, pero sugiere que podría volverse más grave si la escala aumenta
-
A medida que los servicios dependen cada vez más de IP, el impacto de una falla de Internet puede ir más allá de que un consumidor no pueda acceder a su correo y extenderse a fallas en transmisiones de TV o llamadas fallidas a servicios de emergencia
-
Dado que esto podría derivar de forma realista incluso en pérdidas de vidas humanas, se subraya la necesidad de que cada vendor implemente una tolerancia a errores de BGP sólida
-
Se indica la posibilidad de participación de operadores de red que quieran colaborar con el análisis de datos de bgp.tools (enlace provisto)
1 comentarios
Comentarios de Hacker News
En general, el principio de "ser liberal al recibir y estricto al enviar" se considera el enfoque estándar
Existen opciones como descartar o filtrar mensajes rotos (
drop, filtro), ignorar solo el atributo y reenviar (break), o cortar la conexión por completo (como Arista)Yo consideraba que la cuarta opción (la forma de Arista) era un comportamiento realmente difícil de aceptar
La tercera (Juniper) tampoco me parece deseable, pero no diría que sea un problema fatal
Edit: al releerlo, vi que Arista no era la cuarta sino la segunda (terminación de conexión)
Básicamente trató la conexión como inválida y la cerró; pensando en la experiencia del usuario, no parece una gran decisión, pero da la impresión de que es aceptable
Ya existe el RFC 7606 (manejo mejorado de errores para mensajes BGP UPDATE), donde se especifica con detalle cómo tratar mensajes rotos
treat-as-withdraw(tratarlo como si la ruta hubiera sido retirada)El principio de "ser liberal al recibir y estricto al enviar" es precisamente lo que se conoce como el "robustness principle" o la "ley de Postel"
Aprovechando características del funcionamiento de BGP, hubo varios problemas en toda la red por el hecho de que los equipos locales podían reenviar atributos que no conocían
El autor también señala este punto en el artículo relacionado
Yo no estoy de acuerdo con ese enfoque
Todavía recuerdo lo frenético que fue parchear por toda la red el bug CVE-2023-4481
En el pasado trabajé desarrollando funciones de BGP en un fabricante de equipos de telecomunicaciones (ya hace bastante tiempo de eso)
Sigo pensando que BGP es demasiado complejo
La gente sigue agregando nuevas funciones, y los vendors siguen implementándolas conforme a estándares o borradores
Como BGP parece que nunca va a desaparecer, da la sensación de que estos bugs van a seguir reapareciendo sin parar
HGC Global Communications Limited (antes Hutchison Global Communications Limited, abreviado HGC) es un proveedor de servicios de Internet de Hong Kong
Da la impresión de que BGP sería mucho más estable si los distintos vendors de hardware alinearan mejor los estándares en estos temas
No sé si solo me pasa a mí, pero nunca había oído hablar de BGP hasta que escuché que había causado algún problema
Me interesa saber si hay alguna forma de practicar BGP en casa
Puedes hacerlo comprando un router real con implementación de BGP (entre los económicos, algo como Mikrotik), o usando una implementación open source
DN42 es un patio de juegos para practicar tecnologías de enrutamiento
En mi curso universitario de redes no vimos BGP, pero en una clase de posgrado sí lo estudiamos
En la clase de redes de licenciatura que yo llevé, BGP apenas se mencionó de pasada en el pizarrón
Da la impresión de que solo puedes realmente "practicar" BGP si administras una red grande conectada al tráfico real de Internet
En el pasado, varios vendors también tuvieron bugs parecidos al del artículo
También hemos recibido paquetes similares en nuestros equipos de chasis IOS XR
Al mismo tiempo, hubo muchas anunciaciones de rutas BGP
No sé exactamente cuál era el equipo upstream
Me hace preguntarme si el protocolo BGP realmente se prueba bien con fuzzing
Tal vez, al ser un protocolo tan importante, nadie se atreve a provocar fallas a propósito
Escribir un fuzzer para BGP sería fácil, pero diagnosticar los crashes podría ser muy difícil
Esto hace preguntarse si ha existido otro sistema tan vasto y cargado de complejidad accidental como el backbone de Internet
Me sorprende que, dado el impacto potencial de este tipo de bug, no exista un consorcio que opere algo como una suite de pruebas de interoperabilidad