🔍 CVE-2022-49204

5.5
CVSS Score
MEDIUM
2025-02-26
2026-11-05 20:17
✅ 완료

🇰🇷 한글 설명

Linux 커널의 BPF sockmap 코드에서 tcp_bpf_send_verdict() 함수가 more_data 경로로 진입할 때 메시지 크기를 두 번 해제(uncharge)하여 소켓 메모리 accounting이 어긋나는 문제가 수정되었습니다. 이로 인해 소켓 종료 시 커널 경고(WARNING)와 콜 트레이스가 발생할 수 있습니다.

💡 쉬운 설명

리눅스 커널 안에서 네트워크 데이터 전송 시 메모리 사용량을 잘못 계산하는 버그입니다. 이 때문에 연결을 닫을 때 커널 경고가 발생하거나 시스템이 불안정해질 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: bpf, sockmap: Fix more uncharged while msg has more_data In tcp_bpf_send_verdict(), if msg has more data after tcp_bpf_sendmsg_redir(): tcp_bpf_send_verdict() tosend = msg->sg.size //msg->sg.size = 22220 case __SK_REDIRECT: sk_msg_return() //uncharged msg->sg.size(22220) sk->sk_forward_alloc tcp_bpf_sendmsg_redir() //after tcp_bpf_sendmsg_redir, msg->sg.size=11000 goto more_data; tosend = msg->sg.size //msg->sg.size = 11000 case __SK_REDIRECT: sk_msg_return() //uncharged msg->sg.size(11000) to sk->sk_forward_alloc The msg->sg.size(11000) has been uncharged twice, to fix we can charge the remaining msg->sg.size before goto more data. This issue can cause the following info: WARNING: CPU: 0 PID: 9860 at net/core/stream.c:208 sk_stream_kill_queues+0xd4/0x1a0 Call Trace: <TASK> inet_csk_destroy_sock+0x55/0x110 __tcp_close+0x279/0x470 tcp_close+0x1f/0x60 inet_release+0x3f/0x80 __sock_release+0x3d/0xb0 sock_close+0x11/0x20 __fput+0x92/0x250 task_work_run+0x6a/0xa0 do_exit+0x33b/0xb60 do_group_exit+0x2f/0xa0 get_signal+0xb6/0x950 arch_do_signal_or_restart+0xac/0x2a0 ? vfs_write+0x237/0x290 exit_to_user_mode_prepare+0xa9/0x200 syscall_exit_to_user_mode+0x12/0x30 do_syscall_64+0x46/0x80 entry_SYSCALL_64_after_hwframe+0x44/0xae </TASK> WARNING: CPU: 0 PID: 2136 at net/ipv4/af_inet.c:155 inet_sock_destruct+0x13c/0x260 Call Trace: <TASK> __sk_destruct+0x24/0x1f0 sk_psock_destroy+0x19b/0x1c0 process_one_work+0x1b3/0x3c0 worker_thread+0x30/0x350 ? process_one_work+0x3c0/0x3c0 kthread+0xe6/0x110 ? kthread_complete_and_exit+0x20/0x20 ret_from_fork+0x22/0x30 </TASK>

📍 영향받는 시스템

BPF sockmap 기능을 포함한 Linux 커널 (수정 이전의 여러 안정 버전 및 LTS 커널)

⚔️ 공격 벡터

로컬 또는 네트워크를 통해 sockmap 리디렉션이 사용되는 대용량 TCP 전송을 유발하여 커널 메모리 accounting 불일치와 경고를 일으키는 방식이며, 주로 서비스 안정성(DoS) 영향이 보고되어 있습니다.

🛡️ 대응 방법

배포판 제공 보안 업데이트 또는 이 수정이 포함된 최신 Linux 커널 버전으로 업그레이드하고 재부팅합니다.

🔧 검증 코드

커널 버전을 확인해 수정된 패치 버전인지 배포판 보안 공지와 대조하고, 설정 출력으로 BPF sockmap 관련 옵션이 활성화되어 있는지 판단합니다 (옵션이 없거나 비활성화되어 있으면 영향이 제한적입니다).

Shell / Script
uname -r; grep -i -E 'sockmap|BPF_STREAM_PARSER' /boot/config-$(uname -r) 2>/dev/null

📊 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