Foundationপ্রথম নীতি থেকে
LEVEL 10 · Computer Security

Allocation-Size Overflow

অ্যালোকেশন-সাইজ ওভারফ্লো

count * element_size-জাতীয় একটা allocation-size গণনা representation-এর সীমা ছাড়িয়ে wrap করলে malloc() একটা বিপজ্জনকভাবে ছোট buffer ফেরত দেয়, অথচ পরের কোড আগের, unwrapped আকারেই লিখতে থাকে।

also: integer-overflow-to-buffer-overflow, size-calculation-overflow

size = count * element_size        ← count attacker-নিয়ন্ত্রিত
     = wrap করে একটা ছোট মান (32-bit-এ mod 2^32)
buf  = malloc(size)                ← বাস্তবেই ছোট buffer পায়
লেখা হয় মূল, unwrapped count অনুযায়ী   ← buf-এর সীমা ছাড়িয়ে যায়
  • CWE-190 (Integer Overflow or Wraparound)-এর ক্লাসিক উদাহরণ; malloc() নিজে কোনো ভুল করে না, ভুলটা তাকে দেওয়া size-এই
  • CVE-2021-3156 (sudo, “Baron Samedit”)-এর মূল প্যাটার্ন — একটা buffer-size গণনার ভুল, প্রায় এক দশক লুকানো ছিল
  • ফিক্স: malloc()-কে সংখ্যা পাঠানোর আগেই checked multiplication (__builtin_mul_overflow, C23-এর ckd_mul, Rust-এর checked_mul) দিয়ে overflow ধরা, wrap হওয়ার পরে না