Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
OpenSovix — cve-2025-46285 إثبات مفهوم بسيط لإعادة الإنتاج | Kitploit
أدوات/GitHubGitHub/yankeelucas/opensovix
تصعيد الامتيازاتتحليل الثغرات الأمنيةتحليل الكودالاستغلالالتعلم والتعليماستغلال الملفات الثنائية
GitHubyankeelucas/opensovix

OpenSovix

cve-2025-46285 إثبات مفهوم بسيط لإعادة الإنتاج

عرض المستودع
1منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
الموقع الإلكتروني

تحليل عميق لثغرة CVE-2025-46285 وإثبات المفهوم

إخلاء مسؤولية مهم: المحتوى التالي مخصص فقط لأغراض تعليم أمن السيبراني والبحث الدفاعي وتحليل مبدأ الثغرات. يُرجى عدم اختبار هذه الثغرة أو استغلالها في بيئات غير مرخصة. قد يؤدي استغلال ثغرات النظام إلى عواقب قانونية وتلف الأجهزة.

1. تحليل عميق للثغرة

1.1 نظرة عامة على الثغرة

CVE-2025-46285 هي ثغرة فيضان عدد صحيح (Integer Overflow) في أنظمة تشغيل Apple (بما في ذلك macOS و iOS و iPadOS و tvOS و watchOS و visionOS). تكمن المشكلة الأساسية في كيفية معالجة الطوابع الزمنية (Timestamp). قامت Apple بإصلاح هذه المشكلة عن طريق إدخال طوابع زمنية 64 بت (64-bit timestamps).

  • العيب الأصلي: استخدم النظام أعدادًا صحيحة ذات عرض بت منخفض (مثل 32 بت) لتخزين أو حساب الطوابع الزمنية عند معالجة بعض البيانات المتعلقة بالوقت.
  • آلية التفعيل: عندما تتجاوز قيمة الوقت النطاق الأقصى الذي يمكن أن يمثله هذا النوع من الأعداد الصحيحة، يحدث التفاف (Wrap-around) أو فيضان، مما يؤدي إلى أخطاء في نتائج الحساب.
  • الحل: ترقية هياكل البيانات ذات الصلة ومعاملات API والحسابات الداخلية إلى أعداد صحيحة 64 بت (int64_t أو uint64_t) لدعم نطاق زمني أطول ومنع الفيضان.

1.2 شرح المبدأ التقني بالتفصيل

1.2.1 مبدأ فيضان الأعداد الصحيحة

في لغات البرمجة منخفضة المستوى مثل C/C++، يعني فيضان الأعداد الصحيحة أن نتيجة عملية حسابية تتجاوز النطاق الذي يمكن لنوع البيانات تمثيله.

  • العدد الصحيح المُوقَّع 32 بت (int32_t): القيمة القصوى هي (2^{31}-1) (2,147,483,647).
  • الارتباط بمشكلة Y2038: مشكلة الطابع الزمني 32 بت الكلاسيكية ستفيض في 19 يناير 2038 الساعة 03:14:07 بالتوقيت العالمي المنسق (UTC). ومع ذلك، يُظهر إصلاح Apple أنه حتى قبل عام 2038، قد تسبب بعض المنطقيات التجارية المحددة أو العدادات الداخلية فيضانًا 32 بت لأسباب أخرى (مثل الأخطاء التراكمية أو الضرب/الجمع في خوارزميات معينة).
  • نتائج الفيضان:
    • وقت سالب: قد يصبح الوقت سالبًا بعد الفيضان، مما يجعل النظام يعتقد أن الوقت "في الماضي"، وبالتالي تجاوز عمليات التحقق الأمنية المستندة إلى الوقت (مثل صلاحية الشهادات أو انتهاء جلسات العمل).
    • تخصيص ذاكرة غير طبيعي: إذا تم استخدام الطابع الزمني كمعامل لحجم تخصيص الذاكرة، فقد يؤدي الفيضان إلى تخصيص كتل ذاكرة صغيرة جدًا أو كبيرة جدًا، مما يتسبب في فيضان الكومة أو فيضانها السفلي.
    • أخطاء منطقية: قد يؤدي إلى دخول آلة الحالة في حالة غير متوقعة.

1.2.2 لماذا يمكن أن يؤدي إلى رفع الصلاحيات إلى الجذر؟

وفقًا للوصف: "قد يتمكن تطبيق من الحصول على صلاحيات الجذر" (An app may be able to gain root privileges). يحدث هذا عادةً عبر المسار التالي:

  • رفع الصلاحيات (Privilege Escalation): توجد الثغرة في النواة (kernel) أو في عملية خفية عالية الصلاحيات (مثل launchd أو أنظمة فرعية للنواة).
  • تجاوز عمليات التحقق الأمنية: يقوم التطبيق ببناء معاملات طابع زمني محددة تؤدي إلى فيضان عدد صحيح، مما يتسبب في حكم خاطئ من النواة عند التحقق من الصلاحيات أو صحة الوقت.
  • تنفيذ كود تعسفي: باستخدام تلف الذاكرة أو تجاوز المنطق، يتم تنفيذ شِل كود (shellcode) أو استدعاءات نظام (syscall)، مما يؤدي في النهاية إلى الحصول على صلاحيات الجذر.

1.3 شروط التفعيل

  • الإصدارات المتأثرة:
    • macOS: < 14.8.3 (Sonoma)، < 15.7.3 (Sequoia)، < 26.2 (Tahoe)
    • iOS/iPadOS: < 18.7.3، < 26.2
    • tvOS/visionOS/watchOS: < 26.2
  • متجه الهجوم:
    • هجوم محلي: يجب أن يكون التطبيق قيد التشغيل محليًا وقادرًا على استدعاء إطار النواة المتأثر أو API النظام.
    • بناء الوقت: يجب أن يكون المهاجم قادرًا على التحكم في معامل الوقت الذي يتم إدخاله إلى النظام، أو بناء قيم وقت تؤدي إلى الفيضان بشكل غير مباشر من خلال استدعاءات النظام.
  • الاعتماد على البيئة:
    • النظام لا يحتوي على آخر التصحيحات الأمنية.
    • التطبيق لديه صلاحيات كافية لتشغيل مسار النواة (عادةً ما يتطلب الهروب من وضع الحماية (sandbox) أو وجود ثغرة ذات صلاحيات منخفضة كقفزة).

1.4 نطاق التأثير

  • السرية: عالية. قد يتمكن المهاجم من الوصول إلى بيانات حساسة.
  • السلامة: عالية. قد يتمكن المهاجم من تعديل ملفات النظام أو الإعدادات.
  • التوفر: متوسط. قد يؤدي إلى تعطل النظام أو رفض الخدمة.
  • الصلاحيات: عالية جدًا. الارتقاء من مساحة المستخدم إلى مساحة النواة (جذر).

2. كود إثبات المفهوم (POC)

ملاحظة: نظرًا لأن CVE-2025-46285 تتضمن فيضانًا صحيحًا على مستوى النواة، وقد قامت Apple بإصلاحها، فلا يمكن تقديم POC مباشر يستغل أحدث الأنظمة. الكود التالي هو كود تعليمي محاكى يهدف إلى عرض مبدأ فيضان الطابع الزمني 32 بت وكيفية إصلاح المشكلة بشكل صحيح في الكود.

يُحاكي هذا الـ POC مكونًا معرضًا للثغرة لمعالجة الطوابع الزمنية ويوضح كيف يمكن أن يؤدي الفيضان إلى أخطاء منطقية.

root@kitploit:~
#include <stdio.h>
#include <stdint.h>
#include <time.h>
#include <stdlib.h>

// محاكاة لمكون نظام معرض للثغرة
// استخدام عدد صحيح مُوقَّع 32 بت لتخزين الطابع الزمني، وهو أصل CVE-2025-46285

typedef struct {
    int32_t timestamp; // نقطة الثغرة: استخدام عدد صحيح 32 بت
    int32_t duration;  // المدة
    int is_valid;      // علامة الصلاحية
} TimeSensitiveData;

/**
 * دالة معرضة للثغرة: حساب وقت الانتهاء
 * المشكلة: إذا تجاوز current_time + duration قيمة INT32_MAX، سيحدث فيضان
 * النتيجة: قد يصبح timestamp سالبًا، مما يؤدي إلى إبطال عمليات التحقق الأمنية
 */
int vulnerable_check_expiration(int32_t current_time, int32_t duration) {
    int32_t expiration_time;
    
    // محاكاة فيضان العدد الصحيح
    // إذا كان current_time قريبًا من INT32_MAX، فإن إضافة duration ستؤدي إلى الالتفاف إلى قيمة سالبة
    expiration_time = current_time + duration;
    
    printf("[Vulnerable] الوقت الحالي: %d, المدة: %d\n", current_time, duration);
    printf("[Vulnerable] وقت الانتهاء المحسوب: %d\n", expiration_time);
    
    // التحقق الأمني: إذا كان الوقت الحالي أكبر من وقت الانتهاء، فهو غير صالح
    // لكن إذا أصبح expiration_time سالبًا بسبب الفيضان بينما current_time موجب،
    // فإن current_time > expiration_time يكون صحيحًا دائمًا، مما يؤدي إلى حكم خاطئ "منتهي الصلاحية"
    // أو في بعض المنطقيات، قد يتم تفسير الوقت السالب على أنه "صالح إلى الأبد" أو تجاوز التحقق
    
    if (current_time > expiration_time) {
        return 0; // منتهي الصلاحية
    } else {
        return 1; // صالح
    }
}

/**
 * دالة مُصلحة: استخدام عدد صحيح 64 بت لمعالجة الطوابع الزمنية
 * الحل: استخدام طابع زمني 64 بت لمنع الفيضان
 */
int fixed_check_expiration(int64_t current_time, int64_t duration) {
    int64_t expiration_time;
    
    // استخدام عدد صحيح 64 بت، نطاق واسع جدًا، يكاد يكون من المستحيل حدوث فيضان
    expiration_time = current_time + duration;
    
    printf("[Fixed] الوقت الحالي: %lld, المدة: %lld\n", current_time, duration);
    printf("[Fixed] وقت الانتهاء المحسوب: %lld\n", expiration_time);
    
    if (current_time > expiration_time) {
        return 0; // منتهي الصلاحية
    } else {
        return 1; // صالح
    }
}

/**
 * محاكاة سيناريو الهجوم
 * يقوم المهاجم ببناء طابع زمني قريب من INT32_MAX، مع إضافة مدة صغيرة،
 * مما يؤدي إلى فيضان وإنتاج قيمة سالبة، وبالتالي تجاوز عمليات التحقق الأمنية المستندة إلى الوقت
 */
void demonstrate_attack() {
    printf("\n=== عرض هجوم فيضان العدد الصحيح ===\n");
    
    // تعيين وقت قريب من القيمة القصوى للعدد الصحيح 32 بت
    // INT32_MAX = 2147483647
    int32_t near_max_time = 2147483640; 
    int32_t small_duration = 10;
    
    printf("الطابع الزمني الذي بناه المهاجم: %d\n", near_max_time);
    printf("المدة التي بناها المهاجم: %d\n", small_duration);
    
    int result_vuln = vulnerable_check_expiration(near_max_time, small_duration);
    
    if (result_vuln == 1) {
        printf("[!] نجاح استغلال الثغرة: اعتقد النظام خطأً أن البيانات لا تزال صالحة!\n");
        printf("[!] السبب: 2147483640 + 10 = -2147483646 (التفاف الفيضان)\n");
        printf("[!] الوقت الحالي (%d) ليس أكبر من وقت الانتهاء (-2147483646)، لذا أعادت الدالة صالح.\n", near_max_time);
    } else {
        printf("[*] فشل استغلال الثغرة\n");
    }
}

/**
 * عرض السلوك بعد الإصلاح
 */
void demonstrate_fix() {
    printf("\n=== عرض السلوك بعد الإصلاح ===\n");
    
    int64_t near_max_time_64 = 2147483640;
    int64_t small_duration_64 = 10;
    
    int result_fixed = fixed_check_expiration(near_max_time_64, small_duration_64);
    
    if (result_fixed == 1) {
        printf("[+] الإصلاح فعّال: النظام يتعرف بشكل صحيح على أن البيانات صالحة.\n");
        printf("[+] السبب: 2147483640 + 10 = 2147483650 (لا فيضان)\n");
        printf("[+] الوقت الحالي (%lld) ليس أكبر من وقت الانتهاء (2147483650)، لذا أعادت الدالة صالح.\n", near_max_time_64);
    } else {
        printf("[*] انتهت صلاحية البيانات\n");
    }
}

int main() {
    printf("إثبات المفهوم لـ CVE-2025-46285: فيضان العدد الصحيح يؤدي إلى خطأ في معالجة الطابع الزمني\n");
    printf("======================================================\n");
    
    // 1. عرض الهجوم
    demonstrate_attack();
    
    // 2. عرض الإصلاح
    demonstrate_fix();
    
    printf("\n======================================================\n");
    printf("الاستنتاج: استخدام الأعداد الصحيحة 64 بت (int64_t) يمكن أن يتجنب تمامًا مشاكل الفيضان هذه.\n");
    printf("طبقت Apple هذا الإصلاح في الإصدارات مثل iOS 18.7.3 و macOS 14.8.3 إلخ.\n");
    
    return 0;
}

شرح تعليقات الكود

  • تعريف بنية البيانات:
    • هيكل TimeSensitiveData يُحاكي الكائن الذي يخزن الطوابع الزمنية في النظام.
    • int32_t timestamp هو أصل الثغرة، حيث يحد من نطاق تمثيل الوقت.
  • دالة vulnerable_check_expiration:
    • تُحاكي المنطق المعرض للثغرة.
    • السطر expiration_time = current_time + duration; يحدث فيه فيضان عندما يكون current_time قريبًا من INT32_MAX.
    • في الأعداد الصحيحة المُوقَّعة 32 بت، 2147483647 + 1 يصبح -2147483648.
    • المقارنة التالية current_time > expiration_time تؤدي إلى فرع منطقي خاطئ بسبب المقارنة مع سالب، مما قد يؤدي إلى تجاوز السياسة الأمنية.
  • دالة fixed_check_expiration:
    • تُظهر حل Apple: استخدام int64_t.

توصيات دفاعية

  • ترقية النظام: قم بتحديث macOS و iOS و iPadOS و tvOS و watchOS و visionOS على الفور إلى أحدث الإصدارات (macOS 14.8.3+ و iOS 18.7.3+ إلخ).
  • مراجعة الكود: عند تطوير كود يتعامل مع الوقت، استخدم دائمًا أعدادًا صحيحة 64 بت (int64_t, uint64_t) لتخزين الطوابع الزمنية.
  • التحقق من الإدخال: قم بفحص حدود جميع معاملات الوقت الواردة من الخارج للتأكد من أنها ضمن نطاق معقول.
  • استخدام المكتبات القياسية: يُفضل استخدام واجهات برمجة التطبيقات (APIs) عالية المستوى للوقت التي يوفرها نظام التشغيل، حيث إنها تعالج عادةً مشاكل الفيضان الأساسية.
تنزيل الأداة
  • القيمة القصوى للعدد الصحيح 64 بت حوالي (9 \times 10^{18})، وهو ما يكفي لتمثيل الوقت حتى 292 مليار سنة، مما يلغي احتمالية الفيضان بشكل جذري.
  • دالة demonstrate_attack:
    • بناء طابع زمني قريب من INT32_MAX (2147483640) ومدة صغيرة (10).
    • بعد التنفيذ، يصبح expiration_time سالبًا.
    • نظرًا لأن 2147483640 > -2147483646 صحيح، تعيد الدالة 0 (منتهي الصلاحية). لاحظ: في بعض المنطقيات الأمنية، إذا كان النظام يتوقع قيمة غير صفرية لكلمة "صالح"، أو إذا كان المنطق if (expiration_time < 0) return VALID;، فيمكن للمهاجم بناء حالة "صالح إلى الأبد". يُظهر هذا المثال بشكل أساسي الشذوذ العددي الناتج عن الفيضان.
  • دالة demonstrate_fix:
    • استخدام الأعداد الصحيحة 64 بت لنفس العملية، لا فيضان، المنطق صحيح.