Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
vbox-vmdk-sparse-extent — Oracle VM VirtualBox 7.2.20 - عالية - محلي - قراءة ملف - VMDK sparse FLAT extent path join | Kitploit
أدوات/GitHubGitHub/abraxas/vbox-vmdk-sparse-extent
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبالمحاكاة الافتراضية للأماناختبار الاختراقمختبرات وتدريب عملي
GitHubabraxas/vbox-vmdk-sparse-extent

vbox-vmdk-sparse-extent

Oracle VM VirtualBox 7.2.20 - عالية - محلي - قراءة ملف - VMDK sparse FLAT extent path join

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

الأكثر شعبية

عرض الكل →

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

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

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

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

Abraxas Labs - vbox-vmdk-sparse-extent

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vbox-vmdk-sparse-extent

vbox-vmdk-sparse-extent

الفئة: قراءة ملف الوصول: محلي (المضيف) UI:R

Oracle VM VirtualBox OSS 7.2.20 (f2792cf44) - Oracle

مستخدم المضيف الذي يستورد دليل OVF أو OVA يكون قرصه واصف VMDK متناثرًا (sparse) بالإضافة إلى امتداد FLAT، يفتح مسارًا على المضيف مذكورًا في ذلك الامتداد وينسخ تلك البايتات إلى القرص المستورد. بعد vmdkParseDescriptor، يُستخدم كل امتداد يبدأ فيه pszBasename بـ RTPATH_SLASH كما هو؛ وإلا فيُستخدم RTPathJoinA(descriptor dir, pszBasename) الذي يتبع ../. ثم يقوم FLAT وHOSTED_SPARSE بـ vmdkFileOpen على ذلك المسار الكامل. أما streamOptimized (تصدير VirtualBox المعتاد، سحر VMDK) فهو ملف واحد ولا يخضع لهذا المسار. ومع ذلك لا يزال الاستيراد يقبل المحدد المتناثر.

المعرّفلا يوجد CVE بعد
الفئةقراءة ملف (مسار امتداد FLAT/sparse في VMDK المتناثر)
الوصولمحلي (المضيف) UI:R (الضحية يستورد جهازًا تطبيقًا خبيثًا)
CWECWE-22
CVSSمرتفع: 7.7 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
المنتجOracle VM VirtualBox OSS
المتأثر7.2.20 (f2792cf44f663989818507e36d3db5f978523c5e)
المصادقةلا شيء على VirtualBox. يفتح مستخدم المضيف File/Import أو VBoxManage import.
الترخيصGNU Affero GPL v3.0
المختبر127.0.0.1 فقط. أداة اختبار المصدر. لا يتم إقلاع VirtualBox.

ما يمكن للمهاجم فعله

إرسال دليل OVF أو ملف OVA. ضع واصف VMDK متناثرًا (# Disk DescriptorFile، createType="monolithicFlat") بجوار امتداد FLAT يكون اسمه الأساسي المقتبس ../../somewhere/secret أو /path/secret. المشغّل الذي يستورده يفتح ذلك المسار على المضيف بمعرّف المستخدم (UID) الذي يقوم بالاستيراد وينسخ البايتات إلى القرص الوجهة. أما streamOptimized (سحر VMDK 0x564D444B) فلا يستشير اسم FLAT المضمّن. هذه قراءة لملفات يمكن لمستخدم VBox UID فتحها، وليست كتابة خالية من اللاحقة إلى authorized_keys.

الصلاحيةالطريقة + نقطة الوصولما الذي يمنحهالمصدر
استطلاعاستيراد قرص VMDK متناثر ASCII. بعد vmdkParseDescriptor، يتم استدعاء RTPathJoinA(descriptor dir, pszBasename) دون طي ../ (VMDK.cpp 3472-3503). ثم vmdkFileOpen بنمط FLAT على المسار الكامل. ينسخ الاستيراد تلك البايتات إلى الوجهة.بايتات ملف المضيف المسمى بواسطة ../ تصل إلى القرص المستورد. في المختبر، تم ضم pszBasename بقيمة ../../oracle/VBOX-VMDK-SPARSE-EXTENT-WITNESS إلى /work/import/disk/../../oracle/... ونسخها إلى /work/import/out.vmdk.مُثبت مختبريًا (relative-escape=yes)
استطلاعنفس المسار. يتم استخدام pszBasename[0] == RTPATH_SLASH كما هو (VMDK.cpp 3477-3485).فتح مسار مضيف مطلق ونسخه. في المختبر /work/oracle/VBOX-VMDK-SPARSE-EXTENT-WITNESS.مُثبت مختبريًا (absolute-extent=yes)
استطلاعالتحكم بـ FLAT disk-flat.vmdk المضموم تحت دليل الوصف.يبقى داخل المجلد. الاسم الكامل في المختبر /work/import/disk/disk-flat.vmdk. البايتات CONTROL-FLAT-NOT-ORACLE.مُثبت مختبريًا (control-in-folder=yes)
استطلاعstreamOptimized مع سحر VMDK. يأخذ vmdkDescriptorRead المسار vmdkDescriptorReadSparse. FLAT ASCII المضمّن سمّى الـ oracle.لم يفتح الاسم المضمّن. بقيت الوجهة ملف التدفق (STREAMOPTIMIZED-SELF-NOT-ORACLE).مُثبت مختبريًا (streamoptimized-consults-extent=no)
استطلاعبدء الضيف، ثم قراءة الحجم المحوّل.يرى الضيف محتويات ملف المضيف القابلة للقراءة بواسطة UID المستورد والتي وصلت إلى الوجهة.مستنتج (نفس النسخ؛ المختبر لا يُقلع ضيفًا)
الإتاحةوجهة استيراد موجودة مسبقًا، أو ربط لاحق للقرص المحوّل.إتاحة الكتابة فوق قرص الوجهة. تصبح المحتويات هي ملف المضيف المفتوح.مستنتج (نفس الكتابة إلى الوجهة)
مغلقVMDK بنمط streamOptimized (تصدير VirtualBox المعتاد)فرع السحر. ملف واحد. لا يُفتح اسم FLAT المضمّن.مغلق
مغلقمسار مطلق بحرف محرك أقراص Windows (C:\...)قد يفوّت pszBasename[0] == RTPATH_SLASH. يصف الكود فحص المسار المطلق بأنه حل مؤقت (@todo implement proper path absolute check).مغلق
مغلقكتابات بلا لاحقة (authorized_keys، crontab)ليست من بقايا الكتابة. فتح الامتداد هو قراءة للمسار المسمى في المضيف.مغلق
مغلقنواة المضيف، من الضيف إلى المضيف، أجهزة افتراضية أخرى، ذاكرة VBoxSVCليست هذه البقايا. لا يلزم بدء جهاز افتراضي للنسخ. نفس UID الخاص بالمستورد.مغلق

OVA هو نفس المسار بمجرد أن يكون الوصف المتناثر على القرص: يوفر عضو tar الوصف بالإضافة إلى FLAT (اختياري) داخل المجلد؛ ويوفر اسم الامتداد الأساسي الفتح المُهرَّب. لا 3D، ولا Guest Additions، ولا VRDP، وليس PUEL.

كيف وجدته

بقيت على الوسم v7.2.20 (f2792cf44) بعد تحديث CPU لشهر سبتمبر 2026 وقرأت استيراد VMDK. ExtraData والمجلدات المشتركة ووجهة NVRAM وRawFile التسلسلي تمت إزالتها بالفعل. وجهة ovf:href هي بقايا شقيقة. تصدير VirtualBox المعتاد هو streamOptimized. لا يزال interpret() يقبل محدد النمط المتناثر (g_pszVMDKSparseURI). بعد vmdkParseDescriptor، يتم ضم اسم الامتداد الأساسي دون طي ../ أو رفض المسارات المطلقة:

/* Hack to figure out whether the specified name in the
 * extent descriptor is absolute. Doesn't always work, but
 * should be good enough for now. */
char *pszFullname;
/** @todo implement proper path absolute check. */
if (pExtent->pszBasename[0] == RTPATH_SLASH)
{
    pszFullname = RTStrDup(pExtent->pszBasename);
    /* ... */
}
else
{
    char *pszDirname = RTStrDup(pImage->pszFilename);
    RTPathStripFilename(pszDirname);
    pszFullname = RTPathJoinA(pszDirname, pExtent->pszBasename);
    /* ... */
}
pExtent->pszFullname = pszFullname;

RTPathJoinA يوازن الشرطة المائلة فقط. لا يقوم بدمج ... ثم يقوم FLAT وHOSTED_SPARSE بفتح تلك السلسلة:

case VMDKETYPE_FLAT:
    rc = vmdkFileOpen(pImage, &pExtent->pFile, pExtent->pszBasename, pExtent->pszFullname,
                      VDOpenFlagsToFileOpenFlags(uOpenFlags, false /* fCreate */));

vmdkDescriptorRead يقسّم على السحر. سحر VMDK المتفرق (0x564D444B) يأخذ vmdkDescriptorReadSparse ويُبقي الملف المفتوح مسبقًا كامتداد. ASCII يأخذ vmdkDescriptorReadAscii والربط أعلاه.

المنعطفات الخاطئة المسجّلة مسبقًا: معاملة streamOptimized على أنه هذه البقايا (السحر لا يستشير اسم FLAT المضمّن)؛ معاملة مسار مطلق بحرف محرك أقراص Windows كفحص الشرطة المائلة في Unix؛ معاملة الكتابة فوق قرص الوجهة ككتابة authorized_keys خالية من اللاحقة؛ إقلاع جهاز ظاهري عندما يكون مصدر تسخير الربط كافيًا. المسرح: نواة المضيف، من الضيف إلى المضيف. الأوراكل هو سطر شاهد خارج مجلد الوصف بالإضافة إلى disk-flat.vmdk تحكّمي بقي في مكانه.

المختبر

python3 vbox-vmdk-sparse-extent-Abraxas-Labs.py

أو

cd lab
./run.sh

حزمة مصدر اختبار vmdkParseDescriptor لضم الامتدادات، وvmdkFileOpen، وفرع السحر streamOptimized. Docker compose، loopback 127.0.0.1:19250، بدون ملف VirtualBox التنفيذي. دليل الوصف /work/import/disk. Oracle /work/oracle. الوجهة /work/import/out.vmdk.

SUCCESS vbox-vmdk-sparse-extent relative-escape=yes absolute-extent=yes control-in-folder=yes VBOX-VMDK-SPARSE-EXTENT-WITNESS

الإصلاح

قم بطي أو رفض .. في pszBasename. ارفض pszBasename المطلق. أو افتح النطاقات فقط تحت دليل الواصف (RTPATHABS_F_STOP_AT_BASE / realpath-under-base). لا تعامل pszBasename[0] == RTPATH_SLASH كفحص مطلق كامل.

المراجع

تنزيل الأداة