Popüler öğrenme platformu Moodle’da, kullanıcı girdilerinin uygunsuz şekilde temizlenmesi sonucu sisteme kötü amaçlı kod enjekte edilmesine olanak tanıyan, uzaktan kod yürütülmesine olanak tanıyan kritik bir güvenlik açığı bulunduğu tespit edildi.
Saldırganlar mevcut temizleme mekanizmalarını atlatıp sunucuda keyfi PHP kodu çalıştırmayı başardılar.
Moodle, 10 Ağustos 2024’te söz konusu güvenlik açığına yönelik 4.4.2, 4.3.6, 4.2.9 ve 4.1.12 sürümlerindeki yamaları yayınladı.
Yaygın olarak kullanılan bir öğrenme yönetim sistemi olan Moodle, çevrimiçi öğrenmeyi kolaylaştırmak için tasarlanmıştır ve Moodle’ın en önemli özelliklerinden biri, kıvırcık parantez içinde yer alan değişkenleri (joker karakterleri) kullanarak farklı sayısal sorular oluşturan sınavlar için hesaplanmış sorular üretebilmesidir.
Yapılan penetrasyon testi, bu özellikte bir güvenlik açığını ortaya çıkardı ve potansiyel saldırganların hesaplanan soruları istismar ederek kötü amaçlı kod yürütmesine olanak tanıdı.
Moodle, eğitmenlerin hesaplanmış sorularda cevap kontrolü için formüller tanımlamasına olanak tanır. Şaşırtıcı bir şekilde, bu formüller, keyfi kodu çalıştırmak için kullanılabilen eval() fonksiyonu kullanılarak değerlendirilir.
Free Webinar on Detecting & Blocking Supply Chain Attack -> Book your Spot
Yerinde bazı temel doğrulamalar var (muhtemelen geçmişteki güvenlik açıkları nedeniyle), ancak geçerse, herhangi bir dize doğrudan eval()’a beslenir. Zorluk, doğrulamayı atlatan ve yürütülebilen kötü amaçlı kod enjekte eden bir formül oluşturmaktır.
`question/type/calculated/questiontype.php` dosyasındaki doğrulama fonksiyonu, PHP yorumları için formül girdisini kontrol eder ve izin verilen matematiksel fonksiyonları kısıtlar.
Değişkenleri 1.0 ile değiştirir ve formülü, düzenli ifadeler kullanarak yapısını doğrulamadan önce küçük harfe dönüştürür.
Fonksiyon, doğru fonksiyon argümanlarını ve operatörlerini kontrol eder ve geçersiz sözdizimi veya desteklenmeyen fonksiyonlar bulunursa bir hata mesajı döndürür.
Son kontrolde formülde sadece izin verilen operatörlerin ve sayıların kaldığı doğrulanır.
İşlev belirli türdeki kötü amaçlı kodları etkili bir şekilde engellese de, özellikle eski PHP sürümlerinde, belirli değişken manipülasyonları yoluyla istismara karşı hâlâ savunmasızdır.
Bu güvenlik açığı, saldırganların hesaplanan sorulardaki cevap formülünü manipüle ederek keyfi PHP fonksiyonlarını çalıştırmasına olanak sağlıyor.
Bir fonksiyon adı ve bir değişken içeren bir formül oluşturarak sistem, değişkeni değeriyle değiştirir ve böylece belirtilen fonksiyonu çağırır.
Bu yöntem tek sayısal parametreli fonksiyonlarla sınırlı olsa da, `phpinfo()` gibi fonksiyonlar aracılığıyla dersleri silmek veya hassas bilgileri ortaya çıkarmak için kullanılabilir.
Saldırganlar bunu, hedef ders kimliğiyle eşleşen bir değere sahip bir değişkenle hesaplanmış bir soru tanımlayarak ve ardından cevap formülünü istenen fonksiyon adını ve değişkeni içerecek şekilde değiştirerek başarabilirler.
Kırmızı Takım, PHP yorumlayıcısındaki bir sözdizimi hatasını istismar ederek Moodle’da uzaktan kod yürütme güvenlik açığı keşfetti ve süslü parantezlerin nesne özelliklerine erişmek için kullanılabileceğini, böylece tek bir sayısal parametreyle keyfi işlevlerin çalıştırılabileceğini buldu.
Cevap formülünü manipüle ederek ve değişken ikamesini önleyerek, Moodle sunucusunda keyfi komutlar çalıştırabildiler; bu durum Moodle güvenlik ekibine bildirildi ve o zamandan beri daha yeni sürümlerde düzeltildi.
Are You From SOC/DFIR Teams? - Try Advanced Malware and Phishing Analysis With ANY.RUN - 14 day free trial