AssetNote Sürekli Güvenlik (CS) saldırı yüzeyinizi izlediğinde, aradığı şeylerden biri WebPagetest örnekleridir. WebPagetest, herhangi bir URL/ana bilgisayar için ağla ilgili metrikleri test etmenizi sağlayan bir web sitesi performans test aracıdır.
Her ne kadar temel kimlik doğrulama, settings.ini dosyasını değiştirerek etkinleştirilebilir ve anonim erişimi önlemek için önerilir. WebPagetest’in VarsetNote CS’nin tanımladığı çoğu dağıtımın tanımlanmadığı ve WebPagetest tarafından sağlanan test araçları dizisi, sunucu tarafı isteği amorcilik (genellikle SSRF olarak bilinir, ancak bu bir özelliktir. ).
Kasım 2017’de AssetNote CS, Mozilla’nın AWS ortamında aşağıdaki varlıkları keşfetti:
- wpt-vpn.stage.mozaws.net
- wpt1.dev.mozaws.net
Bunların her ikisi de WebPagetest örneklerinin kimlik doğrulaması gerektirmediği ve ilk kez CS’yi bir hata ödülünü tespit etmişti. Birlikte çalışmak Matematikkaynak kodunu denetledik ve sadece birkaç saat içinde uzaktan kod yürütülmesine yol açan bir saldırı zinciri oluşturabildik.
Keşif anında sıfır bir gün olsa da, güvenlik açığını yukarı akışta sabitlemek için Mozilla ve WebPagetest ekibi ile çalıştık. Bu blog yayınında belirtilen böceklerin yamalaştığı taahhüt, 17 Ocak 2018’de bu taahhütte itildi.
Kod tabanında dikkatimizi çeken ilk şey, keyfi fermuar dosyalarını yükleme ve çıkarma yeteneğiydi. /www/work/workdone.php. Bu komut dosyası, aşağıdaki kod snippet’inden görüldüğü gibi, 127.0.0.1 dışındaki kaynaklardan erişimi kısıtlamak için bazı mantık içeriyordu:
Buna daha sonra geri döneceğiz.
Aynı dosyada, keyfi bir fermuar yüklemek ve bilinen bir konuma ayıklamak için başka bir potansiyel vektör – mantık bulduk:
133 – 136 satırları: /www/work/workdone.php
IP’imizi 127.0.0.1’den gelebilecek olsaydık, bu vektör aracılığıyla kod yürütme alabiliriz.
Ancak, 321 satırından dolayı, düşündüğümüz kadar basit olmadığını gördük. /www/work/workdone.php:
Mantığı SecureIir İşlev 2322 – 2347 satırlarında bulunabilir. /www/common_lib.inc:
SecurderIR işlevi kod akışı sırasında daha sonra gerçekleştiğinden, web sunucusuna çıkarılan PHP dosyalarının silinmeden önce kısa bir süre erişilebildiği kullanılabilir bir yarış koşulu vardır.
Bir traceroute çalıştırılarak geçerli bir test kimliği elde edildiğinden, zincirin ilk ön tarafı oldukça kolaydı. https://google.com Webpagetest arayüzü aracılığıyla wpt-vpn.stage.mozaws.net:
Traceroute çalıştırdıktan sonra, WebPagetest bizi daha sonraki adımlarda kullanılan test kimliğini içeren bir URL’ye yönlendirdi:
Ama hala bir şekilde parodi yapmamız gerekiyordu 127.0.0.1 Bu komut dosyasındaki savunmasız işlevlere erişmek için.
Aşağıdaki mantığı kullanarak bu durumu karşılayabildik:
70 satır: /www/common.inc
Bu, uzak kullanıcıların keyfi olarak ayarlanmasına izin verdi $ _Server[“REMOTE_ADDR”] Bir göndererek Hızlı bir şekilde-IP İstek başlığı ayarlayın 127.0.0.1.
Tüm bu unsurları bir araya getirerek, nihayet kod yürütülmesi için iki güce davetsiz misafir saldırısı kurabildik.
Kötü amaçlı bir fermuar dosyası yüklemek için bir geğirme davetsiz misafiri saldırısı kullanıldı ve bir diğeri, sistemde mevcutken çıkarılan PHP dosyasına erişmeye çalıştı. O zaman yarış durumundan yararlanmaya yönelik çözümümüz, Intruder’ın ipliklerini ~ 200’e çıkarmaktı.
Bugün, Turbo Intruder gibi araçları kullanarak, gönderilen isteklerin hızı nedeniyle, bu sömürü çok daha güvenilir hale getirmek mümkündür.
Bu tekniği, aşağıdaki ekran görüntüsünde görüldüğü gibi Mozilla’da kod yürütme elde etmek için kullanabildik:
Bu güvenlik açığının ilk olarak halka açık olduğunu ve burada görülebildiğini bildirdiğimiz Bugzilla raporu.
Raporda, bu hataları yeniden yaratmak isteyen test uzmanları için yeterli olması gereken kapsamlı üreme adımları içeriyor.
Mozilla’nın Bug Bounty programının bir parçası olarak 500 dolar verildi.