
kmalloc सिमुलेशन में CVE-2026-11108 पूर्णांक अतिप्रवाह (integer overflow) का प्रदर्शन करता है, जिससे हीप अतिप्रवाह और क्राफ्टेड आवंटन आकार से संभावित मनमाना कोड निष्पादन होता है।
// alloc_sim.c - Vulnerable memory allocator
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BLOCK 1024
void *my_malloc(size_t size) {
size_t total = size + sizeof(size_t); // header
if (total > MAX_BLOCK) return NULL;
void *ptr = malloc(total);
if (!ptr) return NULL;
*(size_t *)ptr = size;
return ptr + sizeof(size_t);
}
void my_free(void *p) {
if (!p) return;
size_t *header = (size_t *)(p - sizeof(size_t));
free(header);
}
int main() {
// Craft size that causes integer overflow: 0xFFFFFFFF - sizeof(size_t) + 1 wraps to small number
size_t huge = 0xFFFFFFFF; // 4GB - 1
char *buf = my_malloc(huge - sizeof(size_t) + 1); // overflow: total becomes 0?
if (buf) {
// Write far beyond allocated buffer, heap overflow
memset(buf, 'A', 1000);
printf("Wrote 1000 bytes to tiny buffer\n");
my_free(buf);
}
return 0;
}
एक कस्टम मेमोरी आवंटक ओवरफ़्लो जाँच के बिना हेडर आकार जोड़कर कुल आवंटन आकार की गणना गलत तरीके से करता है। UINT_MAX के निकट एक आकार पारित करके, कुल एक छोटे मान में बदल जाता है, जिससे एक छोटा बफर आवंटित होता है लेकिन बड़ा लेखन संभव होता है, जिससे हीप अतिप्रवाह उत्पन्न होता है।
संकलन करें और चलाएँ:
gcc -o alloc_sim alloc_sim.c -fno-stack-protector
./alloc_sim
प्रोग्राम आवंटित बफर की तुलना में कहीं अधिक बाइट्स लिखता है, जिससे हीप मेटाडेटा दूषित हो जाता है और संभवतः क्रैश हो जाता है।