- Pada 8 Januari 2026, pembaruan layanan 1.1.1.1 milik Cloudflare mengubah urutan record dalam respons DNS, sehingga menyebabkan kegagalan resolusi DNS bagi sebagian pengguna di seluruh dunia
- Akar masalahnya adalah perubahan kode yang memindahkan record CNAME ke belakang record A/AAAA, sementara sebagian implementasi klien DNS bergantung pada urutan
- Secara khusus, fungsi getaddrinfo milik glibc dan proses DNSC pada switch Cisco terdampak; untuk kasus yang terakhir, bahkan terjadi loop reboot
- RFC 1034 hanya menyatakan bahwa “CNAME dapat muncul di depan (possibly preface)”, sehingga tidak ada standar yang jelas mengenai urutan record
- Cloudflare kembali ke pendekatan yang selalu menempatkan CNAME lebih dulu, dan mengajukan Internet-Draft ke IETF untuk mendefinisikan standar yang lebih jelas
1. Ringkasan insiden
- Pada 8 Januari 2026, saat pembaruan pengurangan penggunaan memori untuk 1.1.1.1 dirilis, terjadi perubahan urutan record dalam respons DNS
- Perubahan ini dimasukkan ke codebase pada 2 Desember 2025, didistribusikan ke lingkungan pengujian pada 10 Desember, dan mulai dirilis secara global pada 7 Januari 2026
- Insiden diumumkan pada 8 Januari pukul 18:19 UTC, rollback dimulai pada 18:27, dan pemulihan selesai pada 19:55
- Sebagian besar klien DNS modern mengabaikan urutan record dalam respons, tetapi beberapa implementasi mengasumsikan CNAME harus selalu muncul lebih dulu
- Ketika urutan ini berubah, sebagian klien memperlakukan respons seolah kosong, sehingga terjadi kegagalan resolusi
2. Rantai CNAME dan cara kerja cache
- Saat melakukan kueri domain, misalnya
www.example.com, nama tersebut dapat diresolusikan ke IP akhir melalui beberapa rantai CNAME
- Contoh:
www.example.com → cdn.example.com → server.cdn-provider.com → 198.51.100.1
- Setiap tautan CNAME memiliki TTL (Time-To-Live), dan sebagian di antaranya bisa saja kedaluwarsa lebih dulu
- 1.1.1.1 hanya mengkueri ulang bagian yang kedaluwarsa lalu menggabungkan cache yang ada dengan record baru untuk membentuk respons
3. Rincian perubahan kode
- Pada kode lama, rantai CNAME dimasukkan lebih dulu, lalu record A/AAAA ditambahkan setelahnya
answer_rrs.extend_from_slice(&self.records); // CNAMEs first
- Pada kode yang diubah, CNAME ditambahkan paling akhir
entry.answer.extend(self.records); // CNAMEs last
- Akibatnya, CNAME berpindah ke bagian bawah respons, dan beberapa klien gagal memprosesnya
4. Contoh implementasi yang terdampak
- Fungsi getaddrinfo milik glibc mem-parsing respons secara berurutan, sehingga CNAME harus muncul lebih dulu agar nama berikutnya bisa dilacak
- Jika CNAME muncul belakangan, “nama yang diharapkan” tidak diperbarui dan hasilnya menjadi kosong
- Proses DNSC pada tiga model switch Cisco Catalyst juga terdampak; jika menggunakan 1.1.1.1, hal ini dapat menyebabkan loop reboot akibat error fatal
- Cisco telah menerbitkan dokumen layanan terkait
5. Implementasi yang tidak terdampak
- systemd-resolved mem-parsing respons ke dalam struktur OrderedSet, sehingga bisa menelusuri seluruh himpunan tanpa bergantung pada posisi CNAME
- Karena itu, perubahan urutan record tidak memengaruhi operasinya
6. Ambiguitas RFC 1034
- RFC 1034 (1987) menyebut bahwa “respons dapat diawali (preface) oleh satu atau lebih CNAME”
- Namun, karena tidak ada kata kunci normatif seperti MUST/SHOULD, itu bukan persyaratan eksplisit
- Baru setelah RFC 2119 (1997), kata kunci semacam itu distandardisasi, sehingga dokumen lama tersebut tidak memiliki ungkapan kewajiban yang jelas
- Cloudflare memang menempatkan CNAME lebih dulu pada implementasi awal, tetapi tidak menjaminnya lewat pengujian
7. Perbedaan antara RRset dan section pesan
- RFC 1034 §3.6 menyatakan bahwa urutan RRset (himpunan record dengan nama, tipe, dan kelas yang sama) tidak penting
- Namun, tidak ada pembahasan mengenai urutan antar RRset yang berbeda
- Contoh pada §6.2.1 juga hanya membahas dua record A dengan nama yang sama, bukan urutan relatif antara CNAME dan A
- Karena itu, definisi urutan antara CNAME dan record A masih kosong
8. Masalah urutan di dalam rantai CNAME
- Jika CNAME memiliki beberapa tahap, urutan rantai itu sendiri yang tercampur juga dapat membuat parsing berurutan gagal
- Contoh: jika
cdn.example.com CNAME server.cdn-provider.com muncul lebih dulu, maka www.example.com CNAME cdn.example.com tidak akan ditemukan
- RFC 1034 juga tidak menetapkan persyaratan untuk urutan dalam rantai CNAME
9. Kriteria perilaku resolver
- RFC 1034 §5.2.2 menyatakan bahwa “resolver harus memulai ulang kueri dengan nama baru ketika menemukan CNAME”
- Namun, ini adalah penjelasan untuk resolver penuh (misalnya 1.1.1.1), sementara
stub resolver seperti glibc tidak mengimplementasikan logika tersebut
- Akibatnya, sebagian stub resolver tidak mengikuti perilaku yang diharapkan oleh RFC
10. Perbandingan dengan aturan eksplisit DNSSEC
- RFC 4035 (DNSSEC) secara eksplisit menyatakan prioritas penyertaan record RRSIG dengan kata “MUST”
- Meski begitu, itu adalah aturan tentang “apakah harus disertakan”, bukan tentang “urutan”
- DNSSEC memberikan aturan penyertaan yang jelas, tetapi pada zona unsigned ambiguitas RFC 1034 tetap ada
11. Kesimpulan dan tindakan Cloudflare
- Walaupun menurut RFC urutan CNAME bukan keharusan, sebagian klien mengandalkannya, sehingga
Cloudflare kembali ke kebijakan selalu menempatkan CNAME lebih dulu
- Untuk mencegah masalah serupa di masa depan, Cloudflare mengajukan Internet-Draft ke IETF
- Melalui insiden ini, Cloudflare menegaskan bahwa ambiguitas protokol berusia 40 tahun masih berdampak pada praktik nyata saat ini
12. Informasi tambahan
- Melalui Connectivity Cloud, termasuk 1.1.1.1, Cloudflare menyediakan
perlindungan jaringan perusahaan, akselerasi aplikasi skala internet, pertahanan DDoS, dan dukungan penerapan Zero Trust
- Aplikasi gratis 1.1.1.1 memungkinkan akses internet yang lebih cepat dan lebih aman
1 komentar
Komentar Hacker News
Saya merasa redaksi RFC itu tidak terlalu ambigu
Ungkapan “possibly preface” terbaca sebagai “jika ada record CNAME, letakkan itu dulu”, bukan berarti “kalau mau bisa ditaruh di mana saja”
Tapi ini bukan sekadar soal penafsiran kalimat, melainkan fakta bahwa tim yang mengoperasikan salah satu server DNS terpenting di dunia mengubah logika respons CNAME
Ini pasti terlihat rusak di pengujian, jadi mengejutkan bahwa tidak ada yang bertanya, “apakah urutan ini penting?”
Cloudflare belakangan cukup transparan saat mengungkap masalah, tetapi kali ini terdengar seperti “berbagi fakta menarik”
Bahwa hal seperti ini lolos pengujian di sistem berskala besar tampak seperti kesalahan yang cukup besar
Contohnya bisa digeneralisasi, sehingga ada ruang untuk salah paham menjadi “urutan tidak penting dalam semua kasus”
Pada akhirnya, “pemahaman yang jelas” menurut satu orang bisa terlihat sebagai “apa kamu benar-benar membaca dokumennya?” bagi orang lain
Kasus seperti ini menunjukkan pentingnya bahasa normatif (normative language)
Diskusi terkait bisa dilihat di milis IETF
Pernyataan “perbedaan urutan tidak penting” hanya berlaku untuk contoh tertentu itu, bukan berarti aturan umum boleh diabaikan
Meski ada klaim bahwa RFC 1034 mendefinisikan RRset, sebenarnya tidak ada definisi istilah seperti itu
Interpretasi Cloudflare tampak sebagai salah paham atas klausul pengecualian sebagai aturan umum
Namun, memang tidak ada ketentuan yang benar-benar jelas soal urutan dalam rantai CNAME, jadi sedikit ambiguitas masih tersisa
Ini tampak seperti kasus ketika Hyrum’s Law dan Postel’s Law bekerja bersamaan
Hasil benturan antara prinsip “jika pengguna API cukup banyak, seseorang akan bergantung pada setiap perilaku sistem yang bisa diamati” dan
“konservatif saat mengirim, toleran saat menerima”
Poin penting kali ini adalah resolver glibc yang rusak — ini sama sekali bukan situasi langka
Berita sebenarnya adalah Cloudflare tidak menguji dengan semestinya
Bug ini mengingatkan saya pada kenangan lama
Tahun 2011 saat Cloudflare mengabaikan RFC dan mengizinkan CNAME di apex domain
Jika melihat posting blog saat itu, mereka mengatakan akan “mengabaikan RFC dan menyelesaikan masalah dunia nyata”
Tetapi CNAME adalah konsep alias di level nama, jadi jika diletakkan di apex, caching NS, MX, dan SOA bisa rusak
Banyak engineer sudah memperingatkan waktu itu, tetapi pendekatannya adalah “move fast and break things”
Meski begitu, kali ini mereka sampai membahas detail urutan rantai CNAME dan record A, jadi tetap ada perkembangan
Konsep CNAME dan alias memang sudah lama membingungkan, dan bahasa non-normatif di RFC1034 memperparah kebingungan itu
Ini memang hasil akumulasi ambiguitas seperti itu, tetapi tetap sulit diterima bahwa penyedia layanan besar melakukan kesalahan seperti ini
Saya justru pikir spesifikasinya sendiri yang bermasalah
Mengejutkan bahwa lookup DNS umum di glibc bergantung pada urutan record
Aneh juga bahwa tidak ada masalah besar selama lebih dari 20 tahun
Mungkin sebagian besar operator DNS sudah tahu secara empiris saat pengujian bahwa urutan itu penting
Ini jadi sorotan karena mungkin baru kali ini kasusnya memengaruhi ratusan juta perangkat di seluruh dunia seperti Cloudflare
Tapi saya penasaran apakah Cloudflare kali ini mengirim patch ke resolver open source seperti glibc
CNAME memang benar-benar makhluk yang sulit ditangani (catatan DJB bisa dilihat)
Resolver sederhana seperti glibc tidak punya cache, jadi untuk menerapkannya perlu perubahan kode yang besar
Klaim Cloudflare bahwa “RFC tidak mewajibkan urutan CNAME” terdengar seperti memainkan celah bahasa
Hanya karena tidak ada kata “MUST”, bukan berarti “semua urutan boleh”
Saya rasa mengakui kesalahan dan lanjut memperbaikinya akan membuat dunia lebih baik
Menghindari tanggung jawab lewat perdebatan bahasa justru membuat kepercayaan menurun
Cloudflare tampaknya tidak benar-benar memahami RFC1034
Antarmuka DNS mereka memblokir A dan AAAA jika ada CNAME, tetapi masih mengizinkan record lain
Karena itu, saat CNAME dan TXT ada bersamaan, muncul hasil yang bergantung pada cache
internet.nl juga menemukan masalah seperti ini
Sebagian pengguna mengatur konfigurasi mengikuti panduan mxtoolbox, dan itu bertentangan dengan RFC1034
Yang satu tentang “cara mendelegasikan layanan DMARC dengan CNAME”, dan yang lain tentang “cara meng-host sendiri”
Sepertinya screenshot-nya yang menimbulkan kebingungan
Bahwa pada akhirnya Cloudflare sampai pada kesimpulan bahwa CNAME harus datang lebih dulu daripada record lain terdengar masuk akal
Saat mengelola DNS di perusahaan, saya merasakan berbagai keterbatasan DNS
Khususnya jika SERVFAIL terjadi, klien tidak bisa membedakan server mana yang bermasalah
Akibatnya, banyak server DNS dan lapisan cache memicu lonjakan retry yang tidak perlu
Selain itu, search path membuat kueri NXDOMAIN ke domain yang salah terus berulang
Menurut RFC2308 bagian 7.1, me-cache respons SERVFAIL memang diperbolehkan
Ini standar lama, tetapi masih merupakan pendekatan yang valid
Cloudflare cukup sering merusak standar, lalu membenarkannya dengan menulis RFC baru
Contoh seperti RFC 8482 menurut saya adalah aib bagi industri
Ucapan “kali ini juga kami mengajukan Internet-Draft baru untuk mencegah kebingungan” terdengar ironis
Untuk server DNS berskala besar seperti 1.1.1.1, seharusnya ada pengujian integrasi yang mencakup resolver nyata seperti glibc
Jadi saya bertanya-tanya kenapa masalah seperti ini baru ditemukan di produksi
Pengujian individual mungkin lolos, tetapi besar kemungkinan kasus saat dua kondisi itu bertumpuk terlewat