🇰🇷 한글 설명
Linux 커널의 SMB 클라이언트에서 is_valid_oplock_break() 함수 내 data_offset 경계 검사 로직에 오류가 발견되었습니다. 이전 커밋에서 헤더 처리 방식이 변경되면서 경계값 계산이 0이 되어, 데이터 오버플로우를 방지하는 검증 절차가 무력화되었습니다.
💡 쉬운 설명
컴퓨터가 데이터를 주고받을 때 데이터의 크기를 확인하는 과정에서 계산 오류가 발생했습니다. 이 오류를 이용하면 공격자가 허용된 범위를 넘어서는 잘못된 데이터를 보내 시스템에 문제를 일으킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
smb: client: restore the data_offset bound in is_valid_oplock_break()
Commit 83bfbd0bb902 ("cifs: Remove the RFC1002 header from smb_hdr")
changed the quantity this bound is measured against. It used to be
srv->total_read minus the 4-byte RFC1002 preamble that total_read then
included, so it was the SMB message length. The same commit stopped
counting the preamble, and the mechanical substitution to
srv->total_read - srv->pdu_size left an expression that is identically
zero: standard_receive3() reads MID_HEADER_SIZE() bytes and then exactly
pdu_length - MID_HEADER_SIZE() more, adding both to total_read.
len is therefore 0, the subtraction below it wraps, and no __u32
DataOffset can exceed the result, so the check from commit 097f5863b1a0
("cifs: read overflow in is_valid_oplock_break()") no longer rejects
anything. Use total_read, which is now the message length on its own.
📍 영향받는 시스템
Linux Kernel (SMB client module 포함 버전)
⚔️ 공격 벡터
조작된 SMB oplock break 요청을 전송하여 데이터 오버플로우 유도
🛡️ 대응 방법
SMB 관련 패치가 적용된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 최신 패치 버전인지 확인