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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
seal-security-nuget-demo-net7 — fork من seal-security-nuget-demo لـ .NET 7: نفس قصة استغلال CVE-2024-21907، مع إعادة الاستهداف للعملاء المقيدين بإصدار .NET SDK 7. | Kitploit
أدوات/GitHubGitHub/seal-sec-demo-2/seal-security-nuget-demo-net7
تحليل الثغرات الأمنيةDevSecOpsأمن سلسلة التوريدالتعلم والتعليمموارد منسقةمختبرات وتدريب عملي
GitHubseal-sec-demo-2/seal-security-nuget-demo-net7

seal-security-nuget-demo-net7

fork من seal-security-nuget-demo لـ .NET 7: نفس قصة استغلال CVE-2024-21907، مع إعادة الاستهداف للعملاء المقيدين بإصدار .NET SDK 7.

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
عرض المستودع
1منذ 3 أشهرلم تتم المراجعة بعد

عرض توضيحي للمتصفح + CLI (NuGet/C#) — إصدار .NET 7

لماذا فرع على .NET 7؟

هذا فرع أُعيدت توجيهه من المستودع المرجعي seal-security-nuget-demo (الذي يستهدف net9.0). سيناريو الاستغلال ووحدات التحكم وقائمة الحزم المختومة متطابقة — يختلف TargetFramework فقط.

هذا الفرع موجود لأن معظم عملاء المؤسسات لا يستطيعون الانتقال إلى أحدث .NET SDK عند الطلب. وصل .NET 7 إلى نهاية الدعم في 14 مايو 2024، لكن بيئات الإنتاج الفعلية ما تزال تعمل عليه لأسباب تتعلق بالتوافق أو الشهادات أو التشغيل. وهذه هي بالضبط الحالة التي صُممت Seal Security من أجلها: عندما لا يستطيع العميل (أو لا يريد) القفز إلى إصدار رئيسي جديد، تقوم Seal بتصحيح التبعية الثغرية في مكانها تحت نفس الإصدار، دون أي تغيير في API العام ودون تعديلات على كود تطبيق العميل. يتيح هذا العرض إجراء تلك المحادثة على البنية التقنية الفعلية للعميل بدلاً من مطالبتهم بتثبيت net8/net9 أولاً.

يثبّت الفرع SDK على 7.0.x عبر global.json حتى لا تتسلل ترقيات عرضية أثناء العرض التوضيحي.


نظرة عامة

هذا التطبيق التوضيحي عبارة عن صفحة ترحيب بسيطة من ASP.NET Core تستخدم Newtonsoft.Json 12.0.2 لتحليل إدخال المستخدم ككائن إعدادات. يحتوي التطبيق على حقل اسم — اكتب اسمك وانقر Go، فيعرض "Welcome, alice!". داخلياً يمرر الإدخال عبر JsonConvert.DeserializeObject<NestedConfig>() الخاص بـ Newtonsoft.Json. هذا كل شيء — استخدام قياسي تماماً لمكتبة JSON شهيرة.

المشكلة أن Newtonsoft.Json 12.0.2 (والإصدارات قبل 13.0.1) يحتوي على CVE-2024-21907 — ثغرة رفض خدمة (Denial of Service) عالية الخطورة بنتيجة CVSS تبلغ 7.5 (عالية). يوضح هذا العرض كيف تقوم Seal Security بتصحيح الثغرة في مكانها دون الحاجة إلى ترقية إصدار رئيسي.


الثغرة: CVE-2024-21907

ما هي الثغرة؟

يمكن استغلال طريقة JsonConvert.DeserializeObject<T>() في Newtonsoft.Json عبر صياغة حمولات JSON متداخلة بعمق. عند إلغاء التسلسل إلى كائن مكتوب (POCO)، يقوم JsonSerializerInternalReader في المكتبة باستدعاءات تكرارية حقيقية (CreateValueInternal → CreateObject → PopulateObject → SetPropertyValue → CreateValueInternal) تسبب تجاوز سعة المكدس (stack overflow)، مما يؤدي إلى تعطل التطبيق (رفض الخدمة).

كيف يعمل الاستغلال

يأخذ التطبيق إدخال المستخدم ويحلله عبر Newtonsoft.Json. إذا كان الإدخال رابطاً، يجلب التطبيق المحتوى أولاً — وهو نمط واقعي تستخدمه أدوات تحميل الإعدادات ومختبرو API ومستقبلات الـ webhook:

root@kitploit:~
public class NestedConfig
{
    [JsonProperty("n")]
    public NestedConfig? N { get; set; }
}

var config = JsonConvert.DeserializeObject<NestedConfig>(name);

إدخال عادي: اكتب alice ← يعرض "Welcome, alice!"

الاستغلال: الصق هذا الرابط في حقل الاسم وانقر Go:

root@kitploit:~
https://raw.githubusercontent.com/seal-sec-demo-2/json-payload/main/payload.json

يكتشف التطبيق أنه رابط، ويجلب json-payload (JSON متداخل بعمق {"n":{"n":{...}}})، ويلغي تسلسله عبر Newtonsoft.Json إلى فئة NestedConfig التكرارية — مما يؤدي إلى تجاوز سعة المكدس.

يتكرر JsonSerializerInternalReader عبر CreateValueInternal → CreateObject → PopulateObject → SetPropertyValue لكل مستوى تداخل. عند عمق ~5,000 مستوى، يستنفد هذا مكدس الخيط ويتعطل التطبيق مع StackOverflowException — تنتهي العملية فوراً (لا يمكن معالجة الخطأ بشكل أنيق).

التأثير في العالم الحقيقي

بهذه الثغرة، يمكن للمهاجمين:

  • تعطيل التطبيق بإرسال حمولات JSON خبيثة
  • التسبب في رفض الخدمة مما يؤثر على جميع المستخدمين
  • استنزاف موارد الخادم عبر الاستغلال المتكرر
  • تجاوز تحديد المعدل (rate limiting) لأن كل طلب يعطل العملية

لماذا لا نرقّي فقط إلى Newtonsoft.Json 13.0.1؟

الإصلاح المتاح علناً يتطلب الترقية إلى الإصدار 13.0.1. ومع ذلك، غالباً ما يقدم الترقية إلى إصدار رئيسي:

  • تغييرات جوهرية في API في سلوك التسلسل
  • مشاكل توافق مع مكتبات أخرى تتوقع إصدارات محددة
  • متطلبات اختبار شاملة لجميع مسارات كود التسلسل وإلغاء التسلسل
  • خطر تغيير سلوك وقت التشغيل في الإنتاج

هذا يجعل حل "فقط قم بالترقية" مشروعاً قد يستغرق بسهولة أسابيع من وقت المطور — تاركاً الثغرة مفتوحة في هذه الأثناء.

كيف تقوم Seal Security بإصلاحها

يضيف إصدار Seal المصحح (12.0.2-sp1) حماية من عمق التكرار دون تغيير أي API عام. التصحيح:

  1. يضيف حدود MaxDepth افتراضية لمنع التكرار غير المحدود
  2. يتعامل بأناقة مع التداخل العميق باستثناءات مناسبة بدلاً من تجاوز سعة المكدس
  3. لا يغير أي API عام — يستمر الكود الحالي في العمل دون تعديل

هذه هي نفس استراتيجية التخفيف المطبقة في Newtonsoft.Json 13.0.1، أُعيد نقلها إلى 12.0.2 كبديل متوافق تماماً (drop-in).


تبعيات أخرى بها ثغرات

يتضمن هذا العرض أيضاً حزم NuGet أخرى بها ثغرات يمكن لـ Seal Security تصحيحها:

log4net 2.0.5 - CVE-2018-1285 (CVSS 9.8 حرجة)

ثغرة الكيان الخارجي XML (XXE) في تحليل إعدادات XML الخاص بـ log4net. يمكن للمهاجم الذي يتحكم في ملف إعدادات log4net أن:

  • يقرأ ملفات عشوائية من الخادم
  • ينفذ تزوير الطلبات من جانب الخادم (SSRF)
  • يسبب رفض الخدمة

ملاحظة حول System.Net.Http: العرض المرجعي على net9 يشحن أيضاً مرجعاً ثغرياً System.Net.Http 4.3.0 لـ CVE-2017-0249. لقد حذفناه من هذا الفرع على net7 لأن System.Net.Http على .NET 7 جزء من BCL ومرجع الحزمة المستقل هو حزمة meta-package متبقية — لها حالات حافة معروفة مع dotnet add package --source <local-nupkg>، وهذا هو بالضبط كيف يطبق Seal CLI الإصدارات المختومة. حذفها يجعل خطوة seal fix موثوقة دون تغيير قصة العرض (HttpClient ما زال يعمل بشكل جيد؛ فالنظام (runtime) يوفره).


المتطلبات الأساسية

  • .NET 7.0 SDK (نزّله من Microsoft)
  • Seal Security CLI v0.3.238 لنظام Windows x64 (تنزيل مباشر)

    توقفت ملفات Windows الثنائية من CLI بعد v0.3.238. الإصدار v0.3.238 يعمل بشكل كامل لمعالجة NuGet على Windows.

  • رمز الوصول إلى Seal Security (من لوحة تحكم Seal)

يوجد دليل تفصيلي لتثبيت وتشغيل Windows Server في README-WINDOWS-SERVER.md. يغطي قسم البدء السريع أدناه الخطوات نفسها بشكل مختصر.


بدء سريع (خادم Windows محلي)

1. تعيين متغيرات البيئة

PowerShell:

root@kitploit:~
$env:SEAL_TOKEN = "your-seal-token-here"
$env:SEAL_PROJECT = "nuget-demo-net7"

2. تشغيل التطبيق الثغري (قبل Seal)

root@kitploit:~
cd seal-security-nuget-demo-net7

# Restore (pulls from nuget.org and the Seal feed — see nuget.config)
dotnet restore

# Build and run
dotnet build
dotnet run

افتح http://localhost:5000 — التطبيق يعمل بتبعيات بها ثغرات.

الاختبار بإدخال عادي

اكتب alice في حقل الاسم وانقر Go. يجب أن ترى: "Welcome, alice!"

الاختبار بحمولة الاستغلال

الصق الرابط التالي في حقل الاسم وانقر Go:

root@kitploit:~
https://raw.githubusercontent.com/seal-sec-demo-2/json-payload/main/payload.json

النتيجة قبل التصحيح: يعرض المتصفح خطأ / إعادة تعيين الاتصال — تعطل التطبيق مع StackOverflowException في JsonSerializerInternalReader.CreateValueInternal. العملية ميتة.

3. تطبيق إصلاح Seal Security

root@kitploit:~
# (Optional — already done above) Restore dependencies first
dotnet restore

# Run Seal CLI to fix vulnerabilities
seal fix . --mode remote -v

# Restore again to pull sealed versions
dotnet restore

# Build and run the patched app
dotnet build
dotnet run

يستخدم التطبيق الآن الإصدارات المصححة (Newtonsoft.Json 12.0.2-sp1, log4net 2.0.5-sp1).

النتيجة بعد التصحيح: الصق رابط الاستغلال نفسه ← تعرض الصفحة "Blocked by Seal patch: MaxDepth of 64 has been exceeded." — حد التكرار المصحح في Newtonsoft.Json رفض الحمولة العميقة. يستمر الخادم في العمل بشكل طبيعي.

4. التحقق من الإصدارات المصححة

root@kitploit:~
dotnet list package

يجب أن ترى حزماً باللاحقة -sp1 للإشارة إلى تصحيحات Seal Security.


التكامل مع Seal Security CLI

القاعدة الذهبية

يجب إضافة خطوة CLI مباشرة بعد تثبيت التبعيات ولكن قبل البناء النهائي.

root@kitploit:~
# 1. Restore dependencies
dotnet restore

# 2. <--- Run Seal CLI Here
$env:SEAL_TOKEN = "your-seal-token-here"
$env:SEAL_PROJECT = "nuget-demo-net7"
seal fix . --mode remote -v

# 3. Restore again (to get sealed versions)
dotnet restore

# 4. Build
dotnet build

أوضاع الإصلاح

الوضعالوصف
allتطبيق جميع الإصلاحات المتاحة تلقائياً
remoteتطبيق الإصلاحات المعتمدة فقط في واجهة Seal
localتطبيق الإصلاحات المعرفة فقط في .seal-actions.yml

يسرد .seal-actions.yml في هذا المستودع بالفعل التجاوزات المختومة الثلاثة لوضع local، لذا يعمل seal fix . --mode local -v دون اتصال (ما زال يحتاج رمزاً لخادم القطع الأثرية).


إعداد خادم القطع الأثرية (Artifact Server)

إعداد nuget.config

تم إعداد nuget.config مسبقاً لاستخدام Seal Security مع متغيرات البيئة:

root@kitploit:~
<configuration>
  <packageSources>
    <add key="Seal" value="https://nuget.sealsecurity.io/v3/index.json" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <Seal>
      <add key="Username" value="%SEAL_PROJECT%" />
      <add key="ClearTextPassword" value="%SEAL_TOKEN%" />
    </Seal>
  </packageSourceCredentials>
</configuration>

متغيرات البيئة المطلوبة

المتغيرالوصف
SEAL_TOKENرمز الوصول الخاص بك إلى Seal Security
SEAL_PROJECTمعرّف المشروع (مثل nuget-demo-net7)

القائمة البيضاء للشبكة (للبيئات المقيدة)

يحتاج Seal CLI إلى HTTPS صادر (TCP 443) إلى:

  • cli.sealsecurity.io — تكوين الفحص / الإصلاح
  • authorization.sealsecurity.io — التحقق من الرمز
  • nuget.sealsecurity.io — تنزيل حزم .nupkg المختومة
  • d2zko6i8myndc4.cloudfront.net — شبكة توصيل المحتوى CDN التي تقدم القطع الأثرية المختومة الفعلية (أسماء مضيفي .sealsecurity.io تعيد التوجيه هنا)
  • api.nuget.org / نقاط نهاية nuget.org القياسية — للتبعيات غير المختومة

تحقق من PowerShell بعد فتح جدار الحماية:

root@kitploit:~
Test-NetConnection cli.sealsecurity.io -Port 443
Test-NetConnection authorization.sealsecurity.io -Port 443
Test-NetConnection nuget.sealsecurity.io -Port 443
Test-NetConnection d2zko6i8myndc4.cloudfront.net -Port 443

يجب أن يعرض الجميع TcpTestSucceeded: True.


ملاحظات خاصة بـ .NET 7


نقاط الحديث في العرض

  • لا تغييرات في الكود — كود التطبيق مطابق للإصدار غير المصحح. تم تبديل إصدار حزمة NuGet فقط.
  • نفس API — 12.0.2-sp1 بديل متوافق ثنائياً (binary-compatible) عن 12.0.2.
  • يستهدف البنية التقنية الفعلية للعميل — net7.0، وليس net9.0. لا حاجة لترقية SDK.
  • دفاع متعمق — يحمي جميع مسارات الكود، بما في ذلك التبعيات غير المباشرة (transitive).
  • تصحيحات عامة — جميع التصحيحات مفتوحة المصدر وقابلة للتدقيق.
  • .NET خارج الدعم (EOL) ما زال يحصل على تصحيحات — هذه هي القيمة الأساسية: لم تعد Microsoft تصدر تحديثات أمنية لـ .NET 7، لكن Seal تحافظ على أمان سطح التبعيات الحالي للعميل.

حزم NuGet المختومة المتاحة

الحزم المستخدمة في هذا العرض:

الحزمةالإصدار الثغريالإصدار المختومCVECVSS

حزم NuGet مختومة أخرى متاحة من خلاصة Seal (غير مستخدمة في هذا العرض، مدرجة للرجوع إليها):


الترخيص

رخصة MIT - راجع ملف LICENSE للتفاصيل.

تنزيل الأداة
العنصرلماذا يهم
global.json يثبّت SDK على 7.0.x مع rollForward: latestFeatureيمنع الأجهزة التي تحتوي net8/net9 جنباً إلى جنب من تبديل SDK بصمت في منتصف العرض.
تثبيت System.Configuration.ConfigurationManager على 7.0.0يستخدم العرض المرجعي على net9 الإصدار 8.0.0، الذي يستهدف net8 فقط ويفشل في الاستعادة على net7. الإصدار 7.0.0 له نفس سطح API الذي يحتاجه log4net.
إخماد NU1701 في ملف csprojيعلن log4net 2.0.5 عن TFM قديم net4x يقبله .NET 7 وقت التشغيل لكنه يحذر منه عند الاستعادة. التحذير تجميلي؛ الإخماد يحافظ على نظافة مخرجات البناء أثناء العرض.
Seal CLI v0.3.238 لنظام Windows x64آخر إصدار يحتوي على ملف Windows ثنائي؛ يعمل بشكل كامل لمعالجة NuGet. توقفت ملفات Windows الثنائية بعد هذا الإصدار، لذا لا تقترح إصداراً أحدث.
Newtonsoft.Json12.0.212.0.2-sp1CVE-2024-219077.5 HIGH
log4net2.0.52.0.5-sp1CVE-2018-12859.8 CRITICAL
الحزمةالإصدار الثغريالإصدار المختومCVECVSS
log4net2.0.02.0.0-sp1CVE-2018-12859.8 CRITICAL
System.Net.Http4.3.04.3.0-sp1CVE-2017-02497.3 HIGH
Snappier1.1.01.1.0-sp1CVE-2023-286387.0 HIGH
jQuery.Validation1.17.01.17.0-sp1CVE-2021-212527.5 HIGH