🇰🇷 한글 설명
Linux 커널의 netfilter nf_conntrack_irc 모듈 내 parse_dcc() 함수에서 오프바이원(off-by-one) 경계 검사 오류로 인한 OOB Read 취약점이 발견되었습니다. 데이터 끝 포인터를 포함 범위로 잘못 처리하여 유효 범위를 벗어난 바이트를 읽을 수 있으며, 이는 잘못된 DCC IP 또는 포트 정보를 생성할 수 있습니다.
💡 쉬운 설명
네트워크 데이터를 처리하는 과정에서 데이터의 끝부분을 한 칸 더 읽어버리는 실수가 있는 보안 결함입니다. 이로 인해 잘못된 네트워크 연결 정보가 생성되어 시스템의 보안 설정이 의도치 않게 동작할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read
parse_dcc() treats data_end as an inclusive end pointer, but its only
caller passes data_limit = ib_ptr + datalen, which points one past the
last valid byte.
The newline search loop iterates while tmp <= data_end, so when no
newline is present, *tmp is read at tmp == data_end, one byte beyond
the region filled by skb_header_pointer().
irc_buffer is kmalloc'd as MAX_SEARCH_SIZE + 1 bytes and datalen is
capped at MAX_SEARCH_SIZE, so the stray read does not fault. The byte
is uninitialized or stale; if it contains an ASCII digit, simple_strtoul
will consume it and produce a wrong DCC IP or port in the conntrack
expectation. The extra allocation byte is also a fragile guard: if the
cap or allocation size changes, this becomes a real out-of-bounds read.
Change the loop and its post-loop check to use strict less-than,
consistent with the caller's exclusive-end convention. Update the
function comment accordingly.
📍 영향받는 시스템
Linux kernel (netfilter nf_conntrack_irc 모듈 포함 버전)
⚔️ 공격 벡터
IRC 프로토콜을 사용하는 네트워크 트래픽을 통해 조작된 DCC 데이터를 전송하여 발생
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 parse_dcc() 함수의 경계 검사 로직을 수정해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이상인지 확인