🇰🇷 한글 설명
Linux 커널의 libie 라이브러리에서, 펌웨어 로깅이 제대로 초기화되지 않은 경우에도 드라이버 언로드 시 libie_fwlog_deinit()이 호출되어 커널 Oops가 발생할 수 있습니다. 이 문제는 복구 모드에서 ixgbe 드라이버를 언로드할 때 재현되며, 펌웨어 로깅 지원 여부를 먼저 확인하도록 수정되었습니다.
💡 쉬운 설명
네트워크 카드 드라이버를 제거할 때 준비되지 않은 기능을 정리하려다 시스템이 비정상 종료될 수 있는 결함입니다. 공격자가 원격으로 악용하기보다는 드라이버 제거 과정에서 오류가 발생하는 안정성 문제에 가깝습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
libie: don't unroll if fwlog isn't supported
The libie_fwlog_deinit() function can be called during driver unload
even when firmware logging was never properly initialized. This led to call
trace:
[ 148.576156] Oops: Oops: 0000 [#1] SMP NOPTI
[ 148.576167] CPU: 80 UID: 0 PID: 12843 Comm: rmmod Kdump: loaded Not tainted 6.17.0-rc7next-queue-3oct-01915-g06d79d51cf51 #1 PREEMPT(full)
[ 148.576177] Hardware name: HPE ProLiant DL385 Gen10 Plus/ProLiant DL385 Gen10 Plus, BIOS A42 07/18/2020
[ 148.576182] RIP: 0010:__dev_printk+0x16/0x70
[ 148.576196] Code: 1f 44 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 41 55 41 54 49 89 d4 55 48 89 fd 53 48 85 f6 74 3c <4c> 8b 6e 50 48 89 f3 4d 85 ed 75 03 4c 8b 2e 48 89 df e8 f3 27 98
[ 148.576204] RSP: 0018:ffffd2fd7ea17a48 EFLAGS: 00010202
[ 148.576211] RAX: ffffd2fd7ea17aa0 RBX: ffff8eb288ae2000 RCX: 0000000000000000
[ 148.576217] RDX: ffffd2fd7ea17a70 RSI: 00000000000000c8 RDI: ffffffffb68d3d88
[ 148.576222] RBP: ffffffffb68d3d88 R08: 0000000000000000 R09: 0000000000000000
[ 148.576227] R10: 00000000000000c8 R11: ffff8eb2b1a49400 R12: ffffd2fd7ea17a70
[ 148.576231] R13: ffff8eb3141fb000 R14: ffffffffc1215b48 R15: ffffffffc1215bd8
[ 148.576236] FS: 00007f5666ba6740(0000) GS:ffff8eb2472b9000(0000) knlGS:0000000000000000
[ 148.576242] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 148.576247] CR2: 0000000000000118 CR3: 000000011ad17000 CR4: 0000000000350ef0
[ 148.576252] Call Trace:
[ 148.576258] <TASK>
[ 148.576269] _dev_warn+0x7c/0x96
[ 148.576290] libie_fwlog_deinit+0x112/0x117 [libie_fwlog]
[ 148.576303] ixgbe_remove+0x63/0x290 [ixgbe]
[ 148.576342] pci_device_remove+0x42/0xb0
[ 148.576354] device_release_driver_internal+0x19c/0x200
[ 148.576365] driver_detach+0x48/0x90
[ 148.576372] bus_remove_driver+0x6d/0xf0
[ 148.576383] pci_unregister_driver+0x2e/0xb0
[ 148.576393] ixgbe_exit_module+0x1c/0xd50 [ixgbe]
[ 148.576430] __do_sys_delete_module.isra.0+0x1bc/0x2e0
[ 148.576446] do_syscall_64+0x7f/0x980
It can be reproduced by trying to unload ixgbe driver in recovery mode.
Fix that by checking if fwlog is supported before doing unroll.
📍 영향받는 시스템
Linux 커널 6.17-rc 계열의 libie/libie_fwlog 및 ixgbe 드라이버를 사용하는 시스템 (수정 커밋 이전 버전)
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 복구 모드에서 ixgbe 드라이버를 언로드하면 커널 Oops가 유발될 수 있으며, 원격 공격 경로는 확인되지 않았습니다.
🛡️ 대응 방법
커널을 해당 수정이 포함된 최신 안정 버전으로 업데이트하거나 배포판의 보안 업데이트를 적용합니다.
🔧 검증 코드
출력된 커널 버전이 배포판의 수정 패키지(또는 upstream 수정 커밋 포함 버전) 이상인지 확인하고, 배포사 보안 공지와 비교하면 패치 여부를 판단할 수 있습니다.
uname -r && (modinfo ixgbe 2>/dev/null | grep -E '^(version|srcversion|filename)')