
يوضح ثغرة CVE-2026-11108 المتمثلة في تجاوز عدد صحيح في محاكاة kmalloc، مما يسبب تجاوز سعة الكومة واحتمال تنفيذ تعليمات برمجية عشوائية من حجم تخصيص مُصمَّم خصيصًا.
// 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
يكتب البرنامج وحدات بايت أكثر بكثير من حجم المخزن المخصص، مما يفسد البيانات الوصفية للكومة ويؤدي على الأرجح إلى الانهيار.