Gizli veri tarayıcımızdaki, kanarya kuşlarının bulamadığı hata

Teslimat

Sattığımız her paket sıkıştırılmadan önce, bir kapı (gate) kendi gizli verilerimizin gerçek değerlerini bulmak için onu tarar. Her tarama, her türden birer kanarya yerleştirerek başlar ve hepsini yakalamadıkça çalışmayı reddeder. Hepsi yakalanırdı. Yine de bir hata vardı.

Kapının gizli verileri okuma biçimi

Kapı yalnızca anahtar şeklinde görünen şeylere bakmaz. Gizli verilerimizin bulunduğu dosyaları (env dosyaları, JSON yapılandırmaları, anahtar dosyaları) okur, adı gizli olduğunu belirten her değeri alır ve ardından göndereceğimiz şeyde bu tam değerleri, olduğu gibi ve base64 kodlanmış halde arar.

Hata

Böyle bir satır için:

DB_PASSWORD='Tr0ub4dor-and-3'  # Mayısta yenilendi

okuyucu, değer hem bir tırnak karakteriyle başlayıp hem de tırnak karakteriyle bitiyorsa çevresindeki tırnakları kaldırıyordu. Değerden sonra bir yorum geldiğinde satır bir harfle bittiği için tırnaklar kalıyordu. Yorum hemen ardından kesiliyor ve kapı, tırnaklar dahil olmak üzere 'Tr0ub4dor-and-3' değerini aramaya devam ediyordu. Tırnaksız şifreyi içeren bir paket geçebilirdi.

Kanaryalar neden hiç fark etmedi

Bir kanarya bir ağı test eder: Tarayıcının zaten bildiği bir değeri yerleştirin ve bulunup bulunmadığını kontrol edin. Kanarya değerlerimiz doğrudan tarayıcıya verildi, bu yüzden yapılandırma satırını okuyan koddan hiç geçmediler. Her ağ test edildi, ancak önlerindeki ayrıştırıcı (parser) test edilmedi.

Nasıl bulduk

Kapıyı kendi başına bir ürüne dönüştürüyorduk ve insanların gerçekte yazdığı biçimlerde (export, tırnaklar, sondaki yorumlar) bir yapılandırma dosyası besleyen bir test yazdık. Test, yorum içeren tırnaklı satırda başarısız oldu. Düzeltme, tırnaklı değeri kapanış tırnağına kadar okur ve ardından gelen her şeyi yok sayar.

Önemli miydi?

Herhangi bir şeyi değiştirmeden önce kontrol ettik. Derleme makinemizde kapı, kendisine verilen 59 dosyadan 133 gizli değer okuyor ve ikinci bir makinede 499; hiçbiri bu biçimde değildi. Hiçbir önceki karar değişmiyor: Yayınladığımız her paket, şu anda taranacağı aynı değerler için taranmıştı. Yine de kapıyı üç makinede de düzelttik.

Çıkarılacak ders

Bir tarayıcı aradığını çıkarıyorsa, çıkarma işlemini gerçekçi girdilerle test edin; yalnızca önceden yerleştirilmiş değerlerle arama yapmayın. Bir kanarya, ağın çalıştığını kanıtlar; ancak doğru balıkların ağa ulaşıp ulaşmadığı hakkında hiçbir şey söylemez. Secret Gate testleri artık her iki durumu da kapsıyor ve sürüm öncesi, derleme kapımızın okuduğu tam olarak aynı 133 değeri okuduğunu doğruladık.

Güncellendi: