🔍 CVE-2022-50253

5.5
CVSS Score
MEDIUM
2025-09-15
2026-11-05 20:17
✅ 완료

🇰🇷 한글 설명

Linux 커널의 BPF 서브시스템에서, 터널링 장치로 패킷을 리다이렉트할 때 skb->len이 0이 되는 경우를 처리하지 않아 커널 경고(WARNING)가 발생하는 문제입니다. 수정으로 __skb_pull 이후 명시적인 길이 검사를 추가했습니다.

💡 쉬운 설명

네트워크 패킷을 특정 장치로 전달하는 커널 기능에서 패킷 길이가 0이 되는 상황을 제대로 막지 못했습니다. 이로 인해 커널이 경고를 출력하며 비정상 동작을 할 수 있어 패치가 적용되었습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: bpf: make sure skb->len != 0 when redirecting to a tunneling device syzkaller managed to trigger another case where skb->len == 0 when we enter __dev_queue_xmit: WARNING: CPU: 0 PID: 2470 at include/linux/skbuff.h:2576 skb_assert_len include/linux/skbuff.h:2576 [inline] WARNING: CPU: 0 PID: 2470 at include/linux/skbuff.h:2576 __dev_queue_xmit+0x2069/0x35e0 net/core/dev.c:4295 Call Trace: dev_queue_xmit+0x17/0x20 net/core/dev.c:4406 __bpf_tx_skb net/core/filter.c:2115 [inline] __bpf_redirect_no_mac net/core/filter.c:2140 [inline] __bpf_redirect+0x5fb/0xda0 net/core/filter.c:2163 ____bpf_clone_redirect net/core/filter.c:2447 [inline] bpf_clone_redirect+0x247/0x390 net/core/filter.c:2419 bpf_prog_48159a89cb4a9a16+0x59/0x5e bpf_dispatcher_nop_func include/linux/bpf.h:897 [inline] __bpf_prog_run include/linux/filter.h:596 [inline] bpf_prog_run include/linux/filter.h:603 [inline] bpf_test_run+0x46c/0x890 net/bpf/test_run.c:402 bpf_prog_test_run_skb+0xbdc/0x14c0 net/bpf/test_run.c:1170 bpf_prog_test_run+0x345/0x3c0 kernel/bpf/syscall.c:3648 __sys_bpf+0x43a/0x6c0 kernel/bpf/syscall.c:5005 __do_sys_bpf kernel/bpf/syscall.c:5091 [inline] __se_sys_bpf kernel/bpf/syscall.c:5089 [inline] __x64_sys_bpf+0x7c/0x90 kernel/bpf/syscall.c:5089 do_syscall_64+0x54/0x70 arch/x86/entry/common.c:48 entry_SYSCALL_64_after_hwframe+0x61/0xc6 The reproducer doesn't really reproduce outside of syzkaller environment, so I'm taking a guess here. It looks like we do generate correct ETH_HLEN-sized packet, but we redirect the packet to the tunneling device. Before we do so, we __skb_pull l2 header and arrive again at skb->len == 0. Doesn't seem like we can do anything better than having an explicit check after __skb_pull?

📍 영향받는 시스템

수정 이전의 Linux 커널 (BPF 리다이렉트 및 터널링 장치를 사용하는 환경)

⚔️ 공격 벡터

로컬 사용자가 BPF 프로그램을 통해 터널링 장치로의 리다이렉트를 유발하여 커널 경고 및 비정상 동작을 일으킬 수 있음

🛡️ 대응 방법

배포판 제공 커널 업데이트를 적용하여 최신 패치가 포함된 커널로 재부팅

🔧 검증 코드

출력된 커널 버전이 배포판의 보안 업데이트 이후 버전인지 확인하고, 해당 CVE 수정이 포함된 패키지 changelog(예: apt changelog linux-image-$(uname -r))와 대조하여 패치 여부를 판단

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Linux Kernel