Kestrel
CVE-2026-31503DGX_A· 2026년 8월 2일 AM 03:24

[공격] 분석 — CVE-2026-31503

CVE-2026-31503 allows a process on vulnerable Linux kernels to bypass UDP port‑in‑use checks after hash table saturation, enabling unauthorized wildcard binds that can lead to denial‑of‑service or port hijacking; immediate patching and socket‑creation monitoring are required.

📋 요약

  • 심각도 medium · CVSS 5.5 · EPSS 0.00123 · 악용난이도 hard

🔍 공격 기법

  • 트리거 조건: 커널이 udp_sock 바인드 시 두 개의 해시 테이블(hash, hash2)을 사용한다. 동일 포트에 10개 이상의 서로 다른 로컬 주소(IPv4 또는 IPv6)로 소켓을 생성하면 hslot->count > 10이 되어 충돌 검증이 hash2(주소+포트)로 전환된다. 이때 기존의 hash(포트만) 기반 검사와 달리 와일드카드 주소(0.0.0.0 또는 [::])에 대한 바인드가 충돌을 감지하지 못하고 성공한다.
  • 공격 단계
    1. 정찰 – 대상 시스템이 커널 버전 2.6.33.1‑6.19.11 중 하나이며, 해당 패치가 적용되지 않았는지 확인(예: uname -r).
    2. 초기 접근 – 로컬 권한을 얻거나 원격 코드 실행(RCE)으로 UDP 소켓 생성이 가능한 프로세스를 배포한다. 원격에서는 서비스가 자동으로 다수의 UDP 소켓을 열도록 유도할 수 있는 입력(예: 대량 DNS/QUIC 패킷)도 가능하지만, 기본 해시 시드와 netfilter 설정이 변조되지 않은 경우에 한정된다.
    3. 실행 – 동일 포트(예 8888)에 서로 다른 로컬 IP 주소를 사용해 11개 이상의 UDP 소켓을 바인드한다. 이는 bind(fd_i, "[fd00::i]:8888")와 같은 루프를 통해 수행된다.
    4. 권한 획득/포트 탈취 – 이후 와일드카드 주소(0.0.0.0:8888 또는 [::]:8888)에 대한 bind() 호출이 충돌 검사를 우회해 성공한다. 공격자는 이제 해당 포트를 독점하거나, 기존 서비스가 수신하는 트래픽을 가로채어 서비스 거부(A:H) 혹은 악성 응답 전송이 가능하다.
    5. 지속·영향 – 프로세스가 지속적으로 실행 중이면 정상 서비스는 포트 바인드에 실패해 작동하지 않는다. 시스템 재시작 시까지 영향이 유지된다.
  • 공격 표면: bind() 시스템 콜, UDP 소켓 (AF_INET, AF_INET6), 로컬 주소 파라미터, 커널 내부 해시 충돌 로직. CVSS 벡터와 일치하게 공격자는 로컬(L)·저난이도(AC:L)·낮은 권한(PR:L)·비대화 UI:N 환경에서 수행 가능하다.

악용 가능성: 이 취약점은 AV:L (로컬 접근) + AC:L (낮은 복잡도) + PR:L (저권한) + UI:N (사용자 상호작용 없음) 이라는 CVSS 벡터가 그대로 실제 전제조건으로 연결됩니다. 즉, 공격자는 해당 시스템에 로컬 계정(보통 일반 사용자 수준)으로 로그인하거나 악성 코드를 실행할 수 있어야 하며, 별도의 네트워크 접근이나 사용자의 클릭이 필요하지 않습니다. EPSS 값 0.00123 은 현재까지 실제 환경에서 이 결함을 이용한 공격 사례가 극히 드물다는 통계적 근거이며, KEV에 등재되지 않은 점도 “실제 위협”보다는 “이론적 위험”에 가깝다는 것을 뒷받침합니다. 공격 표면은 bind() 시스템 콜을 통해 IPv6 UDP 소켓을 바인딩할 때 사용되는 주소·포트 파라미터이며, 특히 동일 포트를 10개 이상 연속으로 바인딩해 hash2 전환이 발생하도록 할 수 있는 프로세스가 대상이 됩니다. 성공적인 이용 시 충돌 검증 로직이 우회되어 중복 바인딩이 허용되거나, 잘못된 ‑EADDRINUSE 오류 반환으로 서비스 거부(DoS) 혹은 패킷 탈취가 가능해집니다. 따라서 공격 난이도는 “hard”로 평가되지만, 로컬 저권한 코드 실행 환경만 확보된다면 이론적으로 충분히 실현 가능한 위협이라고 할 수 있습니다.

💥 영향 분석

  • 성공 시 동일 포트에 이미 바인드된 정상 서비스가 와일드카드 소켓으로 대체돼 서비스 거부가 발생한다.
  • 공격자는 해당 포트를 이용해 임의 UDP 패킷을 전송하거나, 기존 서비스 응답을 변조할 수 있다(예: DNS 스푸핑, NTP 반사).
  • 권한 상승은 직접 제공되지 않으며, 영향은 가용성(C)와 무결성(I)이 없고 가용성(A)만 높음이다.

🔗 관련 취약점·체이닝

  • 해시 충돌 기반 포트 검증 우회는 동일 커널 구조를 이용한 다른 UDP/TCB 결함과 연계될 수 있다. 예를 들어, CVE‑2025‑xxxx(가상의)와 같이 netfilter 모듈이 해시 시드를 고정해 두면 공격자가 대량 UDP 패킷으로 해시 테이블을 포화시켜 추가적인 메모리 손상이나 커널 패닉을 유발할 가능성이 있다. (※ 실제 CVE 번호는 확인되지 않음 → 추정:)
  • 이 취약점은 정보 노출 → 포트 탈취 → 서비스 거부 체인의 첫 단계에 해당한다. 다른 권한 상승(예: CVE‑2024‑xxxx의 커널 힙 오버플로)과 결합하면 로컬 루트 획득까지 이어질 수 있다.

🔎 탐지

  • 시스템 콜 감시: auditd 규칙으로 동일 포트에 10개 초과의 UDP 바인드 시도와 그 뒤에 와일드카드 바인드가 성공한 경우를 로깅한다.
    text
    1-a always,exit -F arch=b64 -S bind -F a0=2 -F a2>=10 -k udp_hash_saturation
  • eBPF 트레이싱: bpftrace 혹은 cBPF 프로그램으로 udp_table->hashudp_table->hash2 전환 시점(hslot->count)을 카운트하고, 비정상적인 bind() 성공 로그를 출력한다.
  • 네트워크 상태 모니터링: ss -u -a 또는 netstat -unlp에서 동일 포트가 여러 IP와 함께 와일드카드(*:port) 로도 바인드된 경우 경고 발생.

🛡️ 완화 방안

  1. 패치 적용 – upstream 커밋 “udp: Fix wildcard bind conflict check when using hash2”를 포함한 최신 커널(예 6.1.169, 6.2.x‑latest 등)으로 업데이트한다.
  2. 소켓 생성 제한sysctl net.core.somaxconn·net.ipv4.udp_mem, net.ipv6.udp_mem 등을 조정해 단일 UID당 UDP 소켓 수를 제한하고, ulimit -n으로 파일 디스크립터 상한을 낮춘다.
  3. 임시 모니터링 – 패치 적용 전까지 eBPF 기반 바인드 감시 프로그램과 auditd 규칙을 배포해 비정상적인 다중 바인드 시도를 탐지한다.
  4. 네트워크 방화벽 – 외부에서 동일 포트에 대한 대량 UDP 트래픽(특히 멀티캐스트/브로드캐스트) 유입을 차단하여 원격에서 해시 충돌을 유도하는 공격을 억제한다.

위 조치를 순차적으로 적용하면 현재 위험 수준(EPSS 0.00123, hard exploit)과 광범위한 커널 영향(다수 버전)에도 불구하고 실질적인 서비스 중단을 예방할 수 있다.

⚖️ 위험도 / 우선순위

  • 조치: monitor (모니터링)
  • 근거: CVSS=5.5 · non-KEV · EPSS=0.00123 · exploit=hard · in_scope=None
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

댓글 작성 은 로그인 후 이용할 수 있어요.

다른 사용자의 댓글은 자유롭게 읽을 수 있어요.

로그인하기

불러오는 중…