Caddy 2.11.9 dirilis 5 November 2026 sebagai patch cepat di atas 2.11.8, membawa enam butir perbaikan keamanan di bagian Security fixes catatan rilis resmi. Patch ini menutup celah pada transport FastCGI, memperbaiki regresi direktori PHP yang membuat halaman seperti /wp-admin/ berakhir 404, dan menegakkan beberapa perilaku yang kini dihitung breaking change. Siapa pun yang menjalankan 2.11.8 dan menyajikan PHP lewat php_fastcgi disarankan pindah ke versi ini.
TL;DR
- Caddy 2.11.9 keluar 5 November 2026, satu hari setelah 2.11.8, isinya penambalan regresi dan keamanan.
- Enam butir Security fixes, empat di antaranya menyentuh transport FastCGI.
- Regresi 2.11.8: direktori dengan garis miring di akhir tidak lagi diarahkan ke
index.php, sehingga WordPress admin 404. envpada FastCGI sekarang menang atas header permintaan, klien tidak bisa lagi memalsukan variabelHTTP_*.- Konfigurasi
client_authyang bertentangan kini jadi error, bukan diabaikan diam-diam.
Kenapa Caddy 2.11.9 disebut patch darurat?
Karena jaraknya hanya satu hari dari rilis sebelumnya, dan isinya bukan fitur baru melainkan penambalan. Versi 2.11.8 terbit 4 November 2026, lalu 2.11.9 menyusul 5 November 2026. Catatan rilis menyebut versi ini sebagai tindak lanjut cepat untuk memperbaiki regresi yang diperkenalkan 2.11.8 dan sejumlah masalah keamanan, sebagian besar di FastCGI. Semua perubahan di dalamnya adalah backport dari branch master, ditambah beberapa tambahan kecil.
Regresi yang dimaksud ada di try_files. Pada 2.11.8, permintaan ke sebuah direktori dengan garis miring di akhir, misalnya /wp-admin/, dicocokkan ke direktori itu sendiri, bukan ke index.php di dalamnya. Akibatnya permintaan tidak pernah sampai ke PHP dan umumnya berakhir 404. Perbaikan di 2.11.9 membuat pola try_files hanya cocok dengan direktori kalau polanya diakhiri garis miring, seperti dirangkum pada pull request nomor 8352.
Efek praktisnya sempit tapi menyakitkan: panel admin WordPress, serta aplikasi lain yang menyajikan index.php lewat URL bergaris miring di akhir. Kalau Anda sempat naik ke 2.11.8 dan melihat halaman admin mendadak hilang tanpa pesan error di log PHP, ini penyebabnya, bukan masalah konfigurasi database atau plugin.
Selain regresi itu, ada satu perubahan kecil yang berguna: opsi plain_time_format untuk file_server browse. Opsi ini mengatur format waktu pada daftar direktori versi teks biasa, yaitu respons untuk permintaan dengan header Accept: text/plain. Perubahannya masuk lewat pull request 8084 dan sifatnya aditif, tidak mengubah tampilan daftar direktori HTML yang sudah ada.
Celah FastCGI apa saja yang ditutup di versi ini?
Ada empat butir yang menyentuh FastCGI, ditambah satu di lapisan adapter Caddyfile dan satu pembaruan dependensi. Yang paling relevan untuk aplikasi PHP adalah perebutan variabel HTTP_*: pada versi lama, klien bisa menimpa nilai yang Anda set lewat subdirektif env hanya dengan mengirim header permintaan bernama sama. Contoh nyatanya, header yang mengaku sebagai user bisa menggeser nilai yang dilihat aplikasi di HTTP_X_AUTH_USER.
Sejak 2.11.9, nilai yang dikonfigurasi menang. Perbaikan ini tercatat sebagai GHSA-q34h-28rj-5hjm dan masuk lewat pull request 8358. Bagi aplikasi yang selama ini bergantung pada perilaku lama, misalnya meneruskan identitas pengguna dari header ke env, urutan prioritasnya sekarang terbalik dan perlu diuji ulang sebelum dipasang di produksi.
Butir kedua menyangkut Windows: nama pendek gaya 8.3 seperti ADMINI~1 dan alternate data stream NTFS bisa dipakai menjalankan skrip yang seharusnya ditolak aturan path. Perbaikannya melanjutkan pekerjaan di 2.11.8 dan tercatat sebagai GHSA-9cr8-wmhh-39pm. Butir ketiga menutup celah garis miring terenkode dan segmen titik: path yang lolos matcher berbasis persen bisa memilih skrip berbeda dari yang benar-benar dieksekusi.
Butir keempat menyentuh HTTP/2. Field host yang dikirim bersama :authority bisa membuat aplikasi melihat host berbeda dari host yang dipakai Caddy untuk merutekan permintaan. Sejak versi ini, HTTP_HOST diambil dari host hasil routing saja. Terakhir, dependensi go-jose dinaikkan dari 4.1.5 ke 4.1.6 untuk GHSA-mgcc-cww5-fp2q.
| Celah | Dampak sebelum 2.11.9 | Perilaku setelah patch |
|---|---|---|
env FastCGI lawan header klien | Klien bisa menimpa HTTP_* yang diset admin | Nilai dari konfigurasi selalu menang |
| Nama pendek 8.3 di Windows | Skrip terlarang bisa dijalankan lewat alias | Path dengan komponen 8.3 atau titik dua ditolak |
| Garis miring terenkode | Matcher menyetujui satu skrip, skrip lain jalan | Permintaan ambigu dapat 400 |
Field host di HTTP/2 | HTTP_HOST bisa berbeda dari host routing | Host diambil dari hasil routing |
client_auth bertentangan | Kebijakan ketat dibuang diam-diam | Adapter Caddyfile menolak konfigurasi |
Apakah patch keamanan ini bisa merusak konfigurasi yang sudah jalan?
Bisa, untuk tiga pola konfigurasi tertentu. Catatan rilis menyebutnya sendiri sebagai perubahan yang berpotensi breaking kalau aplikasi Anda bergantung pada perilaku yang justru sedang diperbaiki. Jadi kalau konfigurasi Anda memanfaatkan salah satu dari tiga pola di bawah ini, uji dulu di staging sebelum menyentuh server produksi.
Pertama, dua blok situs yang berbagi kebijakan koneksi TLS untuk hostname yang sama tetapi memasang client_auth berbeda. Dulu adapter Caddyfile menyimpan yang pertama dan membuang yang kedua tanpa suara, yang artinya syarat mTLS yang lebih ketat bisa hilang tanpa jejak. Sekarang kombinasi itu ditolak, jadi Anda akan menerima error saat memuat konfigurasi, bukan sesudah trafik berjalan.
Kedua, permintaan FastCGI yang ambigu soal skrip mana yang dijalankan. Ada dua kasus: ketika path terenkode dan path terdekode memilih skrip berbeda, dan di Windows ketika path mengandung nama pendek 8.3 atau titik dua. Keduanya sekarang dijawab dengan status 400. Kalau aplikasi Anda menerima path aneh dari klien dan selama ini tetap jalan karena kebetulan cocok, permintaan semacam itu akan gagal setelah upgrade.
Ketiga, prioritas env terhadap header. Kalau aplikasi Anda selama ini mengandalkan klien untuk mengirim nilai tertentu lewat header dan nilai itu dipakai sebagai HTTP_* di PHP, sekarang nilai dari konfigurasi yang berlaku. Solusinya bukan menambal Caddy, tapi memindahkan logika itu ke lapisan aplikasi atau menyesuaikan nilai env sesuai kebutuhan.
💬 Komentar (0)
Belum ada komentar. Jadilah yang pertama! 💬