CVE-2021-31667
Bismillâhirrahmânirrahîm
Son zamanlarda merak edilen Ghidra aracı ile birkaç analiz yapmak hem de çok detaya girmeden yeni nesil ‘Web Application’ kategorisine bir nebze de olsa katkıda bulunmak amacıyla bu yazıyı yazmak istedim. Bugün incelenecek olan yazılım ise Lumenvox uygulaması. Uygulamaya ait olan web arayüzünü Ghidra yardımıyla analiz edecek ve bulduğumuz sonuçları deneyerek sömürgeç haline getireceğiz.
Lumenvox Linux kurulumu için gerekli dosyaların elde edilmesiyle CentOS üstüne kurulum gerçekleştirildikten sonra binary dosyaları için işlemleri başlatabiliriz.
Yukarıda gördüğünüz üzere “elf” dosyalarımız kurulumdan sonra bu şekilde “/usr/bin” altında toplanacak. Biz burada web arayüzü için işlem yapacağımızdan dolayı “lv_manager” kendi makinemize alıyoruz ve Ghidra ile işlemi başlatıyoruz.
Ekranımız yukarıda gördüğünüz haliyle ham şekilde olacak ve arayüzümüzün dikkat çeken bol parametreli tarafları için araştırmalarımıza başlayabiliriz.
Lumenvox ürününün paneli default olarak açık şekilde geliyor. Biz de bu paneli derinlemesine analiz etmek ve parametreleri araştırmak için kısa süreli incelemelerden sonra yukarıdaki sayfaya ulaşıyoruz
Bu sayfa genel olarak backup işlemleri ve disk dahilinde atılacak olan adımları barındırıyor.
Run Diagnostic Tests adlı fonksiyonu çağırdığımızda karşımıza default olarak ayarlanmış yönetimsel ve bu minvalde bilgiler geliyor.
Backup Config To Disk ise varolan ayarları saklamak üzere tanımlamış bir fonksiyon, isterseniz nasıl işlediğini görelim;
Defined Data tanımlanan parametreleri kolay şekilde çıkartabilmek için ideal bir araç. Tespit ettiğimiz fonksiyonun işlevini görelim(burada [CTRL+E] kısayol tuşuyla Decompile edebilirsiniz).
Yukarıda gördüğünüz üzere “hostname”, "config_bk"ve “time” alınarak backup dosya ismi oluşturuluyor. Oluşturulan dosyamızın dizini ve adı ise “/etc/lumenvox/www/info/localhost._config_bk_2021-04-16-19-21.zip” bu şekilde oluşuyor.
(Detaya vakıf olmak ve geliştirmek için lütfen clsBackupConfigurationManger inceleyiniz)
Send Report To Disk Gelelim bir diğer fonksiyonumuza, bu fonksiyonun çalışma mantığı ise diske rapor gönderme işlevidir. Bir adet rapor üretilir ve bu rapor diske kaydedilerek orada tutulur.
Şimdi bir de Ghidra ile nasıl işlevler gerçekleştirdiğini görelim;
Yukarıda ardışık şekilde bulunan fonksiyonlar önce kullanıcıdan gelecek değerleri alacak(isim,mail vb) sonrasında ise eklenen eklerle birlikte servera gönderecek. Evet kodu okuya okuya gidelim biraz;
__fd = mg_get_var(pvVar21,lVar15,0x60d8d3,paVar26,lVar15);
if (__fd < 1) {
/* try { // try from 004fcf7d to 004fcf93 has its CatchHandler @ 004fd2d9 */
LogAppEvent(0xb,8,"save_report","Missing parameter : Company");
Value(local_1a58,"Missing Parameter: Company");
/* try { // try from 004fcfa1 to 004fcfb5 has its CatchHandler @ 004fcfe5 */
this_02 = (Value *)operator[](local_1e58,"Result");
operator=(this_02,local_1a58);
~Value(local_1a58);
}
else {
operator=(abStack1632,(char *)paVar26);
*paVar26 = (allocator)0x0;
__fd = mg_get_var(pvVar21,lVar15,0x60d90a,paVar26,lVar15);
Yukarıda görülen Decompile edilmiş değer, “Company” parametresinin giriş şartlarını sağlamadığı takdirde “Missing Parameter” ile günlüğü log düştüğünü ve bunun neticesinde “Value” değerinin bu eksikliği belirttiğini görüyoruz. ilgimizi çeken "__fd(file descriptor) değişkeninin ise “mg_get_var” ile çağırılarak işlendiği ve hata olması durumunda if koşuluna değilse else ile devam ediyor olması.
Ardışık görsellerin bize anlattığı; dosyanın diske yazıldığı ve bu yazım sırasında içeriğin işlendiğidir. Bir önceki imajlardan yola çıkarak decompile edilen kod bloğunun altına inerek geçici bir dizin oluşturulduğu ve bu dizinin içine işlenen geçiçi değerlerin silindiğini göreceksiniz. Burada ise dikkatimizi çeken bir fonksiyon var “rmdir”, korumasız şekilde direkt olarak tanımlanan ve parametreye adapte edilen değişkene, dışarıdan müdahale edilmesi olasıdır.
Deneyelim ve görelim;
Kaynaklar:
https://man7.org/linux/man-pages/man2/rmdir.2.html 8
Ghidra Software Reverse Engineering for Beginners | Packt 3
Detect potentials bugs in your code or program and develop your own tools using the Ghidra reverse engineering framework developed by the NSA projecthttps://www.lumenvox.com/knowledgebase/index.php?/article/AA-00628/0/Linux-Installation.html 6
Eğitim amaçlıdır.
For Educational Purposes Only