# Tam Sayı Taşması (Web Uygulamaları) {{#include ../../banners/hacktricks-training.md}} > Bu sayfa, **tam sayı taşmalarının/kesimlerinin web uygulamalarında ve tarayıcılarda nasıl kötüye kullanılabileceğine** odaklanmaktadır. Yerel ikili dosyalar içindeki istismar ilkeleri için özel sayfayı okumaya devam edebilirsiniz: > > {{#ref}} > ../../binary-exploitation/integer-overflow.md > {{#endref}} --- ## 1. Neden tam sayı matematiği web'de hala önemlidir Modern yığınlardaki çoğu iş mantığı *bellek güvenli* dillerde yazılmış olsa da, temel çalışma zamanı (veya üçüncü taraf kütüphaneler) nihayetinde C/C++ ile uygulanmaktadır. Kullanıcı kontrolündeki sayılar tamponları ayırmak, ofsetleri hesaplamak veya uzunluk kontrolleri yapmak için kullanıldığında, **32-bit veya 64-bit sarılması, görünüşte zararsız bir parametreyi sınır dışı okuma/yazma, mantık atlaması veya DoS'a dönüştürebilir**. Tipik saldırı yüzeyi: 1. **Sayısal istek parametreleri** – klasik id, ofset veya sayı alanları. 2. **Uzunluk / boyut başlıkları** – Content-Length, WebSocket çerçeve uzunluğu, HTTP/2 continuation_len, vb. 3. **Sunucu tarafında veya istemci tarafında ayrıştırılan dosya formatı meta verileri** – resim boyutları, parça boyutları, yazı tipi tabloları. 4. **Dil düzeyinde dönüşümler** – PHP/Go/Rust FFI'de işaretli↔işaretsiz dönüşümler, V8 içinde JS Number → int32 kesimleri. 5. **Kimlik doğrulama ve iş mantığı** – sessizce taşan kupon değeri, fiyat veya bakiye hesaplamaları. --- ## 2. Son zamanlardaki gerçek dünya zafiyetleri (2023-2025) | Yıl | Bileşen | Temel neden | Etki | |------|-----------|-----------|--------| | 2023 | **libwebp – CVE-2023-4863** | Çözülmüş piksel boyutunu hesaplarken 32-bit çarpma taşması | Chrome 0-günü tetikledi (iOS'ta BLASTPASS), *uzaktan kod yürütme* izni verdi. | | 2024 | **V8 – CVE-2024-0519** | JSArray büyütülürken 32-bit'e kesilme, destekleyici depoda OOB yazmaya yol açar | Tek bir ziyaret sonrası uzaktan kod yürütme. | | 2025 | **Apollo GraphQL Server** (yayınlanmamış yamanın) | İlk/son sayfalama argümanları için kullanılan 32-bit işaretli tam sayı; negatif değerler büyük pozitiflere sarılır | Mantık atlaması ve bellek tükenmesi (DoS). | --- ## 3. Test stratejisi ### 3.1 Sınır değeri ipucu sayfası Bir tam sayı beklenirken **aşırı işaretli/işaretsiz değerler** gönderin: ``` -1, 0, 1, 127, 128, 255, 256, 32767, 32768, 65535, 65536, 2147483647, 2147483648, 4294967295, 9223372036854775807, 9223372036854775808, 0x7fffffff, 0x80000000, 0xffffffff ``` Diğer yararlı formatlar: * Hex (0x100), sekizli (0377), bilimsel (1e10), JSON büyük-tamsayı (9999999999999999999). * Özel ayrıştırıcılara ulaşmak için çok uzun rakam dizileri (>1kB). ### 3.2 Burp Intruder şablonu ``` §INTEGER§ Payload type: Numbers From: -10 To: 4294967300 Step: 1 Pad to length: 10, Enable hex prefix 0x ``` ### 3.3 Fuzzing kütüphaneleri ve çalışma zamanları * **AFL++/Honggfuzz** ile parser etrafında libFuzzer harness (örn., WebP, PNG, protobuf). * **Fuzzilli** – JavaScript motorlarının dil bilgisi farkındalığı ile fuzzing'i, V8/JSC tam sayı kesmelerine ulaşmak için. * **boofuzz** – uzunluk alanlarına odaklanan ağ protokolü fuzzing'i (WebSocket, HTTP/2). --- ## 4. Sömürü desenleri ### 4.1 Sunucu tarafı kodunda mantık atlatma (PHP örneği) ```php $price = (int)$_POST['price']; // expecting cents (0-10000) $total = $price * 100; // ← 32-bit overflow possible if($total > 1000000){ die('Too expensive'); } /* Sending price=21474850 → $total wraps to ‑2147483648 and check is bypassed */ ``` ### 4.2 Görüntü kodlayıcı aracılığıyla yığın taşması (libwebp 0-günü) WebP kayıpsız kodlayıcı, 32-bit int içinde görüntü genişliğini × yüksekliğini × 4 (RGBA) ile çarpar. 16384 × 16384 boyutlarına sahip bir dosya, çarpımı taşır, kısa bir tampon ayırır ve ardından yığının ötesine **~1GB** sıkıştırılmamış veri yazar – bu da 116.0.5845.187 öncesindeki her Chromium tabanlı tarayıcıda RCE'ye yol açar. ### 4.3 Tarayıcı tabanlı XSS/RCE zinciri 1. V8'deki **tamsayı taşması**, keyfi okuma/yazma sağlar. 2. İkinci bir hata ile kum havuzunu aşın veya bir yük bırakmak için yerel API'leri çağırın. 3. Yük, ardından köken bağlamına kötü niyetli bir betik enjekte eder → saklanan XSS. --- ## 5. Savunma yönergeleri 1. **Geniş türler veya kontrol edilen matematik kullanın** – örneğin, size_t, Rust checked_add, Go math/bits.Add64. 2. **Aralıkları erken doğrulayın**: aritmetik işlemden önce iş alanının dışındaki herhangi bir değeri reddedin. 3. **Derleyici sanitizasyonlarını etkinleştirin**: -fsanitize=integer, UBSan, Go yarış dedektörü. 4. **CI/CD'de fuzzing benimseyin** – kapsama geri bildirimini sınır verileri ile birleştirin. 5. **Yaman kalın** – tarayıcı tamsayı taşması hataları genellikle haftalar içinde silahlandırılır. --- ## Referanslar * [NVD CVE-2023-4863 – libwebp Yığın Tampon Taşması](https://nvd.nist.gov/vuln/detail/CVE-2023-4863) * [Google Project Zero – "V8 CVE-2024-0519'u Anlamak"](https://googleprojectzero.github.io/) {{#include ../../banners/hacktricks-training.md}}