Judge0 açık kaynaklı çevrimiçi kod yürütme sisteminde, hedef sistemde kod yürütmek için kullanılabilecek çok sayıda kritik güvenlik açığı ortaya çıktı.
Avustralyalı siber güvenlik firması Tanto Security bugün yayınlanan bir raporda, doğası gereği hepsi kritik olan üç kusurun, “yeterli erişime sahip bir saldırganın sanal alandan kaçış gerçekleştirmesine ve ana makinede kök izinleri almasına” olanak tanıdığını söyledi.
Judge0 (“yargıç sıfır” olarak telaffuz edilir), geliştiricileri tarafından aday değerlendirmesi, e-öğrenme gibi çevrimiçi kod yürütme özellikleri gerektiren uygulamalar oluşturmak için kullanılabilen “sağlam, ölçeklenebilir ve açık kaynaklı bir çevrimiçi kod yürütme sistemi” olarak tanımlanır. ve çevrimiçi kod düzenleyicileri ve IDE’ler.
Web sitesine göre hizmet, diğerlerinin yanı sıra AlgoDaily, CodeChum ve PYnative gibi 23 müşteri tarafından kullanılıyor. Proje bugüne kadar GitHub’da 412 kez forklandı.
Mart 2024’te Daniel Cooper tarafından keşfedilen ve bildirilen kusurlar aşağıda listelenmiştir:
- CVE-2024-28185 (CVSS puanı: 10,0) – Uygulama, bir saldırganın sanal alan dışında rastgele dosyalara yazmak ve kod yürütmek için kullanabileceği sanal alan dizini içine yerleştirilen sembolik bağlantıları hesaba katmaz.
- CVE-2024-28189 (CVSS puanı: 10,0) – Korumalı alan içindeki güvenilmeyen bir dosya üzerinde UNIX chown komutunun kullanılmasından kaynaklanan, CVE-2024-28185 için bir yama atlaması. Saldırgan, sanal alanın dışındaki bir dosyaya sembolik bir bağlantı (sembolik bağlantı) oluşturarak bunu kötüye kullanabilir ve saldırganın sanal alanın dışındaki rastgele dosyalar üzerinde chown çalıştırmasına olanak tanıyabilir.
- CVE-2024-29021 (CVSS puanı: 9,1) – Judge0’ın varsayılan yapılandırması, hizmeti Sunucu Tarafı İstek Sahteciliği (SSRF) yoluyla sanal alandan kaçmaya karşı savunmasız bırakır. Bu, Judge0 API’sine yeterli erişime sahip bir saldırganın, hedef makinede kök olarak korumalı alansız kod yürütme elde etmesine olanak tanır.
Sorunun kökeni, sanal alanın kurulmasından, kodun çalıştırılmasından ve yürütme sonuçlarının saklanmasından sorumlu olan “isulate_job.rb” adlı Ruby betiğinden kaynaklanıyor.
Spesifik olarak, korumalı alanda olmayan sistem üzerinde rastgele bir dosyaya yazmaya izin verecek şekilde gönderim diline dayalı olarak programı yürütmek için bir bash betiği ayarlanmadan önce dizinde sembolik bir bağlantı oluşturulmasını gerektirir.
Bir tehdit aktörü, sistemdeki komut dosyalarının üzerine yazmak ve sandbox dışında ve gönderim işini çalıştıran Docker konteynerinde kod yürütme elde etmek için bu kusurdan yararlanabilir.
Dahası, saldırgan, docker-compose.yml’de belirtilen ayrıcalıklı bayrak kullanılarak çalıştırıldığı için ayrıcalıklarını Docker kapsayıcısının dışına yükseltebilir.
Judge0’dan Herman Došilović, “Bu, saldırganın Linux ana dosya sistemini bağlamasına ve saldırganın daha sonra sisteme erişim sağlamak için dosyalar yazmasına (örneğin, kötü niyetli bir cron işi) olanak tanıyacak” dedi.
“Bu noktadan itibaren saldırgan, veritabanı, dahili ağlar, Judge0 web sunucusu ve Linux ana bilgisayarında çalışan diğer uygulamalar da dahil olmak üzere Judge0 sistemine tam erişime sahip olacak.”
Öte yandan CVE-2024-29021, Judge0’ın dahili Docker ağında bulunan PostgreSQL veritabanıyla iletişim kurmasına izin veren, böylece saldırganın veritabanına bağlanmak ve ilgili veri türünü değiştirmek için SSRF’yi silahlandırmasına olanak tanıyan bir yapılandırmayla ilgilidir. sütunlar ve sonuçta komut enjeksiyonu elde edin.
Sorumlu açıklamanın ardından, 18 Nisan 2024’te yayınlanan 1.13.1 sürümünde eksiklikler giderildi. Judge0 kullanıcılarının, olası tehditleri azaltmak için en son sürüme güncelleme yapmaları önerilir.