CVE-2024-53142 in Linux
요약
\~에 의해 VulDB • 2026. 05. 30.
리눅스 커널에서 다음 취약점이 해결되었습니다:
initramfs: 파일명 버퍼 오버런 방지
initramfs 파일명 필드는 Documentation/driver-api/early-userspace/buffer-format.rst에서 다음과 같이 정의됩니다:
37 cpio_file := ALGN(4) + cpio_header + filename + "\0" + ALGN(4) + data ... 55 ============= ================== ========================= 56 필드 이름 필드 크기 의미 57 ============= ================== ========================= ... 70 c_namesize 8바이트 파일명의 길이(마지막 \0 포함)
initramfs cpio 아카이브를 추출할 때, 커널의 do_name() 경로 핸들러는 @collected에서 종료된 문자열(null-terminated) 경로를 가정하고 이를 filp_open() / init_mkdir() / init_mknod()에 직접 전달합니다.
특히 제작된 cpio 엔트리가 종료되지 않은 파일명을 포함하고 그 뒤에 초기화되지 않은 메모리가 이어지는 경우, 초기화되지 않은 메모리를 나타내는 후행 문자(trailing characters)를 포함하는 파일이 생성될 수 있습니다. initramfs 엔트리를 생성할 수 있다는 것은 이미 시스템에 대한 완전한 제어권을 가지고 있음을 의미하므로, 이 버퍼 오버런은 보안 취약점으로 간주되지 않아야 합니다.
다음 bash 스크립트의 출력을 기존 initramfs에 추가하고 생성된 /initramfs_test_fname_overrunAA* 경로를 관찰하십시오. 예: ./reproducer.sh | gzip >> /myinitramfs
출력을 gzip 압축할 때 __gunzip()에서 할당된 힙 @out_buf를 초기화되지 않은 메모리로 오버플로우시키는 것이 initrd_start+initrd_size 블록보다 더 쉽게 관찰할 수 있습니다.
---- reproducer.sh ---- nilchar="A" # 적절히 종료/패딩하려면 "\0"로 변경 magic="070701" ino=1 mode=$(( 0100777 )) uid=0 gid=0 nlink=1 mtime=1 filesize=0 devmajor=0 devminor=1 rdevmajor=0 rdevminor=0 csum=0 fname="initramfs_test_fname_overrun" namelen=$(( ${#fname} + 1 )) # 종료 문자를 위해 1 추가
printf "%s%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%s" \ $magic $ino $mode $uid $gid $nlink $mtime $filesize \ $devmajor $devminor $rdevmajor $rdevminor $namelen $csum $fname
termpadlen=$(( 1 + ((4 - ((110 + $namelen) & 3)) % 4) )) printf "%.s${nilchar}" $(seq 1 $termpadlen)
---- reproducer.sh ----
do_symlink()에서 처리되는 심볼릭 링크 파일명 필드는 심볼릭 링크 대상의 명시적인 종료 문자(null-termination)로 인해 데이터 세그먼트를 넘어 오버런되지 않습니다.
예상되는 오프셋(name_len - 1)에서 종료 문자(null-terminator)를 포함하지 않는 cpio 엔트리가 발견되면 initramfs FSM(유한 상태 기계)을 중단시켜 파일명 버퍼 오버런을 수정합니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.