🇰🇷 한글 설명
Linux 커널의 SCSI FCoE 드라이버에서 FIP CVL 프레임 처리 중 발생하는 취약점입니다. 공격자가 길이가 0인 비정상적인 FIP 디스크립터를 전송할 경우, 커널의 루프 조건이 충족되지 않아 무한 루프에 빠지게 됩니다. 이로 인해 해당 컨트롤러의 FIP 프레임 처리가 중단되어 서비스 거부(DoS) 상태가 발생할 수 있습니다.
💡 쉬운 설명
네트워크를 통해 잘못된 정보를 보낸 공격자가 컴퓨터의 핵심 기능을 무한 반복 작업에 빠뜨려 멈추게 만들 수 있는 문제입니다. 이로 인해 서버가 정상적인 통신을 하지 못하고 먹통이 될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
scsi: fcoe: Reject FIP descriptors with zero fip_dlen in CVL walker
drivers/scsi/fcoe/fcoe_ctlr.c::fcoe_ctlr_recv_clr_vlink() advanced the
descriptor cursor by an attacker-supplied fip_dlen without ever
requiring dlen >= sizeof(struct fip_desc) in the default branch. The
named descriptor cases (FIP_DT_MAC, FIP_DT_NAME, FIP_DT_VN_ID) checked
their per-type minimum lengths, but a FIP_DT_NON_CRITICAL descriptor
(fip_dtype >= 128, which the standard requires receivers to silently
ignore) skipped that check entirely.
An unauthenticated L2 peer on the FCoE control VLAN could hang
fcoe_ctlr_recv_work on an fcoe, qedf, or bnx2fc initiator indefinitely
by emitting one FIP CVL frame whose single descriptor had fip_dtype ==
FIP_DT_NON_CRITICAL and fip_dlen == 0: the cursor advanced zero bytes
per iteration and the loop condition rlen >= sizeof(*desc) stayed true
forever, blocking every subsequent FIP frame on that controller.
Tighten the outer dlen guard to also reject dlen < sizeof(struct
fip_desc), so a malformed descriptor whose length cannot even cover the
descriptor header is rejected before the switch. This is the same
lower-bound the named cases already apply and is the minimum scope that
closes the loop.
📍 영향받는 시스템
Linux kernel (fcoe, qedf, bnx2fc 드라이버를 사용하는 시스템)
⚔️ 공격 벡터
FCoE 제어 VLAN에 있는 인증되지 않은 L2 피어가 길이가 0인 FIP CVL 프레임을 전송
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 FIP 디스크립터 길이 검증 로직을 강화해야 합니다.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전 이상인지 확인합니다.