SK쉴더스 로고
ADT캡스캡스홈
SK쉴더스

리눅스 커널 페이지 캐시 변조 권한 상승 취약점 (CVE-2026-46300)

EQST Now | 2026.11.02

NOW Briefing

Brief 1 리눅스 커널 로컬 권한 상승 취약점 Fragnesia(CVE-2026-46300)가 실제 공격에 악용돼 2026년 10월 28일 CISA KEV 목록에 등재됐습니다.
Brief 2 저권한 로컬 사용자가 읽기 전용 파일의 페이지 캐시(파일 내용을 담아 두는 커널 메모리)를 덮어써 root 권한을 획득할 수 있습니다.
Brief 3 각 커널 브랜치의 패치 버전 이상으로 업그레이드하고, 재부팅 후 실행 커널이 해당 패치 버전 이상인지 확인해야 합니다.

‍

리눅스 커널 페이지 캐시 변조 권한 상승 취약점 (CVE-2026-46300)

‍

■ 개요

‍

CVE-2026-46300은 리눅스 커널의 네트워크 스택에서 발생하는 로컬 권한 상승 취약점입니다. 커널이 수신한 네트워크 데이터를 합쳐 처리하는 과정에서 "이 메모리는 외부 소유이므로 직접 쓰면 안 된다"고 알리는 공유 프래그먼트 플래그가 사라지고, 그 결과 IPsec 복호화 경로가 파일 내용이 담긴 페이지 캐시에 직접 씁니다. 공개 레코드 기준 영향 범위는 커널 3.9부터이며, 7.1 이상은 영향을 받지 않습니다. 공격에는 저권한 계정이 비특권 사용자·네트워크 네임스페이스(일반 사용자도 권한 없이 만들 수 있는 커널 자원 격리 공간)를 만들어 네트워크 설정 권한(CAP_NET_ADMIN)을 확보할 수 있어야 합니다. 보안 기업 Tenable 분석에 따르면 이는 대다수 배포판의 기본 설정이므로, 서버·컨테이너 호스트·빌드 러너처럼 저권한 계정이 존재하는 환경이 대상이 됩니다.

공격이 성립하면 저권한 사용자가 읽기 전용 바이너리나 인증 설정 파일의 메모리 사본을 원하는 바이트로 바꿔 root 권한을 얻습니다. 디스크의 원본 파일은 그대로 남기 때문에 디스크 해시를 비교하는 무결성 검사로는 변조를 잡아내지 못합니다. 원격 접근이 필요 없는 로컬 취약점이지만, 인증 없이 명령을 실행할 수 있는 다른 취약점과 엮이면 외부 공격자가 단일 침투 경로로 root까지 도달할 수 있습니다.

CISA는 실제 악용이 확인된 취약점 목록(KEV)에 이 취약점을 2026년 10월 28일 추가하고, 구속적 운영 지침(BOD) 26-04에 따라 10월 31일까지 조치하도록 요구했습니다. KEV 등재 이틀 전인 10월 26일 공개되고 10월 29일 갱신된 보안 기업 Dream의 보고서는, 공격자가 PHP 코어의 인증이 필요 없는 원격 코드 실행 취약점(PHP2Shell, CVE-2026-109618·CVE-2026-109619)과 이 커널 취약점을 엮어 외부 노출 방화벽 장비 24대와 내부 방화벽 관리 서버 1대에서 root 권한을 획득했다고 밝혔습니다. 보고서에 따르면 공격자가 버전을 선별해 좁힌 표적 240대에는 미국·일본·대만과 함께 한국이 포함됐습니다.

‍

■ 요약

‍

항목 내용
CVE ID CVE-2026-46300 (Fragnesia, 패킷 버퍼 병합 시 공유 프래그먼트 플래그 유실)
CVSS 점수 CVSS v3.1 7.8
취약점 유형 • CWE-123(의도하지 않은 위치에 쓰기)
• CWE-456(변수 초기화 누락)
• 로컬 권한 상승
영향/위험 • 로컬 저권한 사용자의 root 권한 획득 가능, 실제 공격에서 확인됨
• 읽기 전용 바이너리·설정 파일의 메모리 사본 임의 변조 가능
• 디스크 파일은 그대로여서 디스크 기반 무결성 검사로 탐지되지 않음
• 인증이 필요 없는 원격 코드 실행 취약점과 엮여 root까지 연결된 사례 보고됨
취약 버전 • 커널 3.9 이상에서 영향 시작
• 각 안정 브랜치의 아래 패치 버전 미만 전체
• 저권한 계정의 비특권 사용자·네트워크 네임스페이스 생성이 가능한 환경
패치 버전 • 5.10.257
• 5.15.208
• 6.1.174
• 6.6.141
• 6.12.91
• 6.18.33
• 7.0.10
• 7.1 이상은 영향 없음

‍

■ 기술 분석

‍

커널은 네트워크 패킷을 sk_buff(통칭 skb)라는 버퍼 구조체에 담아 처리하고, TCP 수신 경로에서는 연속해 도착한 skb를 하나로 합쳐 메모리 사용량을 줄입니다. 이 병합을 담당하는 함수가 net/core/skbuff.c의 skb_try_coalesce()입니다. 버퍼에 붙은 페이지 조각(프래그먼트)이 커널 외부 소유이거나 페이지 캐시에 속한 경우 SKBFL_SHARED_FRAG 플래그로 표시하는데, 이 함수가 프래그먼트 디스크립터를 옮길 때 플래그는 함께 옮기지 않았습니다.

이 플래그는 뒤따르는 쓰기 경로의 안전 판단 근거입니다. 리눅스의 IPsec 처리 계층인 XFRM의 ESP(패킷을 암호화하는 IPsec 프로토콜) 입력 경로는 skb_has_shared_frag() 결과를 보고 복제되지 않은 비선형 skb에서 skb_cow_data()를 건너뛸 수 있는지 판단합니다. 병합으로 플래그가 사라진 버퍼는 공유 프래그먼트가 없는 것으로 판정되므로, ESP는 페이지 캐시 페이지 위에서 직접 복호화합니다.

ESP가 복호화 결과 바이트를 그대로 페이지 캐시에 기록하므로, 공격자가 입력을 조절하면 읽기 전용 파일의 캐시 내용을 원하는 값으로 바꿀 수 있습니다. 변경은 메모리에만 남고 디스크 원본은 유지되며, 캐시가 축출되거나 재부팅하면 사라집니다.

아래 코드는 안정 커널 백포트 커밋 9d3e5fd1의 net/core/skbuff.c 패치 구간입니다. skb_try_coalesce()가 프래그먼트 디스크립터를 복사하고 개수를 더한 직후, 원본 버퍼의 공유 프래그먼트 플래그를 대상 버퍼로 전파하는 두 줄을 추가했습니다.

diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index ef24911af05a8..fd743051c8987 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -5512,6 +5512,8 @@ bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from,
 	       from_shinfo->frags,
 	       from_shinfo->nr_frags * sizeof(skb_frag_t));
 	to_shinfo->nr_frags += from_shinfo->nr_frags;
+	if (from_shinfo->nr_frags)
+		to_shinfo->flags |= from_shinfo->flags & SKBFL_SHARED_FRAG;
 
 	if (!skb_cloned(from))
 		from_shinfo->nr_frags = 0;

커밋 메시지는 상위 커밋 f84eca58의 백포트임을 밝히며, 여유 공간에 바이트를 복사하는 경로는 프래그먼트 디스크립터를 넘기지 않으므로 플래그 전파가 필요하지 않다고 적고 있습니다. Fixes: 태그로는 체크섬 생성 관련 커밋(cef401de7be8)과 ESP의 공유 프래그먼트 in-place 복호화 회피 커밋(f4c50a4034e6)을 함께 지목합니다. KEV 항목의 취약점 이름은 이 취약점을 변수 초기화 누락으로 분류하지만, 커밋과 CVE 레코드가 기술하는 실제 동작은 병합 시 플래그 전파 누락입니다.

‍

■ PoC

‍

실제로 동작하는 PoC C 소스와 설명 문서는 공개 저장소에 올라와 있으며, 커밋 이력에서 확인되는 공개 시점은 2026년 5월 13일입니다. 저장소에 표기된 작성자는 William Bowling입니다. 이 PoC는 사용자 네임스페이스와 네트워크 네임스페이스를 만들어 CAP_NET_ADMIN을 확보한 뒤 XFRM 상태를 구성하고, TCP 소켓을 TCP 위로 ESP를 받는 커널 기능(espintcp)으로 전환해 수신 큐에 들어간 파일 페이지를 ESP 암호문처럼 처리하게 만듭니다. 문서 기준 표적은 /usr/bin/su이며, 페이지 캐시의 앞부분 192바이트를 권한 상승용 코드로 바꿔 성공 시 root 셸을 얻습니다.

실행에는 비특권 네임스페이스 생성과 XFRM 보안 연계 설정이 필요하며, 원저자 문서는 Ubuntu에서 기본 적용되는 AppArmor의 비특권 네임스페이스 제한(kernel.apparmor_restrict_unprivileged_userns)을 먼저 해제해야 한다고 안내합니다. PoC 코드는 본문에 싣지 않았습니다. 원문은 참고 자료의 링크에서 확인할 수 있습니다.

⚠️ WARN

PoC 코드는 변경 내용을 페이지 캐시에만 남깁니다. 원저자 문서도 작업 후 캐시를 비우거나 재부팅하라고 안내합니다. 캐시를 비우지 않은 채 검증한 시스템에는 변조된 캐시가 남아 있을 수 있습니다.

‍

■ 탐지 및 점검

‍

• uname -r로 실행 중인 커널이 해당 브랜치의 패치 버전 이상인지 확인합니다. 패키지만 교체하고 재부팅하지 않은 호스트는 여전히 이전 커널로 동작합니다.

• 비밀번호 없이 su가 성공하는지 확인하고, su의 인증 설정 파일 /etc/pam.d/su의 인증 규칙이 항상 인증을 통과시키는 모듈 pam_permit.so로 바뀌어 있는지 점검합니다. Dream 보고서가 실제 공격에서 확인한 변조 지점이며, 페이지 캐시만 바뀐 경우 디스크 원본과 해시는 정상으로 보입니다.

• IPsec을 사용하지 않는 호스트에서 lsmod로 esp4·esp6 모듈 적재 여부를 확인합니다.

• 저권한 계정이 사용자 네임스페이스를 생성할 수 있는지 점검합니다. PoC 코드는 네임스페이스나 XFRM 설정이 막힌 환경에서는 설정 단계에서 중단되며, Ubuntu는 kernel.apparmor_restrict_unprivileged_userns 값으로 제한 여부를 확인할 수 있습니다.

• 외부에 관리 인터페이스를 노출한 PAN-OS 방화벽은 Dream 보고서가 제시한 상관 신호를 함께 조사합니다. 공개 디렉터리의 103바이트 PHP 웹셸(/unauth/php/change_password.php), 8포트 리버스 SSH 터널, /usr/local/lib/.panops/ 경로의 스크립트를 띄우는 systemd 서비스와 rc.local 부팅 훅이 해당 신호입니다. 파일명 하나만으로 단정하지 말고 경로·크기·부팅 훅·외부 통신을 함께 대조합니다.

• 전체 침해 지표는 Dream 보고서와 그 보고서가 가리키는 Palo Alto Networks 권고에서 확인합니다.

‍

■ 대응 방안

‍

• 각 브랜치의 패치 버전(5.10.257·5.15.208·6.1.174·6.6.141·6.12.91·6.18.33·7.0.10) 이상으로 커널을 올리고 재부팅한 뒤, 실행 커널 버전을 다시 확인합니다.

• 오토스케일링 그룹이나 컨테이너 노드처럼 이미지 기반으로 배포되는 환경은 실행 중인 노드와 함께 베이스 이미지와 시작 템플릿도 갱신합니다.

• IPsec 종단이 아닌 호스트는 esp4·esp6 모듈을 modprobe 블랙리스트에 등록해 다음 부팅부터 적재되지 않게 합니다. 이미 사용 중인 모듈은 즉시 내릴 수 없으므로, VPN·IPsec을 운영하는 장비에는 적용할 수 없습니다.

• PHP2Shell 영향 버전(8.5.12·8.4.27·8.3.36·8.2.35 미만)의 PHP를 외부에 노출한 채 운영한 방화벽·웹 서버는 침해 여부를 우선 조사하고, 침해가 확인되면 장비에서 읽힐 수 있었던 자격증명과 개인키를 재발급합니다.

• 커널을 패치해도 공격자가 root 권한으로 남긴 흔적은 사라지지 않습니다. 설정 변조, 추가된 계정, 잔존 웹셸과 터널을 점검한 뒤 재구축 여부를 판단합니다.

💡 TIP

즉시 재부팅할 수 없는 운영 서버는 커널 라이브 패치로 임시 대응할 수 있습니다. 재부팅 전까지만 유효하므로, 정기 점검 일정에 커널 교체와 재부팅을 포함해야 합니다.

‍

[참고 자료]

• CISA, 악용 취약점 목록에 2건 추가 — 2026년 10월 28일

• CISA 악용 취약점 목록 — CVE-2026-46300 항목

• CVE-2026-46300 공식 레코드 (영향 버전·패치 버전·CVSS)

• 커널 패치 커밋 — net: skbuff: preserve shared-frag marker during coalescing

• Fragnesia PoC 원문 — fragnesia.c, README (고정 커밋 3fed19d)

• Tenable, Fragnesia FAQ — 공개 시점·전제 조건·완화책

• Dream, PHP2Shell과 Fragnesia를 엮은 공격으로 서버 25대 장악 보고

• The Register, 중국 연계 추정 공격자의 PHP2Shell 자체 익스플로잇 보도

• Zscaler, PHP2Shell(CVE-2026-109618·CVE-2026-109619) 분석 — 영향 버전과 인증이 필요 없는 조건

• 베스핀글로벌 보안 공지 — 리눅스 커널 권한 상승 취약점 대응 권고

  • #EQST_NOW
  • #취약점

관련 서비스

더 많은 보안 인사이트

SK쉴더스 유튜브 채널에서 확인하세요.

SK쉴더스 유튜브 채널에서 확인하세요.
보안 트렌드와 대응방법

매월 뉴스레터로 확인하세요.

매월 뉴스레터로 확인하세요.