🇰🇷 한글 설명
Linux 커널의 USB ATM cxacru 드라이버에서 엔드포인트 검사가 불완전한 문제가 해결되었습니다. 기존에는 엔드포인트의 종류만 확인하고 주소(address)는 검사하지 않아, 잘못된 엔드포인트를 가진 장치가 드라이버에 바인딩되어 USB 요청 블록(URB) 전송 경고 및 커널 경고가 발생할 수 있었습니다. 이를 usb_check_XXX_endpoints() 방식으로 교체하여 엔드포인트 주소까지 검증하도록 수정되었습니다.
💡 쉬운 설명
특정 USB ADSL 모뎀 드라이버가 잘못된 장치의 연결 정보를 충분히 확인하지 않아 발생한 문제입니다. 악성 또는 비정상 USB 장치가 연결될 때 커널이 경고를 내거나 불안정해질 수 있어 이를 수정했습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
usb: atm: cxacru: fix a flaw in existing endpoint checks
Syzbot once again identified a flaw in usb endpoint checking, see [1].
This time the issue stems from a commit authored by me (2eabb655a968
("usb: atm: cxacru: fix endpoint checking in cxacru_bind()")).
While using usb_find_common_endpoints() may usually be enough to
discard devices with wrong endpoints, in this case one needs more
than just finding and identifying the sufficient number of endpoints
of correct types - one needs to check the endpoint's address as well.
Since cxacru_bind() fills URBs with CXACRU_EP_CMD address in mind,
switch the endpoint verification approach to usb_check_XXX_endpoints()
instead to fix incomplete ep testing.
[1] Syzbot report:
usb 5-1: BOGUS urb xfer, pipe 3 != type 1
WARNING: CPU: 0 PID: 1378 at drivers/usb/core/urb.c:504 usb_submit_urb+0xc4e/0x18c0 drivers/usb/core/urb.c:503
...
RIP: 0010:usb_submit_urb+0xc4e/0x18c0 drivers/usb/core/urb.c:503
...
Call Trace:
<TASK>
cxacru_cm+0x3c8/0xe50 drivers/usb/atm/cxacru.c:649
cxacru_card_status drivers/usb/atm/cxacru.c:760 [inline]
cxacru_bind+0xcf9/0x1150 drivers/usb/atm/cxacru.c:1223
usbatm_usb_probe+0x314/0x1d30 drivers/usb/atm/usbatm.c:1058
cxacru_usb_probe+0x184/0x220 drivers/usb/atm/cxacru.c:1377
usb_probe_interface+0x641/0xbb0 drivers/usb/core/driver.c:396
really_probe+0x2b9/0xad0 drivers/base/dd.c:658
__driver_probe_device+0x1a2/0x390 drivers/base/dd.c:800
driver_probe_device+0x50/0x430 drivers/base/dd.c:830
...
📍 영향받는 시스템
패치 이전의 Linux 커널 (cxacru USB ATM 드라이버 포함 버전)
⚔️ 공격 벡터
물리적으로 USB 장치를 연결하여 잘못된 엔드포인트 구성을 가진 장치를 드라이버에 바인딩시키는 방식
🛡️ 대응 방법
사용 중인 배포판의 최신 커널 업데이트를 적용하여 수정된 버전으로 재부팅
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지 또는 해당 수정 커밋이 포함된 안정 버전과 비교하여 최신 패치 적용 여부를 확인합니다.