Quality vs Quality
White House bile yanılıyor olamaz 👍
Sanki Node.js sıfır güvenlik açığı ile çalışan bir sistem gibi yorumlar çok güldürüyor bu tarz yorumlar. Amaca göre programlama dili kullanılır herşey fiyat/fayda üzerine kurulur.
Vibecoderlar tarafından tapılan Node.js' deki şimdiye kadar ortaya çıkan önemli açıklar, yüzlercesi daha var bakabilirsiniz.
Cpanelde olan açığı bile php üzerine yıkarak hiçbir yere varamazsınız vibecoderlar 🤣
1. HTTP İstek Kaçakçılığı ve Ayrıştırma Açıkları (HTTP Request Smuggling / Parsing)
Node.js'in dahili HTTP ayrıştırıcısı (llhttp ve eski http-parser) üzerinde en sık yama alan kategoridir.
- CVE-2019-15605 / CVE-2020-8201: Transfer-Encoding ve Content-Length başlıklarının hatalı yorumlanması. Ters vekil sunucular (Nginx, AWS ALB vb.) ile Node.js arasındaki ayrıştırma farkı nedeniyle araya sahte HTTP istekleri enjekte edilmesine (Request Smuggling / Cache Poisoning) yol açtı.
- CVE-2023-30589: Boşluk karakterleri ve satır sonu ayrıştırmasındaki kusurlar nedeniyle proxy bypass açıkları.
2. İzin Modeli ve Korumalı Alan Atlatma (Permission Model Bypass)
Node.js v20 ile deneysel olarak gelen ve dosya sistemi/ağ erişimini kısıtlayan dahili izin modelindeki sızıntılar:
- CVE-2023-32002 / CVE-2023-32006: Module._load veya fs.open çağrıları üzerinden izin modeli parametrelerini atlatıp yetkisiz dosya okuma/yazma.
- CVE-2024-21892: Linux process.binding('spawn_sync') ve dahili C++ fonksiyonları çağrılarak izin kısıtlamalarını tamamen delme.
3. Hizmet Reddi Açıkları (Denial of Service - DoS)
Node.js tek iş parçacıklı (single-threaded event loop) mimariye dayandığı için event loop'u kilitleyen açıklar felç edicidir:
- CVE-2018-12121 (Node.js Slowloris): Çok yavaş gönderilen HTTP başlıklarının sunucu belleğini tüketmesi veya bağlantıları kapatmadan kaynakları tüketmesi.
- CVE-2023-44487 (HTTP/2 Rapid Reset): HTTP/2 protokolündeki RST_STREAM paketlerinin sürekli gönderilmesiyle CPU tüketiminin %100'e fırlaması (tüm web ekosistemiyle birlikte Node.js HTTP/2 çekirdeğini de etkiledi).
- CVE-2024-22019: HTTP istek başlıklarının ayrıştırılmasında CPU'nun kilitlenmesine neden olan DoS hatası.
4. Bellek Sızıntısı ve Başlatılmamış Bellek Okuma
- Node.js new Buffer() Krizi (CVE gerektirmeyen tasarım hatası): Eski Node.js sürümlerinde new Buffer(sayı) çağrısı tahsis edilen belleği sıfırlamıyordu (zero-fill yoktu). Sunucu belleğinde kalan eski şifreler, token'lar veya özel veriler doğrudan yeni bellek bloğuna sızıyordu. Bu nedenle Buffer.alloc() ve Buffer.allocUnsafe() ayrımına gidildi.
- CVE-2022-32213 / CVE-2022-32214: llhttp katmanında geçersiz karakterlerin bellek sızıntısına ve istek ayrıştırma bozulmalarına yol açması.
5. Komut ve Kod Enjeksiyonu (Remote Code Execution - RCE)
- CVE-2024-27980: Windows işletim sisteminde child_process.spawn veya exec kullanılırken .bat ya da .cmd dosyalarının bağımsız değişkenlerinin hatalı filtrelenmesi sonucu komut satırı enjeksiyonu (Command Injection).
- CVE-2023-30581: Kod yürütme sırasında dahili main context prototiplerinin bozulmasıyla kod izolasyonunun aşılması.
6. Sertifika ve Kriptografi Kusurları (OpenSSL / TLS)
Node.js, kriptografik işlemler ve TLS bağlantıları için OpenSSL kütüphanesini gömülü olarak kullanır.
- CVE-2022-0778: OpenSSL'in geçersiz eliptik eğri (EC) parametrelerini doğrulamaya çalışırken sonsuz döngüye girmesi; TLS bağlantısı kabul eden Node.js sunucularını doğrudan çökertti.
- CVE-2024-22025: TLS handshake sırasında bellek tüketiminin kontrolsüz artışı.
7. Ekosistem ve Bağımlılık Zinciri Açıkları (npm Supply Chain)
Doğrudan Node.js çekirdeğinde olmasa da Node.js projelerini çökerten en büyük krizler:
- Prototype Pollution: lodash, extend gibi kütüphanelerdeki __proto__ manipulasyonu ile nesne prototipinin değiştirilip sunucu mantığının bozulması veya RCE elde edilmesi.
- Tedarik Zinciri Sabotajları (Örn: event-stream, ua-parser-js, node-ipc): npm paketlerinin ele geçirilip cüzdan hırsızlığı veya sistem silme kodlarının milyonlarca projeye sızması.