Integer Overflow (Web Applications)
Reading time: 5 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Αυτή η σελίδα επικεντρώνεται στο πώς integer overflows/truncations μπορούν να καταχραστούν σε web applications και browsers. Για exploitation primitives μέσα σε native binaries μπορείτε να συνεχίσετε να διαβάζετε την αφιερωμένη σελίδα:
{{#ref}}
../../binary-exploitation/integer-overflow-and-underflow.md {{#endref}}
1. Why integer math still matters on the web
Ακόμα και αν το μεγαλύτερο μέρος της business-logic στα σύγχρονα stacks γράφεται σε ασφαλείς στη μνήμη γλώσσες, το υποκείμενο runtime (ή third-party βιβλιοθήκες) τελικά υλοποιείται σε C/C++. Όποτε αριθμοί που ελέγχονται από τον χρήστη χρησιμοποιούνται για allocation buffers, υπολογισμό offsets, ή εκτέλεση length checks, a 32-bit or 64-bit wrap-around μπορεί να μετατρέψει μια φαινομενικά αβλαβή παράμετρο σε out-of-bounds read/write, σε logic bypass ή σε DoS.
Τυπική επιφάνεια επίθεσης:
- Numeric request parameters – classic id, offset, or count fields.
- Length / size headers – Content-Length, WebSocket frame length, HTTP/2 continuation_len, etc.
- File-format metadata parsed server-side or client-side – image dimensions, chunk sizes, font tables.
- Language-level conversions – signed↔unsigned casts in PHP/Go/Rust FFI, JS Number → int32 truncations inside V8.
- Authentication & business logic – coupon value, price, or balance calculations that silently overflow.
2. Recent real-world vulnerabilities (2023-2025)
Year | Component | Root cause | Impact |
---|---|---|---|
2023 | libwebp – CVE-2023-4863 | υπερχείλιση πολλαπλασιασμού 32-bit κατά τον υπολογισμό του decoded pixel size | Προκάλεσε ένα Chrome 0-day (BLASTPASS στο iOS), επέτρεψε remote code execution μέσα στο renderer sandbox. |
2024 | V8 – CVE-2024-0519 | συντόμευση σε 32-bit όταν αυξάνεται ένα JSArray οδηγεί σε OOB write στο backing store | Remote code execution μετά από μια μόνο επίσκεψη. |
2025 | Apollo GraphQL Server (unreleased patch) | 32-bit signed integer που χρησιμοποιήθηκε για first/last pagination args; αρνητικές τιμές τυλίγονται σε τεράστιες θετικές | Παράκαμψη λογικής & εξάντληση μνήμης (DoS). |
3. Testing strategy
3.1 Boundary-value cheat-sheet
Αποστέλλετε ακραίες signed/unsigned τιμές οπουδήποτε αναμένεται ακέραιος:
-1, 0, 1,
127, 128, 255, 256,
32767, 32768, 65535, 65536,
2147483647, 2147483648, 4294967295,
9223372036854775807, 9223372036854775808,
0x7fffffff, 0x80000000, 0xffffffff
Άλλες χρήσιμες μορφές:
- Hex (0x100), octal (0377), scientific (1e10), JSON big-int (9999999999999999999).
- Πολύ μεγάλες αλυσίδες ψηφίων (>1kB) για να προκαλέσουν σφάλματα σε custom parsers.
3.2 Πρότυπο Burp Intruder
§INTEGER§
Payload type: Numbers
From: -10 To: 4294967300 Step: 1
Pad to length: 10, Enable hex prefix 0x
3.3 Fuzzing libraries & runtimes
- AFL++/Honggfuzz με libFuzzer harness γύρω από τον parser (π.χ., WebP, PNG, protobuf).
- Fuzzilli – fuzzing με επίγνωση γραμματικής των JavaScript engines για να χτυπήσει integer truncations στο V8/JSC.
- boofuzz – fuzzing πρωτοκόλλων δικτύου (WebSocket, HTTP/2) με έμφαση σε πεδία μήκους.
4. Μοτίβα εκμετάλλευσης
4.1 Παράκαμψη λογικής σε server-side κώδικα (παράδειγμα 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 Heap overflow via image decoder (libwebp 0-day)
Ο WebP lossless decoder πολλαπλασίαζε το image width × height × 4 (RGBA) μέσα σε ένα 32-bit int. Ένα crafted αρχείο με διαστάσεις 16384 × 16384 προκαλεί overflow στον πολλαπλασιασμό, δεσμεύει έναν μικρό buffer και στη συνέχεια γράφει ~1GB αποσυμπιεσμένων δεδομένων πέρα από το heap – οδηγώντας σε RCE σε κάθε Chromium-based browser πριν την 116.0.5845.187.
4.3 Browser-based XSS/RCE chain
- Integer overflow στο V8 παρέχει arbitrary read/write.
- Escape the sandbox με δεύτερο bug ή κλήση native APIs για να εγκατασταθεί ένα payload.
- Το payload στη συνέχεια εισάγει ένα κακόβουλο script στο origin context → stored XSS.
5. Οδηγίες άμυνας
- Use wide types or checked math – π.χ. size_t, Rust checked_add, Go math/bits.Add64.
- Validate ranges early: απορρίψτε οποιαδήποτε τιμή εκτός του business domain πριν από αριθμητικές πράξεις.
- Enable compiler sanitizers: -fsanitize=integer, UBSan, Go race detector.
- Adopt fuzzing in CI/CD – συνδυάστε coverage feedback με boundary corpora.
- Stay patched – browser integer overflow bugs συχνά weaponised μέσα σε λίγες εβδομάδες.
Αναφορές
- NVD CVE-2023-4863 – libwebp Heap Buffer Overflow
- Google Project Zero – "Understanding V8 CVE-2024-0519"
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.