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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-76070 — بحث أصلي وإثبات مفهوم (PoC) غير مدمر لثغرة تجاوز سعة المخزن المؤقت للمكدس في كلمة المرور المفككة بترميز Base64 قبل المصادقة في ملف login.cgi في جهاز Netis NC63. | Kitploit
أدوات/GitHubGitHub/ozcanpng/cve-2026-76070
أمان الأنظمة المدمجةأمان إنترنت الأشياءتحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةتحليل البرامج الثابتةاستغلال الملفات الثنائية
GitHubozcanpng/cve-2026-76070

CVE-2026-76070

بحث أصلي وإثبات مفهوم (PoC) غير مدمر لثغرة تجاوز سعة المخزن المؤقت للمكدس في كلمة المرور المفككة بترميز Base64 قبل المصادقة في ملف login.cgi في جهاز Netis NC63.

عرض المستودع
1منذ 4 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-76070: تجاوز سعة المخزن المؤقت للمكدس قبل المصادقة عبر كلمة مرور مفكوكة بـ Base64 في login.cgi لجهاز Netis NC63 يؤدي إلى تنفيذ تعليمات برمجية عن بُعد (RCE)

الباحث: Özcan Ersan (@ozcanpng)

حالة الإفصاح

  • CVE: CVE-2026-76070
  • الجهة المُصنِّعة: Netis Systems Co., Ltd.
  • المنتج: موجه Netis NC63 اللاسلكي AC1200
  • البرنامج الثابت المختبر: NC63_V3.0.0.3327
  • المكوّن المتأثر: /bin/netis.cgi
  • نقطة النهاية: POST /cgi-bin/login.cgi
  • المُعامِل: password مرمّز بـ Base64
  • المصادقة: لا شيء؛ عملية فك الترميز غير الآمنة تحدث قبل مقارنة بيانات الاعتماد
  • البنية: MIPS32r2 قليل المبادلة (little-endian)، o32 ABI، uClibc
  • فئة الثغرة: تجاوز سعة مخزن مؤقت قائم على المكدس مع التحكم في عنوان العودة المحفوظ
  • التحقق: CGI إنتاجي بنفس التجزئة الأصلية في بيئة تشغيل معزولة عبر QEMU بنمط المستخدم
  • حالة سجل CVE عند الإعداد: معيّن؛ تفاصيل سجل CNA بانتظار التعبئة

الملخص التنفيذي

يسترجع معالج تسجيل الدخول العام في البرنامج الثابت Netis NC63 V3.0.0.3327 مُعامِل password الذي يتحكم به المهاجم ويفك ترميزه باستخدام روتين Base64 المخصص FUN_00402bd4. يوفّر المستدعي مخزنًا محليًا للمكدس بحجم 64 بايت لكنه لا يمرر سعته إلى مفكك الترميز. يستمد مفكك الترميز عمله من المدخلات المرمّزة ويكتب البايتات المفكوكة دون التحقق من نهاية الوجهة.

يقع عنوان العودة المحفوظ في MIPS على بُعد 136 بايت من بداية المخزن المفكوك. أظهرت الاختبارات الديناميكية ضد CGI الإنتاجي بالتجزئة الأصلية ما يلي:

  1. نمط B مفكوك بطول 140 بايت يسبب خطأ عند 0x42424242؛
  2. استبدال ra المحفوظ بـ 0x0041a2e0 يسبب دخولًا ثانيًا مرصودًا إلى معالج تسجيل الدخول، مما يثبت التحكم في عدّاد البرنامج؛ و
  3. اختبار معزول للمراقبة فقط يصل إلى استدعاء system() المباشر في الثنائي الأصلي بقيمة a0 في MIPS يختارها المهاجم. سجّل /bin/sh البديل الأمر /bin/sh -c NC63_RCE_PROOF ولم ينفذ أي أمر.

يتوقف الاستغلال (PoC) العام في هذا المستودع عمدًا عند نمط انهيار. لا يحتوي على سلسلة عودة، أو شيلكود، أو أمر، أو شل عكسي، أو استمرارية.

تكامل الأثر المتأثر

root@kitploit:~
193f6a5e2ce65972b1805bf076f8d3521379a8441c8aaeb5ad0ba174bbee0792  netis_NC63_V3.0.0.3327.bin
23faa747b7d2f067aa5431bcc227ceca97a7977cf3e7c372f715cbba57f9209b  squashfs-root/bin/boa
eb298774c27070dc595fefcabb4e8c12a46cb5f4fd08f91c3ca92282c3a289a2  squashfs-root/bin/netis.cgi

نسخة /bin/netis.cgi المختبرة ديناميكيًا لها نفس SHA-256 للثنائي المستخرج من قبل البائع.

Original and runtime hashes

سطح الهجوم وحالة المصادقة

ترسل الواجهة الأمامية للبائع كلمة المرور إلى نقطة النهاية العامة بترميز Base64:

root@kitploit:~
obj.password = base64encode(utf16to8(password));
request({
    url: "/cgi-bin/login.cgi",
    data: obj
});

يستخدم حقل HTML maxlength="63"، لكن ذلك مجرد قيد من جانب المتصفح. يمكن لعميل HTTP مباشر إرسال قيمة مرمّزة أكبر.

Frontend request and client-only limit

يمكن الوصول إلى login.cgi بالضرورة قبل المصادقة. تحدث عملية فك الترميز غير الآمنة قبل مقارنة كلمة المرور المفكوكة مع كلمة مرور المسؤول المكوّنة. لا حاجة إلى جلسة صالحة، أو ترويسة Cookie، أو ترويسة Authorization، أو كلمة مرور صحيحة.

تتبع من المصدر إلى الحوض

root@kitploit:~
Unauthenticated HTTP client
  |
  | POST /cgi-bin/login.cgi
  | password=<attacker-controlled Base64>
  v
/bin/netis.cgi: FUN_0041a2e0
  |
  | get_request_param("password")
  v
FUN_00402bd4(decoded_stack_buffer, encoded_password)
  |
  | no destination-capacity argument
  | decoded output exceeds 64 bytes
  v
saved s8 at decoded offset 132
saved ra at decoded offset 136
  |
  v
attacker-selected MIPS PC

الكود المعرض للثغرة

كود زائف مشتق من Ghidra، مع تسوية الأسماء للقراءة:

root@kitploit:~
int login_cgi(void *request)
{
    char decoded[64];
    char stored[68];
    char *password;

    memset(decoded, 0, 64);
    memset(stored, 0, 64);
    password = get_request_param(request, "password");
    if (password != NULL)
        FUN_00402bd4(decoded, password); /* no capacity argument */

    apmib_get(0x15e, stored);
    if (strcmp(decoded, stored) == 0)
        printf("[\"SUCCESS\"]");
    else {
        system("echo 0 >/tmp/boa_auth");
        printf("[\"%d\"]", 0x15);
    }
    return 0;
}

Vulnerable login handler

يستقبل مفكك الترميز في FUN_00402bd4 مؤشري الوجهة والمصدر فقط. تتقدم حلقته بمؤشر الوجهة وتخزن حتى ثلاثة بايتات مفكوكة لكل أربعة رموز Base64. لا توجد مقارنة تتحقق من الوجهة مقابل decoded + 64.

Custom Base64 decoder write loop

Base64 هو تحويل المدخلات، وليس العيب الأساسي. السبب الجذري هو عدم التطابق بين الطول المفكوك الذي يتحكم به المهاجم والوجهة ذات الحجم الثابت التي لا تُفرض سعتها أبدًا. بالنسبة للمدخلات المبوبة عادية، تمثل أربعة أحرف مرمّزة ما يصل إلى ثلاثة بايتات مفكوكة؛ لذلك يجب على الفحوصات من جانب الخادم حساب الحجم المفكوك والتحقق منه قبل الكتابة.

تحليل تلف المكدس

تبدأ الدالة FUN_0041a2e0 عند 0x0041a2e0 وتُنشئ إطارًا بحجم 0xa8 بايت:

root@kitploit:~
0041a2e0  addiu sp,sp,-168
0041a2e4  sw    ra,164(sp)
0041a2e8  sw    s8,160(sp)
0041a2ec  move  s8,sp

تبدأ الوجهة المفكوكة عند s8+0x1c؛ s8 المحفوظ وra المحفوظ عند s8+0xa0 وs8+0xa4:

root@kitploit:~
decoded[64]  s8+0x1c   decoded offset 0
saved s8     s8+0xa0   decoded offset 132
saved ra     s8+0xa4   decoded offset 136

مسافة عنوان العودة الدقيقة هي 0xa4 - 0x1c = 0x88، أي 136 بايت.

Stack frame and saved-ra offset

التحقق الديناميكي

استبدال عنوان العودة المحفوظ

استبدل نمط B مفكوك بطول 140 بايت عنوان العودة المحفوظ ذا الأربعة بايتات:

root@kitploit:~
--- SIGSEGV {si_signo=SIGSEGV, si_code=1, si_addr=0x42424242} ---
qemu: uncaught target signal 11 (Segmentation fault)

Fault at attacker-selected return address

التحكم في عدّاد البرنامج

ضبط مدخل منفصل بطول 140 بايت ra المحفوظ إلى 0x0041a2e0. سجّل تتبع وحدة المعالجة المركزية في QEMU دخولًا عاديًا أولًا للمعالج ثم دخولًا ثانيًا مع s8=0x41414141 وra=0x0041a2e0.

Controlled second handler entry

حدود الأمر للمراقبة فقط

يحتوي الثنائي الأصلي على استدعاء مباشر jal system عند 0x0041a3cc. في التحقق المعزول الخاص، حمّلت تعليمات ثابتة القاعدة علامة إلى a0 ووصلت إلى ذلك الاستدعاء. تم تركيب برنامج مراقبة ثابت فوق /bin/sh؛ سجّل وسيطات المفسر ولم ينفذ شيئًا:

root@kitploit:~
argv[0]=</bin/sh>
argv[1]=<-c>
argv[2]=<NC63_RCE_PROOF>
CONTROLLED_MARKER_REACHED
PASS: attacker-controlled a0 reached system() and /bin/sh argv.
PASS: the guard logged the request and executed no command.

يوضح هذا قدرة RCE بدائية في مسار كود الإنتاج المعزول. لا يثبت موثوقية استغلال مطابقة على موجه مادي تحت نواته المنشورة وإعدادات عشوائية المكدس.

سياق الامتيازات وتحصين الثنائي

يحدد تكوين Boa الأصلي User root وGroup root ومسار CGI يحتوي على /bin و/web/cgi-bin. الثنائي الإنتاجي ذو قاعدة ثابتة (0x00400000)، ولا يحتوي على حارس مكدس (stack canary) أو RELRO، ويعلن عن مكدس GNU قابل للتنفيذ مع مقاطع RWX.

Production Boa privilege configuration

Binary hardening state

PoC عام وآمن

يبدأ السكربت المرفق افتراضيًا في وضع الجفاف (dry-run) ويولّد فقط جسم نموذج Base64 يحتوي على 140 بايتًا من B بعد فك الترميز:

root@kitploit:~
python3 poc/poc.py

يتطلب الإرسال هدفًا مصرحًا به صراحةً وخيار --send:

root@kitploit:~
python3 poc/poc.py --target http://192.168.1.1 --send

قد يسبب إرسال النمط انهيار عملية CGI. استخدمه فقط في بيئة مصرح بها وقابلة للاستهلاك. لا ينفذ PoC سلسلة التحقق الخاصة بـ RCE.

الأثر

يمكن للاستغلال الناجح تنفيذ تعليمات برمجية أو أوامر يختارها المهاجم في سياق إدارة الموجه. يعمل هذا السياق بصلاحيات الجذر في تكوين Boa الأصلي. تشمل العواقب المحتملة كشف الإعدادات والأسرار، والتلاعب بـ DNS/جدار الحماية/التوجيه، وإعادة توجيه حركة المرور، وتعطيل الخدمة، والاختراق الكامل للجهاز.

المعالجة

  1. استبدل مفكك الترميز المخصص بواجهة برمجية (API) تقبل سعة الوجهة.
  2. ارفض المدخلات التي يتجاوز طولها المفكوك المحسوب 63 بايت، مع تخصيص مساحة لفاصل (terminator).
  3. تحقق من الطول وصياغة Base64 من جانب الخادم قبل فك الترميز.
  4. دقق كل مستدعي FUN_00402bd4.
  5. أعد البناء مع stack canaries وPIE وNX وRELRO.
  6. شغّل عمليات CGI بأقل امتياز.

فهرس الأدلة

انظر evidence/README.md للقطات الشاشة وتعيين التتبعات. المقتطفات المعيارية من Ghidra موجودة تحت attachments/decompiled-functions/.

الجدول الزمني للإفصاح

  • 2026-08-16: تم اكتشاف الثغرة وإكمال التحقق على الثنائي الإنتاجي المعزول.
  • أغسطس 2026: أُبلغت VulnCheck.
  • 2026-08-20: قامت VulnCheck بتعيين CVE-2026-76070 وأذنت بالإفصاح العام.
  • 2026-08-20: نُشرت حزمة الإفصاح العام.

المراجع

  • CVE-2026-76070
  • VulnCheck
  • Netis NC63 support page
  • CVE-2026-73673

لم يتم وميض أي موجه مادي. لم يُستخدم أي أمر قشرة حقيقي، أو شل عكسي، أو استمرارية، أو اتصال خارجي، أو سرقة بيانات اعتماد، أو عملية برمجية ثابتة تخريبية.

تنزيل الأداة