deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Traefik 3.6 child router izolasyonu bağımsız testte 500 sahte başlık isteğine dayandı

Bağımsız bir dev.to testi, Traefik 3.6'nın child router'ların doğrudan çağrılamayacağı iddiasını doğruladı: 500 sahte başlık isteğinin tamamı catchall'a düştü. Bir sürüm karıştırma tuzağı da ortaya çıktı.

Traefik 3.6 child router izolasyonu bağımsız testte 500 sahte başlık isteğine dayandı

Ne test edildi

Eylül 2026'da yayınlanan Traefik 3.6, çok katmanlı yönlendirme getirdi: bir parent router middleware çalıştırıyor ve yeni parentRefs alanıyla tanımlanan child router'lar yalnızca parent'ın kuralı ile middleware zinciri çalıştıktan sonra değerlendiriliyor. Traefik'in duyurusu, child router'ların doğrudan çağrılamayacağını iddia ediyor; bu, özelliği, güvenilir bir başlık belirleyen bir upstream auth adımının arkasında servisleri kontrol altında tutmak için kullanan herkes için kritik bir varsayım.

dev.to'da yayımlanan bir yazıya göre bir mühendis, sürüm notlarını olduğu gibi kabul etmek yerine bu iddiayı test etmek istedi. Test ortamı, dosya sağlayıcısı (file provider) ile Docker'da Traefik 3.6.25 ve backend'lerin yerine geçen üç whoami container'ı çalıştırdı. Bir parent router /api üzerindeki PathPrefix kuralıyla eşleşti ve koşulsuz olarak X-Role: admin belirleyen bir middleware çalıştırdı; bir child router bu başlığı bir regex ve parentRefs üzerinden eşleştirdi ve bir admin servisine işaret etti; düşük öncelikli bir catchall diğer her şeyi sundu. Yazar, gerçek bir dağıtımda başlık belirleyen middleware'in sabit bir atama yerine gerçek bir oturum açmaya dayalı bir forward-auth kontrolü olacağını belirtti.

Atlatma denemesi

Başlangıç durumu belgelerle uyumluydu: /api üzerinden gelen istekler istemcinin ne gönderdiğinden bağımsız olarak X-Role: admin taşıyordu, çünkü parent'ın middleware'i başlığı, child router onu değerlendirmeden önce üzerine yazıyordu.

Saldırı, child'ın eşleştiği başlığı, ancak parent'a hiç değmeyen bir yol üzerinde göndermekti. Child kuralı bağımsız olarak değerlendirilseydi, regex'i kökte sahte bir X-Role: admin taşıyan sade bir istekle eşleşecekti. Eşleşmedi: istek catchall servisine düştü, sanki child router onun için var olmamış gibi.

Tek bir istek, yük altındaki bir router tablosu hakkında pek bir şey kanıtlamaz; bu yüzden yazar 50 eşzamanlı worker'dan 500 istek gönderdi ve her biri /api dışındaki yollarda sahte X-Role: admin başlığı taşıyordu. Hiçbiri admin servisine ulaşmadı; 500'ün tamamı catchall tarafından karşılandı. Yazar bunu çalışmanın tek ferahlatıcı bulgusu olarak nitelendirdi: sürüm iddiası yalnızca bir belge örneğinde değil, onu gerçekten kırma girişiminde de ayakta kaldı.

Yapılandırma tuzakları

Çalışan bir kurulumuna ulaşmak üç ayrı hata modunu ortaya çıkardı:

  • Child router'lar kendi entryPoints alanlarını tanımlayamaz. Bunu yapmak "non-root router cannot have Entrypoints configuration" hatasıyla router'ı devre dışı bırakır; bir child giriş noktasını parent'tan miras alır.
  • Eşleştirici HeaderRegexp'tir, tekil. Yazarın Traefik'in kendi blog yazısının bir özetinden aldığı çoğul varyant, "unsupported function" hatasıyla başarısız olur ve yanlış fonksiyon adı değil de sözdizimi hatası gibi görünür.
  • parentRefs'teki bir yazım hatası yalnızca bozuk child'ı devre dışı bırakmaz. Servisi olmayan ve çözümlenebilir child'ları olmayan bir parent'ın yapacak bir şeyi kalmadığı için parent router'ın kendisi de hata verir. Yazarın durumunda, hatalı bir parent referansı, düzeltilene kadar /api önekinin tamamının sessizce yönlendirilmesini durdurdu.

Üç katmanlı iç içe kullanım da çalıştı: /api ile eşleşen bir grandparent, grandparent'ın belirlediği rol başlığıyla eşleşen bir parent ve parent'ın kendi middleware'inin belirlediği ikinci bir başlıkla eşleşen bir child, yalnızca üç koşul da sırayla sağlandığında doğru şekilde yönlendirildi.

Sürüm karıştırma riski

Daha keskin operasyonel bulgu, geriye dönük uyumluluk testinden geldi. Aynı dinamik yapılandırmayı önceki ara sürüm olan Traefik 3.5.6'ya yönlendirmek, yeni alanı yalnızca yok saymadı. Eski sürüm dosyanın tamamını "field not found, node: parentRefs" hatasıyla reddetti. O dosyada tanımlanan her router servis edilmez hale geldi; çok katmanlı yönlendirmeyle hiçbir ilgisi olmayan sade catchall dahil; istekler 404 yanıtlarıyla kaldı.

Operatörler için sonuç şudur: bir Traefik örnekleri filosu dinamik yapılandırmayı paylaşıyorsa ve 3.6 kademeli olarak dağıtılıyorsa, hâlâ 3.5 üzerinde olan ve parentRefs içeren bir dosyayı okuyan her örnek, o dosyanın tanımladığı yönlendirmeyi kaybeder.

Neden önemli

Başlık tabanlı yönlendirme, istemcilerin child kurallarınızın güvendiği başlıkları taklit edemeyeceği garantisi kadar güvenlidir. Bu test, Traefik 3.6'nın parent-child sınırının bu garantiyi uyguladığına dair bağımsız, karşıt kanıt sunuyor: child router'lar, parent'tan hiç geçmemiş isteklere görünmez duruyor. Özellik üzerinde auth korumalı servis grupları kuran ekipler için bu temel varsayımdır ve onu kırmaya yönelik doğrudan bir girişimden sağ çıkmıştır; yine de bu, resmi bir denetim değil, tek bir sürümdeki tek bir yapılandırmadır.

Sürüm karıştırma davranışı ise karışık filolar için pratik çıkarımdır: dinamik yapılandırma dosyasındaki bilinmeyen bir alan, eski sürümlerde o dosyadaki tüm yönlendirmeyi devre dışı bırakır; bu yüzden yapılandırma değişiklikleri ve ikili (binary) yükseltmeleri birlikte sıralanmalıdır.

  • #traefik
  • #reverse-proxy
  • #routing
  • #security
  • #docker

İlgili yazılar