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

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

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

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

دليل الأدوات

الفئات

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

seal-security-nuget-demo-net7

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

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

الأكثر شعبية

عرض الكل →

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

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

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

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

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

لماذا نسخة .NET 7؟

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

هذا الفرع موجود لأن معظم عملاء المؤسسات لا يمكنهم الانتقال إلى أحدث .NET SDK عند الطلب. وصل .NET 7 إلى نهاية الدعم في 14 مايو 2024، لكن بيئات الإنتاج الفعلية لا تزال تعمل عليه لأسباب تتعلق بالتوافق أو الشهادات أو التشغيل. هذه هي الحالة التي صُمم Seal Security من أجلها تحديدًا: عندما لا يستطيع العميل (أو لا يريد) أخذ قفزة في الإصدار الرئيسي، يقوم Seal بتصحيح الاعتماد الضعيف في مكانه تحت نفس الإصدار، دون أي تغيير في واجهة برمجة التطبيقات العامة ودون تعديلات على كود تطبيق العميل. هذا العرض التوضيحي يتيح إجراء هذه المحادثة على البنية الفعلية للعميل بدلاً من مطالبتهم بتثبيت 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 — ثغرة رفض خدمة عالية الخطورة بدرجة CVSS 7.5 (عالية). هذا العرض التوضيحي يوضح كيف يقوم Seal Security بتصحيح الثغرة في مكانها دون الحاجة إلى ترقية الإصدار الرئيسي.


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

ما هي الثغرة؟

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

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

يأخذ التطبيق إدخال المستخدم ويحلله عبر Newtonsoft.Json. إذا كان الإدخال عنوان URL، يقوم التطبيق بجلب المحتوى أولاً — نمط واقعي تستخدمه محملات الإعدادات، ومختبري واجهات برمجة التطبيقات، ومستقبلات 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

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

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

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

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

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

لماذا لا نكتفي بالترقية إلى Newtonsoft.Json 13.0.1؟

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

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

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

كيف يصلحها Seal Security

نسخة Seal المصححة (12.0.2-sp1) تضيف حماية عمق التكرار دون تغيير أي واجهة برمجة تطبيقات عامة. التصحيح:

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

هذه هي نفس استراتيجية التخفيف المطبقة في Newtonsoft.Json 13.0.1، مُعاد نقلها إلى 12.0.2 كبديل مباشر.


اعتماديات ضعيفة أخرى

هذا العرض التوضيحي يتضمن أيضًا حزم 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 لأنه على .NET 7 فإن System.Net.Http جزء من BCL ومرجع الحزمة المستقل هو حزمة وصفية أثرية — لها حالات حافة معروفة مع dotnet add package --source <local-nupkg>، وهو بالضبط كيف يطبق Seal CLI الإصدارات المختومة. حذفه يجعل خطوة seal fix موثوقة دون تغيير قصة العرض التوضيحي (HttpClient لا يزال يعمل بشكل جيد؛ وقت التشغيل يوفره).


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

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

    تم إيقاف ملفات CLI الثنائية لنظام Windows بعد 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

# الاستعادة (يسحب من nuget.org وخلاصة Seal — انظر nuget.config)
dotnet restore

# البناء والتشغيل
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:~
# (اختياري — تم بالفعل أعلاه) استعادة الاعتماديات أولاً
dotnet restore

# تشغيل Seal CLI لإصلاح الثغرات
seal fix . --mode remote -v

# الاستعادة مرة أخرى لسحب الإصدارات المختومة
dotnet restore

# بناء وتشغيل التطبيق المصحح
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. استعادة الاعتماديات
dotnet restore

# 2. <--- تشغيل Seal CLI هنا
$env:SEAL_TOKEN = "your-seal-token-here"
$env:SEAL_PROJECT = "nuget-demo-net7"
seal fix . --mode remote -v

# 3. الاستعادة مرة أخرى (للحصول على الإصدارات المختومة)
dotnet restore

# 4. البناء
dotnet build

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

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

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


تكوين خادم القطع الأثرية

إعداد 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

العنصرلماذا هو مهم
global.json يثبت SDK على 7.0.x مع rollForward: latestFeatureيمنع الأجهزة التي تحتوي على net8/net9 جنبًا إلى جنب من تبديل SDKs بصمت أثناء العرض التوضيحي.
System.Configuration.ConfigurationManager مثبت على 7.0.0العرض التوضيحي الأساسي net9 يستخدم 8.0.0، الذي يستهدف net8 فقط ويفشل في الاستعادة على net7. 7.0.0 له نفس سطح واجهة برمجة التطبيقات التي يحتاجها log4net.
NU1701 مكبوت في csprojlog4net 2.0.5 يعلن عن TFM قديم net4x يقبله .NET 7 في وقت التشغيل لكنه يحذر عنه عند الاستعادة. التحذير تجميلي؛ الكبت يحافظ على نظافة مخرجات البناء أثناء العرض التوضيحي.
Seal CLI v0.3.238 لنظام Windows x64آخر إصدار مع ملف ثنائي لنظام Windows؛ كامل الوظائف لمعالجة NuGet. تم إيقاف ملفات Windows الثنائية بعد هذا الإصدار، لذا لا تقترح إصدارًا أحدث.

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

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

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

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

الحزمةالإصدار الضعيفالإصدار المختومCVECVSS
Newtonsoft.Json12.0.212.0.2-sp1CVE-2024-219077.5 عالية
log4net2.0.52.0.5-sp1CVE-2018-12859.8 حرجة

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

الحزمةالإصدار الضعيفالإصدار المختومCVECVSS
log4net2.0.02.0.0-sp1CVE-2018-12859.8 حرجة
System.Net.Http4.3.04.3.0-sp1CVE-2017-02497.3 عالية
Snappier1.1.01.1.0-sp1CVE-2023-286387.0 عالية
jQuery.Validation1.17.01.17.0-sp1CVE-2021-212527.5 عالية

الترخيص

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

تنزيل الأداة