Integer Overflow (Web Applications)
Reading time: 5 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao đŹ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositĂłrios do github.
Esta pĂĄgina foca em como integer overflows/truncations can be abused in web applications and browsers. Para exploitation primitives dentro de binĂĄrios nativos vocĂȘ pode continuar lendo a pĂĄgina dedicada:
{{#ref}}
../../binary-exploitation/integer-overflow-and-underflow.md {{#endref}}
1. Por que a aritmética de inteiros ainda importa na web
Mesmo que a maior parte da business-logic em stacks modernos seja escrita em linguagens memory-safe, o runtime subjacente (ou bibliotecas de terceiros) acaba sendo implementado em C/C++. Sempre que nĂșmeros controlados pelo usuĂĄrio sĂŁo usados para alocar buffers, computar offsets ou realizar verificaçÔes de comprimento, um wrap-around de 32-bit ou 64-bit pode transformar um parĂąmetro aparentemente inofensivo em uma leitura/escrita out-of-bounds, um bypass de lĂłgica ou um DoS.
SuperfĂcie de ataque tĂpica:
- Numeric request parameters â campos clĂĄssicos id, offset ou count.
- Length / size headers â Content-Length, WebSocket frame length, HTTP/2 continuation_len, etc.
- File-format metadata parsed server-side or client-side â dimensĂ”es de imagem, tamanhos de chunks, tabelas de fontes.
- ConversĂ”es a nĂvel de linguagem â signedâunsigned casts in PHP/Go/Rust FFI, JS Number â int32 truncations inside V8.
- Authentication & business logic â cĂĄlculos de valor de cupom, preço ou saldo que silenciosamente overflowam.
2. Vulnerabilidades reais recentes (2023-2025)
Ano | Componente | Causa raiz | Impacto |
---|---|---|---|
2023 | libwebp â CVE-2023-4863 | overflow em multiplicação 32-bit ao computar o tamanho de pixels decodificados | Acionou um 0-day no Chrome (BLASTPASS no iOS), permitindo remote code execution dentro do renderer sandbox. |
2024 | V8 â CVE-2024-0519 | truncamento para 32-bit ao crescer um JSArray leva a OOB write no backing store | Remote code execution apĂłs uma Ășnica visita. |
2025 | Apollo GraphQL Server (patch não lançado) | inteiro signed de 32-bit usado para args first/last de paginação; valores negativos se dobram para enormes positivos | Bypass de lógica e exaustão de memória (DoS). |
3. Estratégia de teste
3.1 Folha de referĂȘncia de valores-limite
Envie valores extremos signed/unsigned sempre que um inteiro for esperado:
-1, 0, 1,
127, 128, 255, 256,
32767, 32768, 65535, 65536,
2147483647, 2147483648, 4294967295,
9223372036854775807, 9223372036854775808,
0x7fffffff, 0x80000000, 0xffffffff
Outros formatos Ășteis:
- Hex (0x100), octal (0377), scientific (1e10), JSON big-int (9999999999999999999).
- Strings de dĂgitos muito longas (>1kB) para atingir parsers personalizados.
3.2 Modelo do Burp Intruder
§INTEGER§
Payload type: Numbers
From: -10 To: 4294967300 Step: 1
Pad to length: 10, Enable hex prefix 0x
3.3 Fuzzing bibliotecas & runtimes
- AFL++/Honggfuzz com um harness libFuzzer em torno do parser (por exemplo, WebP, PNG, protobuf).
- Fuzzilli â fuzzing sensĂvel Ă gramĂĄtica de engines JavaScript para atingir truncamentos de inteiros em V8/JSC.
- boofuzz â fuzzing de protocolos de rede (WebSocket, HTTP/2) focado em campos de comprimento.
4. Exploitation patterns
4.1 Logic bypass in server-side code (exemplo em 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)
O decodificador sem perdas do WebP multiplicava largura Ă altura Ă 4 (RGBA) dentro de um 32-bit int. Um arquivo forjado com dimensĂ”es 16384 Ă 16384 causa overflow na multiplicação, aloca um buffer curto e em seguida escreve ~1GB de dados descomprimidos alĂ©m do heap â levando a RCE em todo browser Chromium-based antes da 116.0.5845.187.
4.3 Browser-based XSS/RCE chain
- Integer overflow no V8 permite arbitrary read/write.
- Escape the sandbox com um segundo bug ou chame native APIs para drop a payload.
- O payload entĂŁo injeta um script malicioso no origin context â stored XSS.
5. Diretrizes defensivas
- Use tipos de maior largura ou matemĂĄtica checada â e.g., size_t, Rust checked_add, Go math/bits.Add64.
- Valide intervalos cedo: rejeite qualquer valor fora do domĂnio do negĂłcio antes da aritmĂ©tica.
- Habilite sanitizadores do compilador: -fsanitize=integer, UBSan, Go race detector.
- Adote fuzzing no CI/CD â combine feedback de cobertura com corpora de limites.
- Mantenha-se atualizado â browser integer overflow bugs sĂŁo frequentemente weaponised dentro de semanas.
ReferĂȘncias
- NVD CVE-2023-4863 â libwebp Heap Buffer Overflow
- Google Project Zero â "Understanding V8 CVE-2024-0519"
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao đŹ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositĂłrios do github.