🔍 CVE-2026-98580

0.0
CVSS Score
UNKNOWN
2026-10-18
2026-10-19 10:19
✅ 완료

🇰🇷 한글 설명

Linux 커널의 NFC LLCP 구성 요소에서 accept_queue 생명주기 관리 중 레이스 컨디션 취약점이 발견되었습니다. nfc_llcp_socket_release()와 nfc_llcp_accept_dequeue() 간의 동기화 문제로 인해 동일한 자식 소켓이 동시에 해제될 수 있으며, 이는 Use-After-Free 또는 NULL 포인터 역참조를 유발할 수 있습니다.

💡 쉬운 설명

NFC 통신을 처리하는 과정에서 두 가지 작업이 동시에 같은 데이터를 수정하려고 시도할 때 발생하는 오류입니다. 이로 인해 시스템이 갑자기 멈추거나 보안상 위험한 메모리 오류가 발생할 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: nfc: llcp: Fix race condition in accept_queue lifecycle In nfc_llcp_socket_release(), sockets and listener accept queues are walked under the local sockets rwlock and bh_lock_sock(). However, bh_lock_sock() does not synchronise against process-context lock_sock() held by nfc_llcp_accept_dequeue() during accept(). Because socket_release() does not check sock_owned_by_user(), both paths can concurrently unlink and release the same child socket, resulting in use-after-free or a NULL pointer dereference of child->parent in nfc_llcp_accept_unlink(). Fix this synchronisation race by having nfc_llcp_socket_release() use process-context lock_sock() instead of bh_lock_sock(): 1. Pop sockets from the local sockets list under the write lock using nfc_llcp_sock_list_pop() so lock_sock() can be acquired without holding the rwlock. 2. Because lock_sock() can sleep, defer the final release of the nfc_llcp_local structure to a workqueue (release_work). This avoids a sleeping-in-atomic bug when the last local reference is dropped from softirq context. Additionally, hold a single device reference on local from registration until final destruction. 3. In nfc_llcp_local_get(), use kref_get_unless_zero() to prevent resurrecting a local object whose teardown has been scheduled. 4. In llcp_sock_accept(), verify that the listener socket state is still LLCP_LISTEN after waking from schedule_timeout() to prevent hangs if the listener is closed concurrently. 5. When unlinking unaccepted child sockets during listener release, unlink them from local->sockets, call sock_orphan(), and drop their initial sk_alloc creation reference via sock_put(). 6. Make nfc_llcp_accept_unlink() idempotent by guarding parent access with a NULL check.

📍 영향받는 시스템

Linux kernel (NFC LLCP 모듈 사용 시스템)

⚔️ 공격 벡터

로컬 공격자가 특수하게 조작된 NFC 통신 요청을 통해 소켓 해제와 수락 과정을 동시에 유도하여 메모리 오류를 발생시킴

🛡️ 대응 방법

NFC LLCP 관련 동기화 로직이 수정된 최신 Linux 커널 버전으로 업데이트

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인

Shell / Script
uname -r

💻 영향받는 소프트웨어

IBM Security Verify Access