리눅스 SCTP 결함, 루트 탈취에 컨테이너 탈출까지 가능
작성일
텐센트, 18년 된 리눅스 SCTP 결함으로 루트 권한·컨테이너 탈출 시연
CVE-2026-64564 ‘SCTPhantom’, 주요 배포판 패치 이미 배포…관리자 확인 필요

리눅스 커널에 18년 가까이 잠들어 있던 결함이 뒤늦게 발견됐다. 낮은 권한의 로컬 사용자가 이 결함을 이용하면 시스템 전체를 장악하는 루트 권한을 얻을 수 있고, 특정 조건에서는 컨테이너를 벗어나 호스트까지 침투할 수 있다는 사실이 확인됐다.
이 결함은 CVE-2026-64564로 등록됐고 ‘SCTPhantom’이라는 이름이 붙었다. 리눅스가 스트림 제어 전송 프로토콜(SCTP)의 동적 주소 재구성 기능을 처리하는 과정에서 발생하는 메모리 해제 후 재사용(use-after-free) 결함이다. 텐센트 주케랩(Zhuque Lab)이 자체 개발한 자율 다중 에이전트 연구 파이프라인 ‘Corvus AI’를 활용해 이 결함을 실제 권한 상승 공격으로 완성했다. 연구진은 데비안 13, 우분투 24.04, 록키 리눅스 9, RHEL 9 계열, 오픈클라우드OS 등에서 루트 권한 획득에 성공했다고 밝혔다.
SCTP 멀티호밍 처리 중 생긴 주소 혼동
SCTP는 하나의 연결이 여러 네트워크 경로를 동시에 활용할 수 있게 하는 전송 프로토콜이다. RFC 5061에 정의된 동적 주소 재구성 기능은 연결이 유지된 상태에서도 주소를 추가하거나 제거할 수 있게 해주는데, 이때 ADD-IP·DEL-IP·SET-PRIMARY 같은 연산이 담긴 ASCONF(주소 구성 변경) 메시지가 사용된다.
문제는 리눅스가 이 메시지를 처리할 때 두 개의 서로 다른 주소를 혼용한다는 점이다. 하나는 수신한 패킷의 발신지 주소이고, 다른 하나는 ASCONF 메시지 안에 담긴 주소로 실제 처리 대상 경로(transport)를 고르는 데 쓰인다. 삭제 요청이 들어오면 커널은 이 요청을 패킷의 발신지 주소와만 비교해 안전성을 검사하는데, 실제로 캐시된 대상 경로(asconf->transport)는 검사하지 않는다.
공격자는 이 틈을 이용해 [주소 파라미터 L] [DEL-IP L] [DEL-IP 0.0.0.0] 순서로 조작된 ASCONF 메시지를 만들 수 있다. 내부 주소 L이 패킷의 발신지 주소와 다르면 L 삭제 요청은 발신지 주소 검사를 그대로 통과한다. 이 과정에서 해당 경로 객체는 해제되지만 asconf->transport는 여전히 해제된 객체를 가리키고 있다. 뒤이은 와일드카드(0.0.0.0) 삭제 요청이 이 낡은 포인터를 재사용하면서, 이미 해제된 경로가 마치 살아있는 연결의 기본 경로인 것처럼 다시 설치될 수 있다.

텐센트, 루트 탈취 넘어 컨테이너 탈출까지 실증
텐센트 주췌랩은 이 메모리 결함을 재현 가능한 권한 상승 체인으로 완성했다. 패킷 소켓 링 버퍼로 해제된 경로 객체를 다시 채워 커널 메모리 주소를 유출시키고, 반복 가능한 4바이트 커널 읽기로 인터럽트 서술자 테이블을 조사해 커널 주소 무작위화(KASLR)를 무력화했다. 이어 두 번째 use-after-free를 SCTP 인증 키 데이터로 조작해 가짜 커널 객체 그래프를 구성했고, 최종적으로 자격 증명 변경 함수를 호출해 루트 권한을 획득했다. 쉘코드나 전통적인 리턴지향 프로그래밍(ROP) 체인 없이 기존 커널 코드 경로만으로 이뤄낸 결과다.
더 나아가 연구진은 컨테이너 탈출도 시연했다. 초기 버전 익스플로잇은 net.sctp.addip_enable과 net.sctp.addip_noauth_enable 시스템 설정을 켜야 했고, 이는 CAP_NET_ADMIN 권한이 필요한 것처럼 보이게 했다. 이후 연구진은 이 기능을 소켓 단위로 켜는 방식을 찾아내 두 설정을 건드리지 않고도 공격이 가능함을 확인했다. 실제 탈출 테스트는 기본 seccomp 프로파일을 유지하고 CAP_NET_ADMIN·CAP_SYS_ADMIN 권한을 부여하지 않은 상태에서 진행됐으며, 8번 시도 중 6번 호스트의 초기 네임스페이스에서 실행되는 유저모드 헬퍼 프로세스까지 도달했다.
텐센트는 CVSS v4.0 기준 8.5점, ‘높음(High)’ 등급으로 이 결함을 평가했다. 다만 미국 국가취약점데이터베이스(NVD)는 별도 점수나 취약점 분류를 아직 부여하지 않았다. The Hacker News는 미국 사이버안보국(CISA)의 알려진 악용 취약점(KEV) 목록에도 이 결함이 등재되지 않았다고 전했다. 공개된 익스플로잇 코드는 아직 없으며, 텐센트 외부에서 이 결과를 재현했다는 보고도 없다. 연구진이 발표한 자료에는 테스트에 사용한 컨테이너 런타임 이름도 명시되지 않았다.
2007년 코드가 18년 만에 드러났다
결함의 근본 원인은 2007년 12월 배포된 리눅스 2.6.25에 도입된 코드로 거슬러 올라간다. 이후 나온 모든 리눅스 커널에 해당 로직이 그대로 남아 있었던 셈이다. 텐센트 연구자 푸리에 장(Fourie Zhang)은 커널 메인테이너들과의 조율된 대응 절차를 거쳐 8월 6일(현지시각) SCTPhantom을 공개적으로 공표했다. 리눅스 CVE 팀은 이보다 이틀 앞선 8월 4일(현지시각) 공식 CVE 기록을 발행했다.
텐센트가 공개한 타임라인에 따르면 연구진은 7월 12일(현지시각) 이 결함을 처음 식별하고 같은 날 비공개 신고를 시작했다. 7월 15일(현지시각)까지 안정적인 루트 익스플로잇을 완성했고, 7월 15일부터 23일(현지시각) 사이 여러 커널 계열에서 테스트를 진행했으며, 7월 27일(현지시각) 컨테이너-호스트 탈출까지 검증했다. 수정 코드는 7월 24일(현지시각) 네트워킹 트리에 반영됐고, 커밋 번호는 9b2854f86f0b다. 이 패치는 현재 처리 중인 ASCONF 청크가 참조하는 경로에 대한 삭제 요청을 거부하도록 만든다.
수정이 적용된 최초 배포판은 리눅스 6.6.148, 6.12.101, 6.18.42, 7.1.6이며 8월 3일(현지시각) 안정 브랜치로 배포됐다. 메인라인에서는 7.2-rc5부터 반영됐다. 같은 코드 영역에서 발견된 두 번째 use-after-free 결함은 8월 6일(현지시각) 별도로 패치됐는데, 이는 8월 3일 안정 배포 이후 나온 것이라 해당 네 개 커널에는 포함되지 않았다.
관리자가 지금 확인해야 할 것
엔터프라이즈 배포판은 겉으로 보이는 커널 버전 번호를 바꾸지 않은 채 보안 패치만 백포트하는 경우가 많다. 예를 들어 5.14 기반 커널을 쓰는 RHEL 시스템도 6.x나 7.x로 옮기지 않은 채 수정 사항을 받을 수 있다. 따라서 관리자는 uname -r 출력만으로 노출 여부를 판단하지 말고 자사 배포판의 보안 추적 페이지와 패키지 변경 내역을 확인해야 한다. 이번 결함은 로컬 공격이라는 점, 그리고 대상 시스템에서 SCTP가 실제로 사용 가능해야 한다는 조건이 있어 노출 범위 자체는 제한적이다. SCTP가 필요하지 않은 환경이라면 관련 모듈을 차단하는 것만으로 공격 표면을 완전히 없앨 수 있다.
텐센트는 이번 발견의 공로를 Corvus AI에 돌렸다. 이는 지난 7월 공개된 ‘GhostLock’에 이어 올해 들어 기계 지원으로 발견된 오래된 커널 결함 중 하나로 꼽힌다. SCTPhantom은 관련 없는 KVM 탈출 결함 ‘Zapscape’와 같은 날 공개됐으며, 두 결함의 수정 사항 역시 같은 네 개 안정 브랜치에 함께 담겼다.