Progress, geçen hafta Progress Flowmon ürününe kimliği doğrulanmamış bir Komut enjeksiyonuyla ilişkili kritik bir güvenlik açığını giderdi.
Bu güvenlik açığına CVE-2024-2189 atandı ve önem derecesi 10.0 (Kritik).
Progress Flowmon, ağ trafiği, performans ve güvenlik hakkında öngörüler toplayan bir ağ izleme ve analiz aracıdır. Web uygulaması Nette PHP çerçevesini kullanıyor.
Ancak Progress, bu güvenlik açığını düzeltmek için bir güvenlik tavsiyesi yayımladı ve tüm kullanıcıları bu güvenlik açığına uygun şekilde yama yapmaya çağırdı.
Güvenlik açığını ve istismarını daha ayrıntılı açıklamak için bu güvenlik açığına ilişkin bir kavram kanıtı yayımlandı.
Is Your Network Under Attack? - Read CISO’s Guide to Avoiding the Next Breach - Download Free Guide
Kritik Flowmon Güvenlik Açığı
Araştırmacılar, “ALLOWED_TO_UNLOGGED_USERS” adlı bir diziden oluşan “AllowedModulesDecider.php” dosyasında belirtilen, kimliği doğrulanmamış uç noktaları numaralandırdılar.
Bu dizi, kimlik doğrulaması olmadan erişilebilen Flowmon modüllerini tanımlar.
İzin verilen liste modüllerinin kodu daha ayrıntılı analiz edildiğinde, “Service:Pdfs:Confluence” adı altında PDF oluşturmaya yönelik özel bir kod belirlendi.
Nette Framework’te bu modülün yolu “/service.pdfs/confluence” idi.
PDF Oluşturma Modülünün İşlevselliği
Analiz ederken “Hizmet:Pdf’ler:Confluence” modülünde, modülün hizmetin PDF oluşturma işleviyle ilişkili olduğu tespit edildi.
Bu işlevsellik, gelen istekleri işleyen ve işlemleri “PdfGenerator.generate()”ye devreden “ConfluencePresenter.php” tarafından yönetilir.
Ayrıca ConfluencePresenter.php ayrıca eklentiPath, locale ve file gibi parametreleri doğrudan kullanıcıdan alır ve herhangi bir temizleme gerektirmez.
Bu girişler ayrıca pdfGenerator.generate() işlevine ayarlar olarak aktarılacak URL’yi ve dosya çıktı dizesini oluşturmak için kullanılır.
Komut Enjeksiyon Kusuru
Daha ileri analizler, PdfGenerator.php dosyasının, sistem komutlarını yürütme ayrıcalığına sahip olan getExec.run() yöntemine çağrı yapan bir created() yöntemi içerdiğini ortaya çıkardı.
Aslına bakılırsa run() yöntemi, bir argüman dizisi olarak ikinci bir argümanı da kabul eder.
Bu bağımsız değişkenler, komut enjeksiyonunu önlemenin bir yolu olarak kaçışshellarg() yöntemi kullanılarak tırnak içine alınır.
Bununla birlikte, komut bir argüman dizisi olarak değil, bunun yerine tek bir dize olarak doğrudan exec() işlevine iletilir, bu da komut enjeksiyonunun kullanımını mümkün kılar.
Sömürü
Tehdit aktörleri, bu güvenlik açığından yararlanmak için $() veya “,.txt” yerine kötü amaçlı komutlar yerleştirmek üzere eklentiPath veya dosya parametrelerini değiştirebilir.
Bu, amaçlanan komutu bozar ve rastgele komutları körü körüne yürütür; bu, bu komutun yürütülmesinin çıktısının saldırgan tarafından görülemeyeceği anlamına gelir.
Ayrıca uygulamadaki komut çalıştırma, sudo ile çeşitli komutları çalıştırabilen yükseltilmiş ayrıcalıklara sahip “flowmon” kullanıcısı tarafından gerçekleştirilir. Komutların çoğu bir kök kabuk elde etmek için kullanılabilir.
Ayrıca, bu güvenlik açığına ve kötüye kullanıma ilişkin kavram kanıtını bu GitHub deposunda bulabilirsiniz.
Bu güvenlik açığından yararlanılmasını önlemek için Progress Flowmon kullanıcılarının en son sürüme yükseltmeleri önerilir.
Combat Email Threats with Easy-to-Launch Phishing Simulations: Email Security Awareness Training ->
Try Free Demo