Bug Pemrosesan BGP Menyebabkan Ketidakstabilan Routing Internet
(blog.benjojo.co.uk)- Pada 20 Mei 2025 pukul 07:00 UTC, sebuah pesan BGP yang rusak yang menyebar memicu perilaku tak terduga pada dua implementasi utama, menyebabkan banyak sesi BGP yang terhubung ke internet direset dan pada beberapa jaringan terjadi ketidakstabilan routing atau kehilangan koneksi singkat
- Update bermasalah tersebut membawa BGP Prefix-SID Attribute yang umumnya tidak diharapkan muncul dalam update BGP internet, dan berada dalam kondisi rusak dengan seluruh data internal bernilai
0x00 - IOS-XR/Nokia SR-OS yang menerapkan toleransi error berbasis RFC7606 memfilternya, tetapi JunOS meneruskannya dan Arista EOS mereset sesi, sehingga berpotensi memengaruhi pengguna Arista yang terhubung ke transit carrier berbasis JunOS
- Dalam pengamatan bgp.tools, AS9304, AS135338, AS151326, dan AS138077 muncul berulang kali, dan pihak yang menambahkan atribut cacat kemungkinan besar adalah Starcloud AS135338 atau Hutchison AS9304
- Selama insiden, rata-rata 10 detik laju pesan route collector bgp.tools melonjak dari kondisi normal 20.000–30.000 per detik menjadi lebih dari 150.000/s, menunjukkan bahwa perbedaan penanganan error BGP dapat mengguncang stabilitas rute internet nyata
Insiden Update BGP 20 Mei 2025
- Pada Selasa, 20 Mei 2025 pukul 07:00 UTC, sebuah pesan BGP yang menyebar memicu perilaku tak terduga pada dua implementasi BGP utama yang sering digunakan untuk meneruskan trafik internet
- Dampaknya meluas ketika banyak sesi BGP yang terhubung ke internet otomatis ditutup
- Pada beberapa jaringan terkonfirmasi adanya ketidakstabilan routing
- Dalam skenario terburuk, kemungkinan terjadi kehilangan koneksi singkat
Pesan BGP yang Bermasalah
- Update yang terlihat pada sesi yang memasok data ke bgp.tools adalah BGP Update yang relatif biasa untuk /16, tetapi menyertakan BGP Prefix-SID Attribute yang bermasalah
- Atribut tersebut berbahaya karena dua alasan
- Ini adalah atribut yang tidak diharapkan terlihat dalam update BGP tabel internet
- Ini adalah atribut yang rusak dengan seluruh data internal bernilai
0x00
- Sebagian besar implementasi seperti IOS-XR/Nokia SR-OS, ketika “BGP error tolerance” berbasis RFC7606 diaktifkan, memfilternya dengan benar sehingga tidak menimbulkan masalah
- Pada kombinasi JunOS dan Arista EOS, hasilnya berbeda
- JunOS meneruskan pesan yang rusak
- Perangkat Arista EOS mereset sesi ketika menerima pesan tersebut yang tampaknya datang dari perangkat JunOS
- Karena banyak internet transit carrier memakai hardware Juniper yang menjalankan JunOS, jaringan yang mengoperasikan Arista EOS dan terhubung ke router transit upstream berbasis JunOS kemungkinan sempat kehilangan akses internet untuk beberapa waktu
- Durasinya diperkirakan maksimal sekitar 10 menit
Kandidat AS yang Menambahkan Atribut Cacat
- Hasil pemfilteran arsip bgp.tools pada periode tersebut menunjukkan beberapa origin AS tampaknya terlibat dalam insiden ini
- Ini mengindikasikan bahwa atribut tersebut kemungkinan ditambahkan oleh carrier perantara menuju internet yang lebih luas, bukan oleh jaringan yang menjadi origin prefix
- Empat kandidat yang muncul berulang kali di seluruh pesan bermasalah adalah sebagai berikut
- bgp.tools mengamati impacted prefix pada jalur
[…] 151326 138077 […]tanpa atribut BGP yang cacat- Karena itu, pihak yang menambahkan atribut cacat kemungkinan besar adalah Starcloud AS135338 atau Hutchison AS9304
- Beberapa prefix yang diamati dalam update yang menyertakan atribut tersebut adalah sebagai berikut
156.230.0.0/16138.113.116.0/24163.171.102.0/24163.171.103.0/24163.171.104.0/24
Jalur yang Menyebar ke Internet Exchange
- Insiden ini membesar karena Hutchison/AS9304 terhubung ke banyak internet exchange
- Pesan bermasalah dikirim ke IX route server, dan route server ini biasanya menjalankan bird
- Karena Bird tidak mendukung BGP SID, ia tidak dapat memfilter pesan tersebut dan mendistribusikannya apa adanya ke berbagai internet exchange multi-terabit
- Akibatnya, kekacauan menyebar melampaui sesi internet transit ke cakupan yang lebih luas
Sifat BGP Prefix-SID
- BGP Prefix-SID Attribute umumnya hanya seharusnya terlihat pada sesi BGP internal
- Tujuan yang didefinisikan dalam RFC8669 adalah membantu menentukan jalur yang akan ditempuh trafik menuju tujuan di dalam satu jaringan
- Alasan atribut ini bocor ke tabel routing global mungkin karena sesi BGP eksternal dikonfigurasi seperti sesi internal
Jaringan yang Terdampak dan Metrik Pengamatan
- Sulit memastikan secara tepat siapa saja yang terdampak, tetapi berdasarkan lokasi dengan churn yang sangat besar relatif terhadap ukuran jaringan tepat setelah pesan BGP bermasalah pertama, diperkirakan sekitar 100 jaringan mengalami masalah
- Contoh dengan tingkat keyakinan tinggi adalah sebagai berikut
- Dalam kondisi normal, route collector bgp.tools mengumpulkan sekitar 20.000–30.000 pesan per detik
- Selama insiden ini, rata-rata 10 detik laju pesan jauh melampaui 150.000/s
- Ini menunjukkan adanya gangguan signifikan pada banyak rute internet
Perbedaan Penanganan Error antar Vendor
- Walaupun akar penyebab atau pihak pemicu sebenarnya belum sepenuhnya jelas, fakta bahwa pesan cacat menyebar pada skala internet menunjukkan risiko penanganan error BGP
- Vendor lain mendeteksi atribut cacat dan menahan pengumuman rute, tetapi Juniper meneruskannya ke peer
- Setelah pesan tersebut mencapai perangkat Arista, ketiadaan atau cacat pada kode BGP error tolerance menyebabkan reset sesi
- Dokumentasi BGP error tolerance JunOS dari Juniper menyatakan bahwa JunOS tidak memeriksa semua bagian pesan
- Perilaku ini membuat JunOS sendiri menghindari reset sesi yang dipicu dari jarak jauh, tetapi meneruskan pesan yang sama ke peer lain atau ke sisi pelanggan
Implikasi Operasional
- Outage kali ini berlangsung singkat, tetapi bisa saja berdampak lebih besar
- Seiring makin banyak layanan berpindah ke basis IP, cakupan gangguan internet dapat melampaui kegagalan akses email
- Kegagalan siaran TV
- Gangguan panggilan layanan darurat
- Bug seperti ini meningkatkan kemungkinan menyebabkan atau memperburuk korban jiwa di dunia nyata
- Operator jaringan yang memiliki tabel routing penuh dapat menyediakan feed data ke bgp.tools untuk membantu debugging insiden di masa depan
- Saat ini sudah ada 2570 sesi berjalan yang menyediakan data ke bgp.tools
- Cara konfigurasi dijelaskan dalam dokumen pengaturan feed data bgp.tools
1 komentar
Komentar Hacker News
Pendekatan standar adalah bersikap longgar saat menerima dan ketat saat mengirim
Pilihannya adalah memfilter pesan yang rusak, membuangnya, mengabaikan atribut yang rusak tetapi tetap meneruskannya, atau menjadi rusak karena atribut yang rusak; menurut saya yang benar-benar sulit diterima hanya nomor 4, yaitu perilaku ala Arista. Nomor 3, perilaku ala Juniper, memang tidak ideal tetapi tidak fatal
Setelah saya baca ulang, Arista tampaknya lebih dekat ke nomor 2 daripada nomor 4; sepertinya bukan crash total, melainkan menganggapnya sebagai koneksi yang salah lalu menutupnya. Dari sudut pandang pengguna ini tidak bagus, tetapi dalam perdebatan masih termasuk dapat diterima
Cara paling umum adalah treat-as-withdraw, yaitu memperlakukan pembaruan pengumuman rute seperti penarikan rute yang sebelumnya diumumkan. Jika pesan yang rusak begitu saja dibuang, status lama yang tidak lagi valid akan terus dipertahankan, jadi itu tidak boleh dilakukan
Ini adalah gagasan dari sejarah kuno internet pada 1980-an dan 1990-an, dan saat ini secara luas dipahami sebagai ide keliru yang menyebabkan ossification protokol dan banyak masalah keamanan
Kini banyak sistem bergantung pada perilaku itu, dan kita sedang merasakan sisi buruk dari “fitur” tersebut
Sepintas, “fitur” ini tampak seperti ide yang sangat buruk karena membuat informasi yang tidak dikenal menyebar secara membabi buta melalui sistem yang tidak memahami dampak informasi yang diteruskannya. Namun berkat fitur ini, hal-hal seperti Large Communities bisa diterapkan lebih cepat dan lebih luas, dan bisa juga dikatakan bahwa penerapan fitur BGP baru itu sendiri menjadi mungkin
Saya masih ingat harus berlarian seperti orang gila untuk memperbaiki CVE-2023-4481 di seluruh jaringan
Bug semacam ini pasti benar-benar mimpi buruk untuk ditangani, dan karena cara BGP dirancang serta diimplementasikan, memperbaiki perilaku seperti ini akan memakan waktu sangat lama
Memang sudah puluhan tahun lalu, tetapi saya pernah mengembangkan fitur BGP di sebuah vendor perangkat telekomunikasi
Saya masih berpikir BGP terlalu rumit, orang-orang terus menambahkan fitur baru, dan para vendor terus mengimplementasikannya berdasarkan standar RFC atau draf
Sepertinya BGP tidak akan dipensiunkan, jadi bug seperti ini tampaknya akan terus ditemukan berulang kali ke depannya
Secara pribadi, itu rumit sampai menakutkan, tetapi bagi sebagian pihak cukup menguntungkan
HGC Global Communications Limited adalah perusahaan yang sebelumnya dikenal sebagai Hutchison Global Communications Limited, penyedia layanan internet di Hong Kong
https://en.wikipedia.org/wiki/HGC_Global_Communications
Sasis IOS XR kami juga menerima sebagian paket seperti ini, dan waktunya bertepatan dengan iklan rute BGP yang tinggi. Terus terang saya tidak tahu perangkat apa yang dipakai upstream
Saya jadi penasaran apakah protokol BGP benar-benar sedang di-fuzzing dengan layak. Mungkin ini bidang yang terlalu penting sehingga semua orang takut mencoba merusaknya
Menulis fuzzer BGP mungkin mudah, tetapi mendiagnosis penyebab crash tampaknya akan sangat sulit
Saya rasa saya tidak pernah mempelajari BGP sampai mendengar bahwa ia menimbulkan masalah. Meski sama pentingnya bagi internet seperti TCP/IP, TCP/IP dipelajari di kampus, ditemui sepanjang karier, dan banyak dibahas di buku, sedangkan BGP hampir tidak pernah saya temui di kampus, kantor, maupun buku
TCP/IP bisa dipelajari dengan “bermain-main” lewat proyek mainan di rumah, tetapi saya tidak tahu harus mulai dari mana untuk BGP. Bagaimana cara belajar BGP di rumah?
Artikel ini menyebut bird, dan ada juga implementasi yang sangat populer bernama FRR (free range routing). Menjalankan dua kontainer Docker, membuat sesi BGP di antara keduanya, lalu misalnya menyebarkan rute statis yang dikonfigurasi secara internal itu sangat mudah
Jika suka tutorial berpemandu, https://blog.ipspace.net/2023/08/bgp-labs-basic-setup/ cukup bagus dan berkembang hingga topik yang sedikit lebih lanjut. Semua yang dibutuhkan untuk mengikutinya adalah perangkat lunak bebas
Cara termudah untuk mendapatkan pengalaman langsung dengan teknologi networking apa pun mungkin adalah GNS3
[1]: https://wiki.dn42.us/home
Salah satu cara untuk bereksperimen adalah ini: https://www.eve-ng.net/
Cara lain adalah membuat beberapa mesin virtual dengan beberapa antarmuka jaringan, menyusun jaringan di antara mereka, lalu memakai daemon routing BGP
https://bird.network.cz/
https://www.nongnu.org/quagga/
dan sejenisnya
Kami memakai paket Python untuk mensimulasikan beberapa AS, tetapi saya tidak ingat paket yang mana
Untuk bereksperimen dengan BGP, Anda bisa memakai simulator jaringan seperti penulis artikel ini. Di kelas, kami memakai gini[1], yang sepertinya dibuat oleh mahasiswa pascasarjana dosen kami, dan penulis tampaknya memakai gns3, yang terlihat seperti versi ns3 khusus Cisco. Saya pernah mencoba ns3 sekali, dan kurva belajarnya curam. Simulator gini memiliki antarmuka pengguna yang lebih mendasar, tetapi mungkin fiturnya juga kurang kuat
[1] https://citelab.github.io/gini5/
[2] https://docs.gns3.com/docs/
Sepertinya BGP akan jauh lebih stabil jika berbagai vendor perangkat keras sepakat pada cara standar untuk menangani hal semacam ini
Apakah masalah sebenarnya adalah tiap vendor menginginkan efek lock-in sehingga tidak melakukan standardisasi?
Namun, pemahaman saya tentang BGP dangkal dan terbatas, dan saya bukan ahli
Melihat dampak bug semacam ini, mengejutkan bahwa tidak ada konsorsium yang memiliki suite pengujian interoperabilitas
Mungkin saja ada, tetapi masalah khusus ini tidak ada di suite pengujian tersebut. Kalau begitu, mengejutkan juga bahwa mereka tidak membuat kasus uji dengan menelusuri semua kemungkinan kesalahan paket menggunakan fuzzer atau metode yang dihasilkan mesin. Tidak masalah jika menjalankan suite itu memakan waktu berjam-jam atau berhari-hari
Penulis artikel ini membuat fuzzer dengan tingkat cakupan tertentu, dan tampaknya pernah menemui masalah serupa sebelumnya. Mengejutkan bahwa para vendor tidak secara aktif mengadopsi pekerjaan ini
Beberapa vendor pernah mengalami bug ini di masa lalu: https://www.kb.cert.org/vuls/id/347067
Ada CVE-2023-4481 (Juniper), CVE-2023-38802 (FRR), CVE-2023-38283 (OpenBGPd), CVE-2023-40457 (EXOS)
Saat itu Arista tidak terdampak
Saya bertanya-tanya apakah ada hal lain yang sebesar pipa internet dan memiliki kompleksitas tak disengaja yang begitu rumit ala Bizantium