Teknolojinin hızlı yükselişi, yetenekli geliştiriciler için yüksek bir talep yarattı. Açık kaynaklı yazılımlar (OSS) bu büyüyen işgücü için hayati bir araç haline gelmiştir. Şu anda çeşitli programlama dillerinde yüz binlerce köklü OSS paketi bulunmaktadır. Geliştiricilerin %90'ından fazlası tescilli uygulamalarında bu açık kaynak bileşenlerinden yararlanarak OSS'nin verimliliğini ve değer önerisini vurgulamaktadır. Önemini daha da vurgulayan küresel açık kaynaklı yazılım pazarının 2030 yılına kadar 80,7 milyar dolara ulaşması ve yıllık %16,7'lik bir büyüme oranına ulaşması beklenmektedir.
Software , dünyanın dört bir yanındaki iş operasyonlarının ayrılmaz bir parçasıdır ve bu nedenle tehdit aktörleri tarafından sıklıkla hedef alınmaktadır. 2023 yılında Uygulama Güvenliği için yapılan harcama yaklaşık 5,76 milyar dolardı ve 2024 yılında 6,67 milyar dolara ulaşacağı tahmin ediliyor. AppSec içinde, yazılım tedarik zinciri güvenliği son üç yılda önem kazanmış, en hızlı büyüyen saldırı kategorisini temsil etmiş ve büyük ihlaller ve istismarlar düzenli olarak manşetlere taşınmıştır.
Kuruluşlar genellikle risklerin çoğunun kamuya açık web uygulamalarından kaynaklandığını varsayar. Ancak bu bakış açısı son yıllarda değişmiştir. Her uygulamada bulunan düzinelerce küçük bileşen sayesinde riskler artık kod tabanının herhangi bir yerinden ortaya çıkabilmektedir. Kurumların yazılım geliştirme yaşam döngüsündeki mevcut ve yeni ortaya çıkan güvenlik açıklarına aşina olması her zamankinden daha kritik bir öneme sahip. Bu blog yazısında, Mezun Bursiyerlerimiz, HTML ve CSS'den PDF belgelerinin dinamik olarak oluşturulmasını sağlayan güçlü bir PHP aracı olan ve yaygın olarak kullanılan dompdf kütüphanesinde keşfedilen kritik bir güvenlik açığı olan CVE-2023-23924'e daha yakından bakmaktadır.
Kapsamlı bir analizle, bu güvenlik açığının teknik inceliklerini, önemli bir rol oynayan ilgili teknolojileri ve istismar sürecinin bir simülasyonunu keşfedeceğiz. Ayrıca nasıl olduğunu da inceleyeceğiz OPSWAT MetaDefender Coreözellikle de Software Bill of Materials (SBOM) motoru, bu güvenlik açığını tespit etmek ve azaltmak için kullanılabilir ve yazılım geliştiricileri ile güvenlik ekiplerinin potansiyel tehditlerden bir adım önde olmalarını sağlar.
CVE-2023-23924 hakkında arka plan
dompdf 2.0.1 sürümünde bir güvenlik açığı keşfedildi ve 2023'ün başında kamuoyuna açıklandı:
- dompdf 2.0.1'deki URI doğrulaması, SVG ayrıştırma işleminde aşağıdakiler geçirilerek atlanabilir
<image>
etiketleri büyük harflerle yazılabilir. Bu, bir saldırganın rastgele protokollerle rastgele URL'leri çağırmasına olanak tanır ve 8.0.0'dan önceki PHP sürümlerinde rastgele nesne serileştirmemeye yol açar. PHAR URL sarmalayıcı aracılığıyla bu güvenlik açığı, mevcut sınıflara bağlı olarak rastgele dosya silinmesine ve hatta uzaktan kod yürütülmesine neden olabilir. - NVD Analistleri CVE-2023-23924'e 9.8 KRİTİK CVSS puanı atamıştır.
Dompdf Güvenlik Açığını Anlama
dompdf'deki CVE-2023-23924 güvenlik açığını tam olarak anlamak için, birbiriyle yakından ilişkili iki teknolojiyi tanımak çok önemlidir: Ölçeklenebilir Vektör Grafikleri (SVG) ve PHAR dosyaları.
SVG (Ölçeklenebilir Vektör Grafikleri), hafif ve ölçeklenebilir kalırken web üzerinde yüksek kaliteli grafikler oluşturma yeteneği nedeniyle yaygın bir popülerlik kazanmış çok yönlü bir görüntü formatıdır. Raster görüntülerin aksine, SVG'ler XML işaretlemesine dayanır ve çizgiler, şekiller ve metin gibi öğeler üzerinde hassas kontrol sağlar. SVG'lerin en önemli avantajlarından biri, görüntü kalitesini kaybetmeden sorunsuz bir şekilde ölçeklenebilmeleridir, bu da onları duyarlı web tasarımı ve yüksek çözünürlüklü ekranlar için ideal hale getirir.
PHAR (PHP Arşivi), JAR dosyası konseptine benzer ancak PHP içindir. Tüm PHP kod ve kaynak dosyalarını tek bir arşiv dosyasında toplayarak kolay dağıtım sağlar.
Bir PHAR dosyası 4 bölümden oluşur:
- Taslaklar: arşivi önyüklemek için kod içerir.
- Manifest: arşivin meta verilerini içerir. Meta veriler serileştirilmiş biçimde saklanır ve bu da kötü amaçlı bir PHAR dosyasında PHP serileştirme saldırısını tetiklemek için kullanılabilir.
- Dosya içeriği: PHP kodu, kaynak dosyaları dahil olmak üzere arşivin içeriğini içerir.
- İmza (İsteğe bağlı): dosya bütünlüğünü doğrulamak için veri içerir.
Meta verilerin serileştirilmiş biçimde saklanması nedeniyle, PHAR sarmalayıcısının ve PHAR dosyasının meta verilerinin kombinasyonu, aşağıdaki gibi PHP işlevlerinde girdi olarak kullanıldığında potansiyel olarak bir serileştirme saldırısını tetikleyebilir file_get_contents(), fopen(), file(), file_exists(), md5_file(), filemtime(),
veya filesize()
. Bu güvenlik ihmali, saldırganların bir PHAR dosyası aracılığıyla uzak kod çalıştırmasına olanak sağlayabilir.
Dompdf PDF Dosyasını Nasıl Oluşturur?
OPSWAT Lisansüstü Bursiyerleri, analiz yoluyla dompdf'de dönüştürme işlemi sırasında üç aşama olduğunu tespit etti. Bir HTML dosyasını PDF formatına dönüştürmek için, dompdf kütüphanesi ilk olarak girdi dosyasını bir DOM ağacına ayrıştırır ve her nesnenin konumlandırma ve düzen bilgilerini depolar. Ardından, CSS stilleri ayrıştırılır ve her nesneye uygulanır. Son olarak, nesneler sayfaya sığacak şekilde yeniden düzenlenir ve nihai PDF dosyasına dönüştürülür.
Güvenliği artırmak için dompdf, bir sonraki adıma geçmeden önce URI girdilerinin güvenliğini sağlamak için doğrulama uygular. Bu doğrulama işlemi, SVG dosyasının işlenmesi sırasında xlink:href
nitelik.
Eğer SVG giriş dosyası <image>
etiketi altında <svg>
etiketinde, yalnızca aşağıdaki gibi belirli protokollere izin vermek için bir koşul uygulanır http://
, https://
ve file://
için xlink:href
Alan.
Bu resolve_url()
fonksiyonu URI'yi işlemeden önce doğrulayacaktır. drawImage()
işlevini yerine getirir. URI'deki şema izin verilen protokoller arasında değilse resolve_url()
işlevi uygulamaya bir istisna döndürecektir.
URI doğrulamayı geçerse, daha sonra drawImage()
fonksiyonunu kullanan file_get_contents()
fonksiyonu içinde URI değerini işlemek için xlink:href
özniteliği. Güvenlik açığı bu noktada ortaya çıkar: bir saldırgan doğrulamayı atlayabilir ve URI'ye bir PHAR sarmalayıcı geçirebilirse bir PHAR serileştirme saldırısı tetiklenebilir.
Analizden sonra, doğrulamanın yalnızca tam ad resmine sahip etiketler üzerinde uygulandığı keşfedilmiştir.
Sonuç olarak, etiket adında Image gibi bir veya daha fazla karakterin büyük harfle yazılmasıyla kolayca atlatılabilir. Sonuç olarak, image yerine Image kullanan özel olarak hazırlanmış bir SVG dosyası bu doğrulamayı atlatabilir.
Bir sonraki adımda drawImage()
fonksiyonu çağrılır ve SVG dosyasındaki URI file_get_contents()
işlevini kullanabilir. Bu nedenle, doğrulama baypası ve PHAR dosyasına yönelik bir deserialization saldırısının birleşimi, bir saldırganın Uzaktan Kod Yürütme gerçekleştirmesine olanak tanır. Bu güvenlik açığı, kötü niyetli bir saldırganın, dompdf'nin savunmasız bir sürümü tarafından işlenmesi durumunda bir SVG dosyası aracılığıyla uygulama sunucusunu tehlikeye atmasına kapı açar.
Dompdf İstismar simülasyonu
Bu istismarı gerçek dünya senaryosu olarak simüle etmek için OPSWAT Graduate Fellows, dompdf kütüphanesinin 2.0.1 sürümünü kullanarak HTML'den PDF'e dönüştürme özelliğine sahip bir web uygulaması geliştirdi. Bu uygulama, kullanıcıların HTML, XML veya SVG gibi dosya türlerini yüklemelerine ve ardından bunları PDF dosyalarına dönüştürmelerine olanak tanır.
Bir saldırgan, savunmasız bir dompdf sürümü (sürüm 2.0.1) kullanan bir uygulamada bu güvenlik açığından yararlanmak için aşağıdaki adımları izleyecektir:
İlk olarak, bir saldırgan, yıkıcı çağrıldığında ters kabuk oluşturan kötü amaçlı bir nesne oluşturur.
İkinci olarak, saldırgan kötü amaçlı meta veri nesnesini içeren bir PHAR dosyası oluşturur. PHAR dosyası PHAR sarmalayıcı tarafından çağrıldığında file_get_content()
fonksiyonu ile metadata unserialize edilir ve belirtilen nesne işlenir. Bu deserialization işlemi sırasında destructor'ları tetikler ve reverse shell'i çalıştırır.
Nihayetinde, saldırgan PHAR sarmalayıcısını içeren URI bağlantısını xlink:href
özniteliğini kullanarak doğrulamayı atlatabilir, kötü amaçlı kod çalıştırabilir ve bu kötü amaçlı dosyayı uygulamaya yükleyebilirsiniz.
Yüklenen kötü amaçlı SVG dosyasının işlenmesi sırasında, uygulama saldırganla ters bağlantı kurarak uygulama sunucusunu tehlikeye atmalarını sağlar.
Açık Kaynak Bileşenlerinin Güvenliğini Sağlama OPSWAT MetaDefender Core
dompdf'deki CVE-2023-23924 güvenlik açığını tespit etmek ve azaltmak için Mezun Araştırmacılarımız, SBOM da dahil olmak üzere gelişmiş kötü amaçlı yazılım önleme ve tespit teknolojileri sunan çok katmanlı bir siber güvenlik ürünü olan OPSWAT MetaDefender Core 'u kullandılar.
OPSWAT SBOM, kaynak kodu ve konteynerler için kapsamlı bir bileşen envanteri sağlayarak yazılım tedarik zincirini güvence altına alır. OPSWAT SBOM, dompdf kütüphanesini ve bağımlılıklarını analiz ederek güvenlik açığı bulunan 2.0.1 sürümünün varlığını hızlı bir şekilde tespit edebilir ve kullanıcıları potansiyel riske karşı uyarabilir.
Ayrıca OPSWAT SBOM, CVE-2023-23924 güvenlik açığını anlamak ve azaltmak için gerekli olan SVG ve PHAR dosyaları gibi ilgili teknolojileri tespit edebilir. Uygulamanın yazılım bileşenlerinin bu bütünsel görünümü, güvenlik ekiplerinin bilinçli kararlar almasını ve belirlenen riskleri ele almak için uygun eylemleri gerçekleştirmesini sağlar.
OPSWAT SBOM, güvenlik açığı bulunan dompdf sürümünü tespit etmenin ötesinde, etkilenen bileşenler, bunların sürümleri ve mevcut güncellemeler veya yamalar hakkında da değerli bilgiler sağlar. Bu bilgiler, güvenlik ekiplerinin düzeltme çabalarını önceliklendirmelerine ve uygulamanın güvenli bir dompdf sürümüne güncellenmesini sağlayarak CVE-2023-23924 güvenlik açığını etkili bir şekilde ele almalarına olanak tanır.
Kuruluşlar, MetaDefender Core adresindeki SBOM motorundan yararlanarak yazılım tedarik zincirlerini proaktif bir şekilde izleyebilir, açık kaynaklı bileşenlerdeki olası güvenlik açıklarını tespit edebilir ve zamanında hafifletme stratejileri uygulayarak uygulamalarının genel güvenliğini ve bütünlüğünü sağlayabilir.
Kapanış Düşünceleri
CVE-2023-23924'ün dompdf kütüphanesinde keşfedilmesi, uygulama güvenliğinin dinamik ortamında uyanık olmaya duyulan kritik ihtiyacın altını çizmektedir. Güvenlik ekipleri, bu blog yazısında özetlenen içgörü ve stratejilerden yararlanarak uygulamalarını bu tür güvenlik açıklarına karşı etkili bir şekilde tespit edebilir, azaltabilir ve koruyabilir, böylece yazılım ekosistemlerinin genel güvenliğini ve bütünlüğünü sağlayabilir.