English Advisory →
CVE-2025-396829.8/CRITICALCISA KEV 등재CWE-754

리눅스 커널 TLS Zero-Length 레코드 처리 취약점 (CVE-2025-39682) 보안 권고

영향받는 벤더 / 생태계
Linux
대상 컴포넌트 / 패키지
Linux Kernel
권고문 발행일
2025-09-05

실무자 핵심 요약 (Executive Summary)

SECOPS ASSESSMENT
영향 대상

커널 내장 TLS(ktls) 기능을 사용하는 리눅스 커널 기반 시스템 전반

파급 효과

원격 공격자가 특수하게 조작된 TLS 레코드를 전송하여 커널 메모리 손상 및 원격 코드 실행(RCE) 유발 가능

권장 조치

사용 중인 배포판의 최신 안정화 커널 버전으로 즉시 업데이트 수행

영향받는 제품 및 버전 범위

Linux Kernel 6.x 및 하위 장기 지원(LTS) 버전 중 ktls 모듈이 활성화된 환경

권장 패치 및 임시 완화(Workaround) 가이드

PATCH & WORKAROUND
  • 커널 버전 업데이트: 사용 중인 OS 배포판에 따라 최신 패치가 적용된 커널로 업데이트하십시오.
bash
# Debian/Ubuntu
sudo apt update && sudo apt install linux-image-generic
# RHEL/CentOS/AlmaLinux
sudo dnf update kernel
  • 시스템 재부팅: 커널 업데이트 후 반드시 시스템을 재부팅하여 변경 사항을 적용하십시오.
  • 임시 완화 조치: 즉각적인 패치가 불가능한 경우, 커널 TLS 모듈을 비활성화하거나 관련 설정을 검토하십시오.
bash
# TLS 모듈 로드 여부 확인
lsmod | grep tls
# 모듈 비활성화 (서비스 영향도 확인 필요)
sudo modprobe -r tls
권장 아키텍처 방어 통제 (Recommended Security Control)
SentinelOne Singularity AI EDR
CISA KEV 등재 및 EPSS 점수(0.94)가 매우 높으므로, 모든 리눅스 서버 및 엔드포인트에 대해 최우선 순위로 커널 패치를 적용할 것을 권고합니다.

패치 재부팅 전까지 서버와 엔드포인트를 노리는 커널 권한 상승(LPE) 공격을 AI 행위 탐지로 차단하세요

Windows 및 Linux 서버의 긴급 OS 패치에는 점검 창(Maintenance Window)이 필요합니다. 패치 전까지 비정상 프로세스 생성과 메모리 악용을 실시간으로 격리하세요.

MITRE ATT&CK 100% 탐지 · 1클릭 자동 롤백

취약점 발생 원리 및 공격 메커니즘

본 취약점은 리눅스 커널의 TLS 구현체에서 rx_list에 포함된 길이가 0인 레코드를 처리할 때 발생하는 논리적 결함(CWE-754)입니다. recvmsg() 시스템 콜은 연속된 데이터 레코드 또는 단일 비데이터 레코드를 처리해야 하며, TLS 1.3 환경에서는 복호화 전까지 레코드 유형을 확정할 수 없습니다. 특히 제로 카피(Zero-copy) 복호화가 수행될 때, 데이터가 사용자 공간 버퍼로 직접 복호화되어 큐에 넣을 skb(Socket Buffer)가 존재하지 않음에도 불구하고, 특정 조건에서 커널이 잘못된 포인터 참조를 시도하거나 상태 머신 오류를 일으킵니다. CISA KEV에 등재된 만큼 실제 공격에 악용될 가능성이 매우 높으며, 커널 권한에서의 임의 코드 실행으로 이어질 수 있는 치명적인 위협입니다.

공식 보안 권고문 및 참조 링크

NVD Original English Description

In the Linux kernel, the following vulnerability has been resolved: tls: fix handling of zero-length records on the rx_list Each recvmsg() call must process either - only contiguous DATA records (any number of them) - one non-DATA record If the next record has different type than what has already been processed we break out of the main processing loop. If the record has already been decrypted (which may be the case for TLS 1.3 where we don't know type until decryption) we queue the pending record to the rx_list. Next recvmsg() will pick it up from there. Queuing the skb to rx_list after zero-copy decrypt is not possible, since in that case we decrypted directly to the user space buffer, and we don't have an skb to queue (darg.skb points to the ciphertext skb for access to metadata like length). Only data records are allowed zero-copy, and we break the processing loop after each non-data record. So we should never zero-copy and then find out that the record type has changed. The corner case we missed is when the initial record comes from rx_list, and it's zero length.

SecOps Advisory Dispatch & RSS Feed

일간 취약점 브리핑 및 긴급 Zero-Day 경보 구독

보안 실무자와 인프라·백엔드 엔지니어를 위해 매일 아침 주요 취약점과 패치 우선순위를 요약해 발송합니다.

Slack / Teams / RSS 리더 연동: