🔍 CVE-2025-38345

5.5
CVSS Score
MEDIUM
2025-07-10
2026-11-05 21:18
✅ 완료

🇰🇷 한글 설명

Linux 커널 ACPICA 서브시스템의 dswstate.c에서 acpi_ds_obj_stack_pop_and_delete() 함수가 스택 최상단 위치를 잘못 계산하여 ACPI 오퍼랜드 캐시 메모리 누수가 발생합니다. 악성 ACPI 테이블로 인한 조기 종료 후 부팅이 계속될 때 이 누수가 나타나며, 구버전 커널에서는 스택 덤프를 통해 커널 함수 주소가 노출되어 KASLR 우회에 악용될 수 있습니다.

💡 쉬운 설명

컴퓨터의 하드웨어 설정 정보를 처리하는 부분에서 사용하던 메모리를 제대로 반환하지 못하는 오류입니다. 이 정보가 새어 나가면 악성 프로그램이 시스템 보안 장치를 우회하는 데 도움을 줄 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: ACPICA: fix acpi operand cache leak in dswstate.c ACPICA commit 987a3b5cf7175916e2a4b6ea5b8e70f830dfe732 I found an ACPI cache leak in ACPI early termination and boot continuing case. When early termination occurs due to malicious ACPI table, Linux kernel terminates ACPI function and continues to boot process. While kernel terminates ACPI function, kmem_cache_destroy() reports Acpi-Operand cache leak. Boot log of ACPI operand cache leak is as follows: >[ 0.585957] ACPI: Added _OSI(Module Device) >[ 0.587218] ACPI: Added _OSI(Processor Device) >[ 0.588530] ACPI: Added _OSI(3.0 _SCP Extensions) >[ 0.589790] ACPI: Added _OSI(Processor Aggregator Device) >[ 0.591534] ACPI Error: Illegal I/O port address/length above 64K: C806E00000004002/0x2 (20170303/hwvalid-155) >[ 0.594351] ACPI Exception: AE_LIMIT, Unable to initialize fixed events (20170303/evevent-88) >[ 0.597858] ACPI: Unable to start the ACPI Interpreter >[ 0.599162] ACPI Error: Could not remove SCI handler (20170303/evmisc-281) >[ 0.601836] kmem_cache_destroy Acpi-Operand: Slab cache still has objects >[ 0.603556] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.12.0-rc5 #26 >[ 0.605159] Hardware name: innotek gmb_h virtual_box/virtual_box, BIOS virtual_box 12/01/2006 >[ 0.609177] Call Trace: >[ 0.610063] ? dump_stack+0x5c/0x81 >[ 0.611118] ? kmem_cache_destroy+0x1aa/0x1c0 >[ 0.612632] ? acpi_sleep_proc_init+0x27/0x27 >[ 0.613906] ? acpi_os_delete_cache+0xa/0x10 >[ 0.617986] ? acpi_ut_delete_caches+0x3f/0x7b >[ 0.619293] ? acpi_terminate+0xa/0x14 >[ 0.620394] ? acpi_init+0x2af/0x34f >[ 0.621616] ? __class_create+0x4c/0x80 >[ 0.623412] ? video_setup+0x7f/0x7f >[ 0.624585] ? acpi_sleep_proc_init+0x27/0x27 >[ 0.625861] ? do_one_initcall+0x4e/0x1a0 >[ 0.627513] ? kernel_init_freeable+0x19e/0x21f >[ 0.628972] ? rest_init+0x80/0x80 >[ 0.630043] ? kernel_init+0xa/0x100 >[ 0.631084] ? ret_from_fork+0x25/0x30 >[ 0.633343] vgaarb: loaded >[ 0.635036] EDAC MC: Ver: 3.0.0 >[ 0.638601] PCI: Probing PCI hardware >[ 0.639833] PCI host bridge to bus 0000:00 >[ 0.641031] pci_bus 0000:00: root bus resource [io 0x0000-0xffff] > ... Continue to boot and log is omitted ... I analyzed this memory leak in detail and found acpi_ds_obj_stack_pop_and_ delete() function miscalculated the top of the stack. acpi_ds_obj_stack_push() function uses walk_state->operand_index for start position of the top, but acpi_ds_obj_stack_pop_and_delete() function considers index 0 for it. Therefore, this causes acpi operand memory leak. This cache leak causes a security threat because an old kernel (<= 4.9) shows memory locations of kernel functions in stack dump. Some malicious users could use this information to neutralize kernel ASLR. I made a patch to fix ACPI operand cache leak.

📍 영향받는 시스템

패치가 적용되지 않은 Linux 커널 (특히 4.9 이하 구버전)

⚔️ 공격 벡터

악성 ACPI 테이블을 포함한 환경에서 부팅 시 발생하는 메모리 누수 및 스택 덤프 정보 노출을 이용해 KASLR 우회

🛡️ 대응 방법

배포판에서 제공하는 최신 커널 보안 업데이트를 설치하고 재부팅

🔧 검증 코드

출력된 커널 버전이 해당 배포판의 보안 패치가 포함된 버전인지 배포판 보안 공지와 대조하여 확인하고, dmesg | grep -i 'Acpi-Operand' 결과에 'Slab cache still has objects' 메시지가 있는지 확인합니다.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Linux Kernel