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 হওয়ার পরে না