🇰🇷 한글 설명
리눅스 커널의 NFC NCI 핸들러에서 초기화되지 않은 스택 구조체를 사용하는 취약점이 발견되었습니다. 기술 특정 매개변수 길이가 0인 알림이 들어올 경우, 초기화되지 않은 메모리 값이 nci_add_new_protocol 함수를 통해 사용자 공간으로 노출될 수 있습니다.
💡 쉬운 설명
NFC 통신 과정에서 컴퓨터 메모리의 일부가 제대로 정리되지 않은 채로 남게 되어, 중요한 정보가 외부로 유출될 수 있는 문제입니다. 공격자가 특수한 NFC 신호를 보내 시스템 내부의 데이터를 읽어낼 가능성이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nfc: nci: fix uninit-value in the RF discover/activated NTF handlers
nci_rf_discover_ntf_packet() and nci_rf_intf_activated_ntf_packet() each
parse a notification into an on-stack struct (nci_rf_discover_ntf /
nci_rf_intf_activated_ntf) that is not initialised. The RF
technology-specific parameters are only extracted when
rf_tech_specific_params_len is non-zero, so a notification that reports a
zero length leaves the rf_tech_specific_params union uninitialised - and
both handlers then pass it to nci_add_new_protocol(), which reads it:
- discover: nci_add_new_target() -> nci_add_new_protocol();
- activated: nci_target_auto_activated() -> nci_add_new_protocol().
nci_add_new_protocol() uses nfca_poll->nfcid1_len as both a branch
condition and a memcpy() length and copies nfcid1/sens_res/sel_res into
ndev->targets, which is later exposed to user space via NFC_CMD_GET_TARGET.
BUG: KMSAN: uninit-value in nci_add_new_protocol+0x624/0x6c0
nci_add_new_protocol+0x624/0x6c0
nci_ntf_packet+0x25b2/0x3c30
nci_rx_work+0x318/0x5d0
process_scheduled_works+0x84b/0x17a0
worker_thread+0xc10/0x11b0
kthread+0x376/0x500
Local variable ntf.i created at:
nci_ntf_packet+0xbc2/0x3c30
Zero-initialise both on-stack notifications so the union reads back as
zero when no technology-specific parameters are present.
📍 영향받는 시스템
Linux kernel (NFC NCI subsystem)
⚔️ 공격 벡터
조작된 NFC 알림(Notification) 패킷을 전송하여 초기화되지 않은 메모리 값을 유도
🛡️ 대응 방법
NFC NCI 핸들러 내의 스택 기반 알림 구조체를 0으로 초기화하는 커널 패치 적용
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 수정된 최신 보안 패치 버전인지 확인합니다.