Perl JSON Ayrıştırıcılardaki Kritik Tamsayı Taşması Güvenlik Açıkları

 Perl JSON Ayrıştırıcılardaki Kritik Tamsayı Taşması Güvenlik Açıkları

Genel Bakış Perl programlama dili için geliştirilmiş üç yüksek performanslı JSON ayrıştırıcıda (parser) bir dizi kritik güvenlik açığı (CVE-2025-40928, CVE-2025-40929, CVE-2025-40930) keşfedilmiştir. Bu güvenlik açıklarının tümü, özel olarak hazırlanmış bir JSON dizesini ayrıştırırken tetiklenebilen ve bir segmentasyon hatasına (segfault) ve Perl yorumlayıcısının çökmesine neden olan tamsayı arabellek taşması (integer buffer overflow) hatalarıdır. Bu, Hizmet Reddi (Denial-of-Service - DoS) saldırılarını mümkün kılar. "Belirtilmemiş diğer etkiler" ifadesi, belirli bellek düzenleri ve derleyici koşullarında (gerçekleştirilmesi daha zor olsa da) keyfi kod yürütülmesi gibi daha ciddi sonuçların potansiyelini işaret etmektedir.

Tüm güvenlik açıkları, 8 Eylül 2025'te Perl'ün CVE programının eşdeğeri olan CPANSec tarafından duyurulmuştur.


Makale 1: CVE-2025-40928 - JSON::XS 

Etkilenen Ürün: JSON::XS Etkilenen Sürümler: 4.04'ten önceki sürümler Yamanmış Sürüm: 4.04 ve sonrası Perl Modülü Bağlantısı: JSON::XS on MetaCPAN

Teknik Detay: JSON::XS, Perl için "libxsmm" C kütüphanesine dayanan popüler, yüksek performanslı bir JSON serileştirici/ayrıştırıcısıdır. Güvenlik açığı, JSON dizelerinin işlenmesinden sorumlu C kodunda, özellikle de çok sayıda Unicode kaçış dizisi (örn., \u0055) içeren bir dize için gereken arabellek boyutunu hesaplarken ortaya çıkar.

Hata, bu boyut hesaplaması sırasında gerçekleşen bir tamsayı taşmasıdır (integer overflow). Bir JSON dizesi aşırı fazla sayıda bu dizileri içerdiğinde, yapılan hesaplama (kaçış_sayısı * bir_değer + orijinal_uzunluk) bir 32-bit tamsayının tutabileceği maksimum değeri (2,147,483,647) aşabilir ve bu da değerin "sarmalanarak" (wrap around) çok küçük, negatif bir sayıya dönüşmesine neden olur.

Kod daha sonra, bu artık çok küçük ve hatalı boyuta dayanarak bir bellek arabelleği ayırır. Ayrıştırıcı daha sonra çözülmüş (unescape) dizeyi bu son derece yetersiz boyutlu arabelleğe yazmaya çalıştığında, ayrılan belleğin sonunun ötesine yazar. Bu, bitişikteki bellek yapılarını bozar ve sistem tarafından tespit edildiğinde, Perl işleminin anında çökmesine neden olan bir segmentasyon hatasıyla sonuçlanır.

Örnek Senaryo: Kullanıcı tarafından sağlanan verileri (örneğin, bir "kullanıcı biyografisi" form alanı) işlemek için JSON::XS kullanan bir Perl arka uca sahip bir web uygulaması hayal edin.

  1. Normal İşleyiş: Bir kullanıcı bir biyografi gönderir: {"bio": "Merhaba dünya!"}. Sunucu bunu sorunsuz ve hızlı bir şekilde ayrıştırır.

  2. Kötü Niyetli Saldırı: Bir saldırgan, normal bir dize yerine, özel olarak hazırlanmış bir JSON yükü (payload) gönderir. Yük, normal bir metin yerine yüz milyonlarca Unicode kaçış dizisiyle doldurulmuş bir dize içerir:

    {
     "bio": "\u0055\u0055\u0055\u0055\u0055\u0055...(milyarlarca kez tekrarlanır)..."
    }
  3. Güvenlik Açığının Tetiklenmesi: Web uygulaması bu yükü alır ve JSON::XS'in decode_json() fonksiyonuna aktarır.

  4. Çökme: Tamsayı taşması, arabellek boyutu hesaplaması sırasında meydana gelir. Ayrıştırıcı, veriyi çok küçük olan bir arabelleğe yazmaya çalışır ve bir segfault oluşur. Perl çalışan işlemi (örneğin, bir CGI betiği, bir mod_perl işçisi veya bir Starman web sunucusu alt prosesi) aniden sonlanır.

  5. Hizmet Reddi: Bu bir ön-forking web sunucusu ise, çökme bir işçi prosesini öldürür. Saldırgan bu isteği tekrar tekrar gönderebilir. Her istek başka bir işçiyi öldürür ve sonunda tüm kullanılabilir işçiler tükenerek web sitesinin meşru trafiğe cevap veremez hale gelmesine neden olur.

Azaltım: JSON::XS modülünü derhal 4.04 veya daha sonraki bir sürüme güncelleyin.

cpanm JSON::XS
# veya
cpan JSON::XS

Anında güncelleme mümkün değilse, JSON verisinin ayrıştırıcıya ulaşmadan önce web sunucusu düzeyinde (örn., Nginx'in client_max_body_size'ı) veya uygulama düzeyinde katı girdi doğrulama ve boyut sınırlamaları uygulayın.


Makale 2: CVE-2025-40929 - Cpanel::JSON::XS 

Etkilenen Ürün: Cpanel::JSON::XS Etkilenen Sürümler: 4.40'tan önceki sürümler Yamanmış Sürüm: 4.40 ve sonrası Perl Modülü Bağlantısı: Cpanel::JSON::XS on MetaCPAN

Teknik Detay: Cpanel::JSON::XS, orijinal olarak cPanel için oluşturulmuş, JSON::XS'in bir çatalıdır (fork). Güvenlik ve güvenilirliği vurgular ve genellikle orijinal JSON::XS'ten önce hata düzeltmeleri içerir. Buna rağmen, aynı türden bir tamsayı arabellek taşması güvenlik açığından bağımsız olarak etkilendiği tespit edilmiştir.

Kök neden aynıdır: Kaçış dizileriyle dolu bir JSON dizesi işlenirken gereken arabellek boyutunun yanlış hesaplanması, bir tamsayı sarmalanmasına, yetersiz arabellek ayrılmasına ve ardından bellek bozulması ve segfault'a yol açar.

Örnek Senaryo: Kullanıcı yapılandırmasının bir veritabanında JSON olarak saklandığı çok kiracılı bir SaaS platformu düşünün. Platform, bu yapılandırmayı okumak ve yazmak için Cpanel::JSON::XS kullanır.

  1. Normal İşleyiş: Bir kullanıcı profil ayarlarını kaydeder. Uygulama Perl hash referansını JSON'a serileştirir ve sorunsuz bir şekilde saklar.
  2. Kötü Niyetli Saldırı: Bir saldırgan, farklı bir API uç noktası üzerinden (örneğin, girdi doğrulaması yetersizse, görünen adını özel hazırlanmış dize olarak ayarlayarak) yapılandırma profiline kötü amaçlı bir JSON dizesi enjekte etmeyi başarır.
  3. Güvenlik Açığının Tetiklenmesi: Daha sonra, saldırgan profilini görüntülediğinde veya bir arka plan işi tüm kullanıcı verilerini işlediğinde, uygulama kötü amaçlı JSON'u veritabanından alır ve Cpanel::JSON::XS::decode_json fonksiyonuna iletir.
  4. Çökme: Tamsayı taşması tetiklenir. Veriyi ayrıştıran işlem—ister bir web işçisi, ister bir cron işi, ister bir yönetim aracı olsun—bir segfault ile çöker.
  5. Etki: Bu, bozulmuş kullanıcı kaydını işlemeye çalışan arka plan işleme işlerini veya yönetim panellerini devre dışı bırakabilir. Kötü amaçlı yük, manuel olarak kaldırılıncaya kadar veritabanında beklediğinden, bu kalıcı bir Hizmet Reddidir.

Azaltım: Cpanel::JSON::XS modülünü derhal 4.40 veya daha sonraki bir sürüme güncelleyin.

cpanm Cpanel::JSON::XS

Ayrıca, kendi uygulamanızın serileştirme sürecine güvenseniz bile, veritabanına saklamadan önce verileri her zaman doğrulayın ve zararlı kodlardan temizleyin (sanitize). Bir saldırgan doğrudan veri yazmak için başka bir yol bulabilir.


Makale 3: CVE-2025-40930 - JSON::SIMD

Etkilenen Ürün: JSON::SIMD Etkilenen Sürümler: 1.07'den önceki sürümler Yamanmış Sürüm: 1.07 ve sonrası Perl Modülü Bağlantısı: JSON::SIMD on MetaCPAN

Teknik Detay: JSON::SIMD, Perl için başka bir yüksek performanslı JSON ayrıştırıcısıdır. Temel farkı, daha da yüksek ayrıştırma hızlarına ulaşmak için SIMD (Tek Komut, Çoklu Veri) CPU talimatlarını (SSE4.2 ve AVX2 gibi) kullanmasıdır. Güvenlik açığı, yine, altta yatan C kütüphanesindeki dize kaçış çözme mantığında bulunan benzer bir tamsayı arabellek taşmasıdır.

Gelişmiş ayrıştırma tekniklerine rağmen, aritmetik güvenlik kontrollerinde aynı temel hata mevcuttu. Arabellek boyutu hesaplamasındaki sınır kontrollerinin eksikliği, onu da kuzenleriyle aynı saldırı vektörüne karşı savunmasız hale getirdi.

Örnek Senaryo: JSON::SIMD'in özellikle hız avantajları için seçildiği, JSON formatındaki log dosyalarını veya bir mesaj kuyruğundan (örn., RabbitMQ, Kafka) gelen mesajları ayrıştıran Perl ile yazılmış yüksek iş hacimli bir veri işleme hattı hayal edin.

  1. Normal İşleyiş: İşleme hattı, bir kuyruktan saniyede binlerce geçerli JSON mesajı tüketir, bunları ayrıştırır ve verileri bir veri ambarına ekler.
  2. Kötü Niyetli Saldırı: Bir saldırgan, kuyruğa mesaj yayınlama yeteneği elde eder (örn., yanlış yapılandırma veya başka bir açıktan dolayı). Özel hazırlanmış kaçış dizilerinden oluşan uzun bir dize içeren tek bir mesaj yayınlar.
  3. Güvenlik Açığının Tetiklenmesi: Hattaki bir işçi bu mesajı alır ve JSON::SIMD ile ayrıştırmaya çalışır.
  4. Çökme: Ayrıştırıcı, kötü amaçlı dize ile karşılaştığında anında çöker. Tüm işçi prosesi sonlanır.
  5. Etki: Modern bir dağıtık sistemde, bir proses çökmesi otomatik bir yeniden başlatmayı tetikleyebilir. Ancak, sorunlu mesaj genellikle (örneğin, onaylanmadığı için) tekrar kuyruğa konur. Yeniden başlatılan işçi aynı kötü amaçlı mesajı alır ve tekrar çöker. Bu bir çökme döngüsü (crash loop) yaratır ve zehirli mesaj tanımlanıp kuyruktan manuel olarak kaldırılana kadar tüm veri işleme hattını etkin bir şekilde durdurur.

Azaltım: JSON::SIMD modülünü derhal 1.07 veya daha sonraki bir sürüme güncelleyin.

cpanm JSON::SIMD

Mesaj işleme sistemleri için, tekrarlanan işlem hatalarına neden olan mesajları yakalamak ve çökme döngülerini önlemek ve kötü amaçlı yükü analiz etmek için bir "ölü mektup kuyruğu" (dead letter queue) uygulayın.


Genel Sonuç ve En İyi Uygulamalar

Bu üç CVE, Perl'e bağlanan performans odaklı C kodundaki yaygın bir zayıflığı vurgulamaktadır: sağlam tamsayı taşması korumasının olmaması. Üç bağımsız modülün aynı anda etkilenmiş olması, Perl ekosistemindeki XS (C eklentisi) kütüphanelerinde daha güvenli kodlama uygulamalarına yaygın bir ihtiyaç olduğunu düşündürmektedir.

Alınacak Önlemlerin Özeti:

  1. Derhal Güncelleyin: Perl uygulamalarınızın bu JSON ayrıştırıcılarından hangilerini kullandığını belirleyin ve bunları yamanmış sürümlerine güncelleyin.
  2. Bağımlılıkları Tara: cpan-audit gibi araçları (veya GitHub için Dependabot gibi servisleri) kullanarak kod tabanlarınızı ve uygulamalarınızı savunmasız bağımlılıklar için otomatik olarak tarayın.
  3. Savunma Derinliği:
    • Girdi Doğrulama: Gelen kullanıcı verilerine her zaman makul boyut sınırları koyun.
    • Korumalı Alan (Sandbox): Ağa dönük Perl işlemlerini (web işçileri, kuyruk tüketicileri), çöktükten sonra otomatik olarak yeniden başlatılabilecekleri bir gözetim altında (örn., systemd veya Kubernetes ile) çalıştırın.
    • İzleme: Uygulamalarınızı, bir istismar girişiminin erken göstergesi olabilecek artan proses çökme veya segfault oranları için izleyin.
Siber saldırı önleme çözümleri için, CyberHatOnline web sitesini ve ürünlerini inceleyin.


Yorum Gönder

Daha yeni Daha eski

İletişim Formu