From fa38a19ab5112259c92ee1460ee5515af7fb71d2 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 24 Jul 2025 16:27:35 +0000 Subject: [PATCH] Translated ['src/pentesting-web/xss-cross-site-scripting/integer-overflo --- .../integer-overflow.md | 103 +++++++++++++++++- 1 file changed, 98 insertions(+), 5 deletions(-) diff --git a/src/pentesting-web/xss-cross-site-scripting/integer-overflow.md b/src/pentesting-web/xss-cross-site-scripting/integer-overflow.md index bdb7e9b0c..abc3e0641 100644 --- a/src/pentesting-web/xss-cross-site-scripting/integer-overflow.md +++ b/src/pentesting-web/xss-cross-site-scripting/integer-overflow.md @@ -1,11 +1,104 @@ -# Tam Sayı Taşması +# Tam Sayı Taşması (Web Uygulamaları) {{#include ../../banners/hacktricks-training.md}} -Kontrol Et: +> 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}} -{{#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`, `offset` veya `count` 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 (`BLASTPASS` iOS'ta), render sandbox içinde *uzaktan kod yürütme* sağladı. | +| 2024 | **V8 – CVE-2024-0519** | `JSArray` büyütülürken 32-bit'e kesilme, arka depoda OOB yazmaya yol açar | Tek bir ziyaret sonrası uzaktan kod yürütme. | +| 2025 | **Apollo GraphQL Server** (yayınlanmamış yamanın) | `first/last` 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 kopya kağıdı + +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 `libFuzzer` kullanarak ayrıştırıcı etrafında (ö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ükseklik × 4 (RGBA) çarpar. `16384 × 16384` boyutlarına sahip bir dosya, çarpmanın taşmasına neden olur, 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 **Tam sayı 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 korpusları ile birleştirin. +5. **Yaman kalın** – tarayıcı tam sayı 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}}