🇰🇷 한글 설명
Linux 커널의 bootconfig 구성 요소에서 initrd 크기 확인 시 정수 오버플로 취약점이 발견되었습니다. 공격자가 조작된 크기의 initrd를 사용하면 포인터 연산 오류로 인해 경계 검사를 우회하고, 커널이 잘못된 메모리 영역을 읽으려 시도하여 부팅 과정에서 커널 패닉(Fatal Page Fault)을 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터가 부팅될 때 사용하는 초기 파일의 크기를 잘못 계산하여 발생하는 오류입니다. 가짜로 만든 아주 큰 파일을 사용하면 컴퓨터가 부팅 중에 멈추거나 꺼질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bootconfig: Fix integer overflow in initrd size check
Sashiko reported that in get_boot_config_from_initrd(), a crafted initrd
with a huge bootconfig size (such as 0xFFFFFFFF) can cause the pointer
arithmetic:
data = ((void *)hdr) - size;
to wrap around on 32-bit systems (or when pointer subtraction overflows).
Because data wraps around, the subsequent bounds check:
if ((unsigned long)data < initrd_start)
evaluates to false, bypassing the check. The kernel then calls
xbc_calc_checksum(data, size), which attempts to read 4GB of memory,
hitting unmapped pages and triggering a fatal kernel page fault during
early boot. Furthermore, on 64-bit systems with an initrd > 4.29 GB, an
unbounded 32-bit size can similarly bypass the initrd_start check.
Fix this by:
1. Ensuring the initrd is at least large enough to contain the bootconfig
footer and verifying hdr is within the initrd bounds.
2. Checking that size does not exceed XBC_DATA_MAX and does not exceed
the available space between initrd_start and hdr before performing
pointer subtraction.
📍 영향받는 시스템
Linux kernel (32-bit systems and 64-bit systems with initrd > 4.29 GB)
⚔️ 공격 벡터
조작된 크기(예: 0xFFFFFFFF)를 가진 initrd 파일을 사용하여 부팅 시 정수 오버플로 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 정수 오버플로 및 경계 검사 로직 수정
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 수정된 최신 패치 버전인지 확인합니다.