[공격] 분석 — CVE-2026-31533
CVE-2026-31533 is a critical use‑after‑free in the Linux kernel TLS encryption path that can lead to remote code execution when kTLS is enabled, and it must be patched immediately.
📋 요약
- 심각도 critical · CVSS 9.8 · EPSS 0.00388 · 악용난이도 moderate
🔍 공격 기법
- 공격 표면:
net/tls서브시스템, 특히tls_do_encryption()함수와 비동기 콜백tls_encrypt_done(). kTLS가 활성화된 소켓(예: TCP + TLS)에서sendmsg()호출이 트리거 지점이며, 입력 파라미터는 일반적인 TLS 레코드 데이터이다. - 전제 조건:
- 시스템에 kTLS(
CONFIG_TLS)가 컴파일·활성화되어 있어야 함. - 공격자는 동일 호스트 혹은 원격에서 다수의 TLS 연결을 생성해
crypto_aead_encrypt()이-EBUSY를 반환하도록 백로그 상황을 유도할 수 있어야 한다(리소스 고갈·동시 암호화 요청).
- 시스템에 kTLS(
- 단계:
- 정찰 –
/proc/crypto, 커널 설정(cat /boot/config‑$(uname -r) | grep TLS) 등을 통해 kTLS 사용 여부 확인. - 초기 접근 – 정상적인 TLS 핸드쉐이크 후, 다량의 작은 TLS 레코드를
sendmsg()로 전송해 암호화 요청이 백로그에 쌓이게 함. - 실행·권한 획득 –
-EBUSY반환 시 오류 경로가 두 번 실행돼ctx->encrypt_pending가 0 이하로 감소하고, scatterlist 엔트리가 중복 복구된다. 이때tls_encrypt_async_wait()가 대기 로직을 건너뛰어 아직 진행 중인 비동기 콜백이 남은 상태에서tls_rec구조체가 해제된다(bpf_exec_tx_verdict()). - Use‑After‑Free 활용 – 공격자는 사전에 커널 힙에 스프레이(예: 대량의 TLS 레코드와 동일 크기의 객체)하여 freed된
tls_rec메모리 영역에 제어 흐름을 삽입한다. 비동기 콜백이 실행될 때 해제된 구조체를 참조하면서 공격자가 배치한 가짜 함수 포인터가 호출되어 원격 코드 실행(RCE)이 발생한다.
- 정찰 –
- 공격 조건과 CVSS 연계: AV = Network, AC = Low, PR = None, UI = None와 일치하는 원격 트리거 가능성을 그대로 반영한다.
악용 가능성: 이 취약점은 AV:N(네트워크를 통한 원격 접근)과 PR:N(권한 없이) 조건을 만족하므로 공격자는 대상 시스템에 직접 접속할 필요 없이 TLS 트래픽만 전송하면 됩니다. AC:L(낮은 난이도)이라는 점은, crypto_aead_encrypt()가 ‑EBUSY를 반환하도록 하는 패킷을 만들기 위한 입력값 조작이 비교적 간단하다는 것을 의미합니다; 즉, TLS 암호화 요청을 백로그에 넣는 흐름만 재현하면 됩니다. EPSS=0.00388은 현재까지 관측된 실제 공격 시도가 아주 적지만 존재함을 보여주며, KEV 미등재는 대규모 악용 사례가 아직 보고되지 않았다는 점을 반영합니다. 공격 표면은 커널 TLS(TLS offload)를 사용하는 네트워크 인터페이스와 tls_do_encryption()·tls_encrypt_done() 함수이며, 노출되는 엔드포인트는 일반적인 TCP/UDP 포트에서 동작하는 TLS 서버(예: HTTPS, DTLS)입니다. 공격자는 TLS 핸드쉐이크 혹은 데이터 전송 중에 ‑EBUSY를 유발하도록 조작된 암호화 요청을 보내면, 백로그 큐와 콜백 경로에서 encrypt_pending과 scatterlist 항목이 이중 해제되어 커널 메모리 손상이 발생합니다. 따라서 원격·무인 (low‑complexity) 공격이 가능하지만, 실제 악용 빈도는 낮은 편이며 특수히 조작된 TLS 패킷을 전송할 수 있는 환경이 전제됩니다.
💥 영향 분석
- 성공 시 공격자는 커널 레벨에서 임의 코드를 실행하여 전체 시스템 장악이 가능하고, 서비스 중단(DoS)도 동반될 수 있다.
- kTLS가 비활성화된 경우 로컬 프로세스 간 메모리 공유를 통한 권한 상승 시나리오가 존재하지만, 원격 RCE는 kTLS 사용 환경에 국한된다.
🔗 관련 취약점·체이닝
- 유형: CWE‑416 (Use After Free) → 메모리 해제 후 재사용 → 임의 코드 실행.
- 가능한 체인:
- 동일 커널 버전에서 존재하는 다른 비동기 암호화 콜백 결함(CVE‑2025‑xxxx 등, 실제 번호 확인 필요)과 조합하면 비동기 작업을 강제로 재진입시켜 추가적인 메모리 손상을 유발할 수 있다.
- BPF 프로그램이
bpf_exec_tx_verdict()를 호출하는 경우, 악의적인 BPF 필터와 결합해 해제된 객체를 재사용하도록 조작 가능(추정).
🔎 탐지
- 커널 로그에
tls_do_encryption: double cleanup혹은tls_encrypt_done: use‑after‑free와 같은 Oops 메시지가 기록될 경우. auditd또는eBPF트레이스포인트(tracepoint:net_tls:tls_encrypt_done,tracepoint:net_tls:tls_do_encryption)에서encrypt_pending값이 0 이하로 변하는 이벤트 감시.- 비정상적인
crypto_aead_encrypt()의-EBUSY반환 빈도 급증 모니터링.
🛡️ 완화 방안
- 패치 적용: 해당 CVE가 포함된 커널 버전(5.15.204+, 6.1.170+, 6.6.136+, 6.7.7+, 6.8.2+ 등)으로 업그레이드하십시오.
- kTLS 비활성화:
sysctl -w net.ipv4.tcp_tls_enable=0혹은 커널 컴파일 시CONFIG_TLS=n로 설정해 위험 표면을 제거합니다. - 연결 제한: 동시에 활성화되는 TLS 연결 수를 제한하고, 암호화 백로그 큐 크기를 조정하여
-EBUSY발생 가능성을 낮춥니다. - 보안 모듈 적용: SELinux/AppArmor 정책으로
tls_rec구조체와 BPF 프로그램의 권한을 최소화합니다. - 모니터링 강화: 위 탐지 지표를 SIEM에 연동해 실시간 알림을 구성하고, 이상 징후 발생 시 즉시 서비스 재시작 절차를 준비하십시오.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=9.8 · non-KEV · EPSS=0.00388 · exploit=moderate · in_scope=None