CVE-2023-53265 in Linux
요약
\~에 의해 VulDB • 2026. 05. 12.
리눅스 커널의 KASAN(Kernel Address Sanitizer) 출력 결과를 분석하면, **UBI (Unsorted Block Images) 서브시스템에서 메모리 버퍼 오버플로우(Heap Buffer Overflow)가 발생**했음을 알 수 있습니다.
### 1. 핵심 문제 요약 * **오류 유형**: Heap Buffer Overflow (배열 경계 밖 쓰기) * **발생 위치**: `drivers/mtd/ubi/vtbl.c` 의 `create_vtbl` 함수 내부 * **구체적 원인**: `ubi_alloc_vid_buf` 함수를 통해 할당된 256바이트 크기의 메모리(`kmalloc-256`) 영역을 벗어나는 메모리 접근 발생 * **트리거**: `ioctl` 시스템 콜을 통해 UBI 볼륨 테이블을 읽거나 생성하는 과정(`ubi_read_volume_table` -> `create_empty_lvol`)
### 2. 상세 분석
#### A. 버그 주소 및 할당 정보 ```text The buggy address belongs to the object at ffff88802bb36e00 which belongs to the cache kmalloc-256 of size 256 The buggy address is located 0 bytes to the right of 256-byte region [ffff88802bb36e00, ffff88802bb36f00)
``` * 커널은 `kmalloc-256` 캐시에서 256바이트의 메모리를 할당했습니다. * 할당된 영역은 `[ffff88802bb36e00, ffff88802bb36f00)` 입니다.
* **버그 주소**는 이 영역의 **정확히 끝부분(0 bytes to the right)** 에 위치합니다. * 이는 코드가 256바이트를 초과하여 **257번째 바이트**에 쓰기를 시도했음을 의미합니다. * 보통 `memcpy`, `strcpy`, 또는 구조체 필드 할당 시 크기 계산 오류로 인해 발생합니다.
#### B. 호출 스택(Call Stack) 분석 ```text ubi_alloc_vid_buf drivers/mtd/ubi/ubi.h:1093 [inline]
create_vtbl+0xcc/0x9c4 drivers/mtd/ubi/vtbl.c:295 create_empty_lvol drivers/mtd/ubi/vtbl.c:500 [inline]
ubi_read_volume_table+0x67b/0x288a drivers/mtd/ubi/vtbl.c:812 ubi_attach+0xf34/0x1603 drivers/mtd/ubi/attach.c:1601 ubi_attach_mtd_dev+0x6f3/0x185e drivers/mtd/ubi/build.c:965 ctrl_cdev_ioctl+0x2db/0x347 drivers/mtd/ubi/cdev.c:1043 ``` 1. **사용자 공간**: `ioctl` 호출 (`ctrl_cdev_ioctl`) 2. **UBI 장치 연결**: `ubi_attach_mtd_dev` -> `ubi_attach` 3. **볼륨 테이블 읽기**: `ubi_read_volume_table` 4. **빈 논리 볼륨 생성**: `create_empty_lvol` 5. **VTBL 생성**: `create_vtbl` (라인 295) 6. **VID 버퍼 할당**: `ubi_alloc_vid_buf` (라인 1093)
**결론**: `create_vtbl` 함수 내에서 `ubi_alloc_vid_buf`로 할당된 VID(Volume Identifier) 버퍼를 사용할 때, 버퍼 크기를 초과하여 데이터를 복사하거나 작성하는 코드가 실행되었습니다.
### 3. 잠재적 원인 코드 분석 (UBI 서브시스템)
UBI 서브시스템에서 `create_vtbl` 함수는 볼륨 테이블(Volume Table)을 생성합니다. 이 테이블은 고정된 크기의 구조체(`struct ubi_vtbl_record`)로 구성되며, 각 레코드는 `VID_HDR_SIZE` (보통 512바이트 또는 2048바이트 등 MTD 페이지 크기에 따라 다름) 크기의 VID 헤더를 포함합니다.
**가능한 버그 시나리오:**
1. **VID 헤더 크기 계산 오류**: * `ubi_alloc_vid_buf`는 특정 크기(예: 256바이트)의 버퍼를 할당하지만, 실제 VID 헤더 크기는 더 클 수 있습니다. * 또는, `memcpy` 시 `VID_HDR_SIZE` 대신 잘못된 크기(예: 256)를 사용하여 경계를 넘어서는 경우.
2. **구조체 패딩/정렬 문제**: * `struct
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.