2026년 11월 2일 월요일
미단재

리눅스 커널 CVE-2026-46333·98432 취약점 분석 및 대응 가이드

요약: 2026년 5월 공개된 CVE-2026-46333은 ptrace 경로의 로컬 root 권한 상승이고, 10월 공개된 CVE-2026-98432는 IPv4 TCP 연결 수립 단계의 원격 use-after-free다. 둘 다 커널 패치와 재부팅이 근본 해결이며, 패치 전에는 kernel.yama.ptrace_scope=2(46333), IP 옵션 패킷 차단과 MPTCP 비활성화(98432)로 노출을 줄일 수 있다. 확인 가능한 공개 자료만 모아 서버 점검 순서까지 정리했다.

이 글은 2026-11-02 시점의 공개 자료(Qualys, 각 배포판 공지, 보안 블로그)를 바탕으로 쓴 정리글이다. 배포판별 패치 상황은 계속 바뀌므로 적용 전에 반드시 각 트래커를 다시 확인한다.

한눈에 보기

두 CVE의 유형·조건·영향·임시 완화를 나란히 비교한 표

두 CVE는 이름만 비슷한 커널 취약점이고 성격은 전혀 다르다. 46333은 서버에 로컬 계정이 있어야 악용할 수 있고, 98432는 열린 TCP 포트에 SYN 패킷을 보낼 수 있으면 대상이 된다. 그래서 점검 우선순위와 임시 완화책도 다르다.

CVE-2026-46333: ptrace 경로의 로컬 권한 상승

무슨 문제인가

Qualys가 2026-05-20에 공개했다. 원인은 커널 __ptrace_may_access()의 논리 오류다. mm이 NULL일 때 dumpable 검사를 건너뛰는데도 함수는 YAMA LSM 훅까지 도달한다. 권한을 내려놓으며 종료 중인 특권 프로세스가 잠깐 ptrace 계열 연산에 노출되는 경합 구간도 생긴다.

공격자는 이 구간을 노려 pidfd_getfd()로 종료 중인 특권 프로세스의 열린 파일 디스크립터를 가져온다. Qualys는 다음 네 가지 대상을 보고했다.

  • chage: /etc/shadow 노출
  • ssh-keysign: SSH 호스트 개인키 노출
  • pkexec: root 명령 실행
  • accounts-daemon: root 명령 실행

영향 범위는 mainline 기준 v4.10-rc1(2016년 11월)부터이고, 악용 경로가 쓰는 pidfd_getfd()는 v5.6-rc1(2020년 1월)에서 추가됐다. Qualys가 기본 설치 상태에서 확인한 배포판은 Debian 13, Ubuntu 24.04·26.04, Fedora 43·44다. Qualys 자신은 익스플로잇을 공개하지 않았지만, 공개 PoC가 GitHub에 올라와 있다는 보도가 있다.

심각도는 출처마다 다르다. Red Hat은 Important로 평가하되 OpenShift에서는 기본 보안 컨텍스트(restricted-v2)가 악용 사슬을 막아 Low로 본다. Azure Linux 일부 빌드는 CVSS 5.5(Medium)로 표기한다. 벤더별로 점수가 갈리므로 점수보다 "내 서버에 비신뢰 로컬 사용자가 있는가"로 우선순위를 정하는 편이 맞다.

대응

근본 해결은 배포판의 커널 업데이트와 재부팅이다. 패치를 바로 적용하기 어렵다면 Qualys 글이 제시한 임시 완화책을 쓴다.

sysctl kernel.yama.ptrace_scope        # 현재 값 확인
sudo sysctl -w kernel.yama.ptrace_scope=2   # ptrace에 CAP_SYS_PTRACE 요구

재부팅 후에도 유지하려면 /etc/sysctl.d/ 아래 파일에 kernel.yama.ptrace_scope = 2를 넣는다(파일명은 자료에 지정이 없어 임의로 정하면 된다).

부작용이 있다. 일반 사용자는 자기가 띄우지 않은 프로세스에 gdb -p, strace -p, perf record -p를 쓸 수 없고, 브라우저 크래시 리포터 샌드박스, 컨테이너 디버깅, kdump 도우미, CRIU가 깨질 수 있다. 값을 런타임에 낮추려면 재부팅이 필요하다는 것이 Qualys의 설명이다.

비신뢰 로컬 사용자가 노출 기간에 접근할 수 있었다면 SSH 호스트 키 교체와, set-uid 프로세스 메모리에 있었을 수 있는 자격증명 점검도 권고된다.

CVE-2026-98432: IPv4 TCP 연결 수립의 use-after-free

무슨 문제인가

2026-10-15에 공개됐다. IPv4 소켓 소멸 경로(inet_sock_destruct(), tcp_v4_reqsk_destructor())가 저장된 IP 옵션을 RCU 리더가 아직 접근할 수 있는 상태에서 일반 kfree()로 해제한다. 재전송된 SYN이나 syncookie ACK 경로가 해제된 메모리를 건드릴 수 있다. 4.4에서 들어온 버그이고, 상류 수정은 kfree_rcu로 바꾸는 커밋 e3f33b0a1d89다. 원격에서 인증 없이 IP 옵션이 붙은 SYN 패킷으로 유발할 수 있다.

점수도 갈린다. 커널 CNA는 9.8(Critical), 상류는 공격 복잡도 High로 8.1(important)이며 NVD는 CNA 점수만 보여 준다. 일부 보도는 Anthropic이 MPTCP 리스너를 상대로 한 root 익스플로잇을 시연했다고 전하지만, 이 글을 쓰며 Anthropic 원문으로는 확인하지 못했다. 이차 출처 내용이므로 사실로 단정하지 않는다. 확인한 범위에서는 실제 공격 사례 보고나 CISA KEV 등재는 없었다.

수정된 커널 (kernel.org stable, 2026-11-01 기준 한 블로그 집계)

7.3      7.3        (10/18)
7.2      7.2.10     (10/11)
6.18     6.18.56    (10/11)
6.12     6.12.113   (10/15)
6.6      6.6.159    (10/15)
6.1      6.1.190    (10/15)
5.15     5.15.223   (10/15)
5.10     5.10.272   (10/15)
4.4~5.4  수정 없음 (EOL)

배포판 커널은 자체 버전 체계와 백포트를 쓰므로 위 숫자와 직접 비교하면 안 된다. 같은 집계 기준으로 Debian 12·13, SLES 15 SP4~SP6 LTSS와 16.0, Amazon Linux 2·2023은 수정본이 나왔고, Ubuntu와 RHEL 8·9·10은 아직이었다. AlmaLinux 8·9·10은 testing 저장소에만 있었다.

대응

먼저 내 커널과 MPTCP 상태를 확인한다. 알려진 익스플로잇은 MPTCP 리스너가 필요하다.

uname -r
sysctl net.mptcp.enabled
sudo ss -Mlnp    # MPTCP 리스너 목록

Go 1.24부터는 리스닝 소켓에 MPTCP가 기본으로 켜지므로, 모르는 사이 Go 서비스가 MPTCP로 열려 있을 수 있다는 지적이 있다.

AlmaLinux는 패치 커널을 testing 저장소로 먼저 내놨다. 운영 서버에서는 설치 후 testing 저장소를 다시 끄는 것까지 한 세트다.

sudo dnf install -y almalinux-release-testing
sudo dnf update 'kernel*' --enablerepo=almalinux-testing
sudo reboot
# 설치 후
sudo dnf config-manager --disable almalinux-testing

AlmaLinux 공지의 패치 버전은 8이 kernel-4.18.0-553.180.2.el8_10, 9가 kernel-5.14.0-687.61.2.el9_8, 10이 kernel-6.12.0-211.69.2.el10_2 이상이다.

재부팅이 당장 어렵다면 임시로 IP 옵션이 붙은 IPv4 TCP 패킷을 버린다. 정상 트래픽은 IP 옵션을 거의 쓰지 않는다.

sudo nft add table ip cve_2026_98432
sudo nft add chain ip cve_2026_98432 pre '{ type filter hook prerouting priority -300; }'
sudo nft add rule ip cve_2026_98432 pre meta l4proto tcp ip hdrlength gt 5 counter drop
sudo nft list table ip cve_2026_98432    # drop 카운터 확인

이 규칙은 재부팅하면 사라진다. 한계도 분명하다. CIPSO/NetLabel처럼 IP 옵션에 의존하는 망에서는 쓰면 안 되고, 브리지 컨테이너 트래픽은 호스트 prerouting을 우회할 수 있으며, Red Hat도 "노출을 줄일 뿐 완전히 막지는 못한다"고 밝혔다. 제거는 sudo nft delete table ip cve_2026_98432로 한다.

MPTCP를 쓰지 않는다면 끈다. 이미 열린 리스너는 그대로이므로 서비스를 재시작해야 한다. 이 설정은 알려진 익스플로잇 경로만 막고, 일반 TCP 경로의 버그는 그대로다.

echo 'net.mptcp.enabled = 0' | sudo tee /etc/sysctl.d/99-no-mptcp.conf
sudo sysctl --system

Go 서비스 단위로는 환경변수 GODEBUG=multipathtcp=0을 주고 재시작하는 방법이 있다.

점검 순서

커널 버전 확인 후 수정 커널 유무에 따라 업데이트 또는 임시 완화로 갈라지는 대응 흐름도

  1. uname -r로 실행 중인 커널을 확인한다.
  2. 배포판 보안 트래커에서 두 CVE의 수정 버전을 대조한다.
  3. 수정 커널이 있으면 업데이트 후 재부팅한다. 재부팅 전까지는 취약한 커널이 그대로 돌고 있다.
  4. 없으면 임시 완화를 적용하고, 완화 때문에 깨지는 것(디버깅 도구, IP 옵션 의존 망)을 먼저 점검한다.
  5. 패치가 나오는 대로 교체하고 임시 규칙을 제거한다.

배운 점

  • CVSS 숫자는 출처마다 5.5, 8.1, 9.8로 달랐다. 점수는 참고만 하고, 로컬 계정 노출 여부와 열린 포트라는 조건으로 우선순위를 정한다.
  • 임시 완화책은 부작용 목록과 함께 적용해야 한다. ptrace_scope=2는 디버깅을, nftables 규칙은 IP 옵션 의존 트래픽을 건드린다.
  • 배포판 패치 현황은 며칠 단위로 바뀐다. 이 글의 표도 시점이 지나면 낡는다.

참고 자료

이어 읽을 글

댓글 0

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.