취약점 개요
CIFSwitch(CVE-2026-46243)은 Linux 커널의 SMB/CIFS 클라이언트가 cifs.spnego 키 타입을 등록하면서 키의 description(디스크립션) 필드 출처를 검증하지 않아 발생하는 로컬 권한 상승 취약점이다. 공격자는 위조한 SPNEGO 키로 root 권한의 cifs.upcall 헬퍼를 자신의 마운트 네임스페이스로 묶은 후, 가상 NSS 라이브러리를 통해 임의의 코드를 실행할 수 있다.
해당 취약점은 2007년부터 존재해 왔으나, 실제 공격은 네임스페이스 인라이잉이 들어간 cifs-utils 6.14 이상에서만 가능해 영향 범위를 비교적 최신 환경으로 좁혀졌다. 연구자(SpaceX 보안 엔지니어 Asim Viladi Oglu Manizada) 분석 기준, 기본 설치만으로 악용 가능한 배포판에는 Linux Mint 21.3·22.3, CentOS Stream 9, Rocky Linux 9, AlmaLinux 9, SLES 15 SP7, Kali Linux 2021.4~2026.1이 포함된다. Ubuntu 18.04~24.04, Debian 11~13, openSUSE Leap/Tumbleweed, Oracle Linux 8·9도 cifs-utils가 추가 설치된 경우 영향 범위에 들어간다.
CVSS 점수는 7.8(High)이며, 공격 벡터는 로컬(AV:L), 공격 복잡도는 낮음(AC:L), 권한 요구는 낮음(PR:L), 사용자 개입 불필요(UI:N), 범위는 변경되지 않음(S:U)이다. 기밀성, 무결성, 가용성에 모두 높은 영향(C:H/I:H/A:H)을 미친다.
기술적 분석
취약점 원인
영향 조건이 cifs.spnego 키 생성 경로로 좁혀지는 이유는 fs/smb/client/cifs_spnego.c의 cifs_spnego_key_type 구조체가 .vet_description 콜백을 정의하지 않은 채 커널에 등록되어 있기 때문이다. 해당 콜백은 키 서비스시스템이 새로운 키 디스크립션을 받을 때 호출하는 검증 훅으로, 부재 시 커널은 request_key(2)나 add_key(2)를 통한 사용자 영역의 키 생성도 동일하게 허용한다.
검증 훅이 비어있으면 cifs.spnego 디스크립션의 신뢰 모델도 함께 무너진다. cifs.spnego 디스크립션은 본래 서버 주소·uid·creduid·pid·upcall_target 등을 세미콜론으로 연결한 권한 정보다. 이 값은 커널 CIFS 코드가 비공개 spnego_cred 컨텍스트에서만 만들도록 설계되어, 사용자 영역의 cifs.upcall은 이를 커널이 보안한 사실로 신뢰한다. 그러나 검증이 없으면 비특권 사용자가 동일한 형식의 위조 디스크립션을 직접 만들어 /sbin/request-key로 root 권한 헬퍼를 걸 수 있다.
위조 디스크립션이 root 헬퍼까지 전달되면 cifs.upcall은 upcall_target=app 분기에서 switch_to_process_ns(arg->pid)를 호출해 공격자가 지정한 PID의 마운트 네임스페이스로 진입한다. 이후 getpwuid() 호출이 일어나는데, 이 함수는 NSS 설정과 libnss_*.so.2를 동적으로 적재한다. 결과적으로 공격자 네임스페이스의 /etc/nsswitch.conf와 가상 NSS 모듈이 root 컨텍스트에서 로드된다.
이 경로를 차단하기 위해 메인라인 패치는 키 타입에 검증 콜백을 추가해 사용자 영역이 생성하는 키를 거부하는 구조로 바꿨다. current_cred()가 커널 내부의 spnego_cred와 일치하지 않으면 -EPERM을 반환하며, request_key(2)/add_key(2) 경로의 위조 시도가 차단된다.
공격 시나리오
- 공격자는 비특권 사용자로 로그인하거나 웹 쉘, SSH, 컨테이너 쉘 등의 접근 권한을 획득한다.
- cifs 모듈이 로드되어 있는지 확인(lsmod | grep cifs)하고, request-key가 /sbin/request-key로 cifs.upcall을 호출할 수 있는지 확인한다(/etc/request-key.d/cifs.spnego.conf).
- 공격자는 자신의 네임스페이스에 위조한 NSS 라이브러리(libnss_attack.so.2)를 생성하고, /etc/nsswitch.conf에 이를 참조하도록 설정한다. 이 라이브러리는 root 권한으로 실행될 때 /etc/sudoers.d에 공격자의 sudo 권한을 추가하는 코드를 포함한다.
- 공격자는 request_key(2) 시스템 콜을 호출하며, description 필드에 "cifs.spnego;ver=2;uid=0;creduid=0;pid=<자신의PID>;target=app;host=..."와 같은 형식의 위조 디스크립션을 전달한다.
- 키 서비스시스템은 cifs.spnego 키를 인스턴스화하려 시도하고, /sbin/request-key를 root 권한으로 실행한다.
- request-key는 /etc/request-key.d/cifs.spnego.conf 규칙에 따라 /usr/sbin/cifs.upcall을 호출한다. 이때 cifs.upcall은 description을 파싱하고 upcall_target=app이면 switch_to_process_ns(arg->pid)를 호출해 공격자의 네임스페이스로 진입한다.
- cifs.upcall이 getpwuid()를 호출하면 공격자가 준비한 위조 NSS 라이브러리가 root 컨텍스트에서 로드된다.
- 라이브러리의 초기화 코드가 root 권한으로 실행되며, /etc/sudoers.d에 "attacker ALL=(ALL) NOPASSWD:ALL"을 추가한다.
- 공격자는 sudo su - 등으로 root 셀을 획득한다.
영향 범위
이 취약점은 다음 조건이 모두 충족될 때만 악용 가능하다.
- cifs 모듈이 로드 가능하거나 이미 로드되어 있어야 한다. 기본적으로 대부분의 배포판에서 cifs 모듈은 사용 가능하다.
- cifs-utils 패키지가 설치되어 있어야 한다. 이 패키지는 cifs.upcall 헬퍼를 포함하며, SMB/CIFS 파일 시스템을 마운트할 때 필요하다. 파일 공유 환경에서는 필수로 설치되는 경우가 많다.
- /etc/request-key.d/cifs.spnego.conf가 존재하고, request-key가 cifs.upcall을 호출하도록 설정되어 있어야 한다.
- 비특권 사용자가 마운트 네임스페이스를 생성할 수 있어야 한다(unshare -m). 일부 배포판에서는 kernel.unprivileged_userns_clone=0 또는 kernel.userns.allowed로 비특권 네임스페이스 생성이 제한되어 있을 수 있다.
기본 설치 상태에서 이 모든 조건을 만족하는 배포판은 Linux Mint, Kali Linux, CentOS Stream 9, Rocky Linux 9, AlmaLinux 9, SLES 15 SP7 등이다. Ubuntu, Debian, openSUSE, Oracle Linux는 cifs-utils가 추가 설치된 경우에만 영향을 받는다.
악용 가능성
현재 PoC가 GitHub 저장소에 동시 배포된 상태이며, 영향받는 다수 배포판에서 그대로 동작한다. 다만 패치는 커널 정식 소스에 반영되었으나 배포판마다 적용 시점이 달라, 패치 적용 전 임시 완화책 병행이 필요하다.
실제 악용을 위해서는 공격자가 이미 시스템에 비특권 접근 권한을 가지고 있어야 한다. 웹 애플리케이션 취약점, 취약한 SSH 설정, 컨테이너 이스케이프 등을 통해 초기 접근 권한을 획득한 후 이 취약점을 사용하여 권한 상승을 시도할 수 있다.
대응 전략
즉시 대응 (24시간 이내)
-
취약점 확인: 영향 받을 가능성이 있는 모든 호스트에서 다음 명령으로 실행 중인 커널 버전을 확인하고, 배포판 보안 고지에 따라 패치 여부를 확인한다.
uname -r -
패키지 확인: cifs-utils 패키지 설치 여부를 확인하고, 사용 사례가 없는 호스트에서는 제거 대상으로 분류한다.
dpkg -l cifs-utils # Debian/Ubuntu rpm -q cifs-utils # RHEL/CentOS/Rocky/AlmaLinux -
취약 환경 분리: 기본 구성으로 영향받는 배포판(Linux Mint 21.x·22.x, CentOS Stream 9, Rocky 9, AlmaLinux 9, SLES 15 SP7, Kali 2021.4~2026.1)과 비특권 셸 접근이 허용되는 시스템(크로스사이트·점프 호스트)를 별도로 분류하여 우선 점검 대상으로 지정한다.
-
임시 완화 조치: 패치 적용 전까지 다음 중 하나 이상의 완화 조치를 적용한다.
- cifs-utils 패키지 제거(필요한 경우)
- cifs 모듈 블랙리스트 등록 및 언로드
- request-key.conf에서 cifs.spnego 규칙 비활성화
- 비특권 사용자 네임스페이스 비활성화
단기 대응 (72시간 이내)
-
패치 적용: 확인된 영향 호스트에 대해 배포판 보안 업데이트를 통해 커널 패치(commit 3da1fdf4efbc)가 포함된 버전으로 즉시 업데이트하고 재부팅한다.
# Ubuntu/Debian apt update && apt upgrade -y reboot # RHEL/CentOS/Rocky/AlmaLinux yum update -y kernel reboot -
cifs 모듈 차단: 업데이트 적용 전까지 공격 표면을 제거하기 위해 cifs 모듈을 차단한다.
echo "blacklist cifs" > /etc/modprobe.d/cifs-blacklist.conf modprobe -r cifs -
cifs-utils 제거: CIFS 마운트가 필요 없는 서버·워크스테이션에서는 cifs-utils 패키지를 제거하여 cifs.upcall 헬퍼 자체가 호출되지 않도록 한다.
# Ubuntu/Debian apt remove -y cifs-utils # RHEL/CentOS/Rocky/AlmaLinux yum remove -y cifs-utils -
request-key 비활성화: /etc/request-key.d/cifs.spnego.conf의 기본 규칙을 negate로 바꾸어 request-key가 위조 디스크립션에 대해 헬퍼를 실행하지 않도록 임시 차단한다.
# 기존 규칙 백업 cp /etc/request-key.d/cifs.spnego.conf /etc/request-key.d/cifs.spnego.conf.bak # 규칙 수정 (create/negate 교체 또는 주석 처리) # create cifs.spnego * * /usr/sbin/cifs.upcall %k negate cifs.spnego * * /usr/sbin/cifs.upcall %k -
비특권 네임스페이스 비활성화: 운영 정책상 필요하지 않으면 비특권 사용자 네임스페이스를 비활성화하여 익스플로잇 전제 조건을 무효화한다.
# Debian/Ubuntu sysctl -w kernel.unprivileged_userns_clone=0 echo "kernel.unprivileged_userns_clone=0" >> /etc/sysctl.conf # RHEL/CentOS/Rocky/AlmaLinux sysctl -w kernel.userns.allowed=0 echo "kernel.userns.allowed=0" >> /etc/sysctl.conf
장기 대응 (1주 이내)
-
정책 수립: SMB/CIFS 파일 공유가 필요한 서버와 불필요한 서버를 명확히 구분하고, 불필요한 서버에서는 cifs-utils 패키지 설치를 금지하는 보안 정책을 수립한다.
-
정기 점검: cifs-utils 설치 여부와 cifs 모듈 로드 상태를 월간 보안 점검 체크리스트에 포함하여 모니터링한다.
-
네임스페이스 정책: 비특권 네임스페이스 활용이 필요한 워크로드(컨테이너 등)와 불필요한 환경을 구분하고, 불필요한 환경에서는 비활성화 정책을 적용한다.
-
감시 강화: auditd 또는 EDR 로그에서 비특권 UID가 cifs.upcall을 트리거하는 비정상 호출 패턴(request-key → cifs.upcall 체인, 직후 NSS 라이브러리 로드)을 탐지하도록 규칙을 추가한다.
탐지 방안
로그 분석
-
cifs.upcall 호출 감지: /var/log/syslog, /var/log/messages, /var/log/audit/audit.log에서 비특권 사용자 UID가 cifs.upcall을 트리거하는 다음과 같은 로그 패턴을 탐지한다.
request-key[1234]: Invalid cifs.spnego description: ... cifs.upcall[5678]: upcall: ver=2;uid=0;creduid=0;pid=1000;target=app;... -
NSS 라이브러리 로드 감지: root 컨텍스트에서 비정상적인 NSS 라이브러리 로드 시도를 감시한다.
nscd[PID]: loading library "/tmp/libnss_attack.so.2" from "/etc/nsswitch.conf" -
request-key 오류 로그: 패치 적용 후 위조 디스크립션으로 request_key(2)를 호출하면 -EPERM 오류가 기록된다.
request-key[PID]: cifs.spnego key creation failed: Operation not permitted
시스템 호출 감지
-
strace로 cifs.upcall 동작 추적: cifs.upcall 프로세스의 시스템 호출을 추적하여 switch_to_process_ns(), getpwuid() 호출 순서와 이후 execve() 등 비정상 동작을 탐지한다.
strace -p $(pgrep cifs.upcall) -f -e trace=clone,unshare,getpwuid,execve,openat -
audispd 플러그인: auditd의 audispd 플러그인을 사용하여 request_key, keyctl 시스템 호출을 감시하고 비정상 패턴을 경고한다.
네트워크 감지
이 취약점은 로컬 공격이므로 직접적인 네트워크 탐지는 어렵다. 다만 초기 침해 경로(웹 쉘, SSH 무차별 대입 등)을 탐지하는 것이 중요하다.
점검 체크리스트
시스템 관리자용
- [ ] 커널 버전 확인: 배포판 보안 고지에 따라 패치(commit 3da1fdf4efbc) 적용 여부 확인
- [ ] cifs-utils 설치 여부 확인: dpkg -l cifs-utils 또는 rpm -q cifs-utils
- [ ] cifs 모듈 로드 상태 확인: lsmod | grep -E "^cifs"
- [ ] cifs 모듈 자동 로드 정책 확인: /etc/modules-load.d/, /etc/modprobe.d/
- [ ] 비특권 네임스페이스 활성화 여부 확인: sysctl kernel.unprivileged_userns_clone(Debian 계열) 또는 kernel.userns.allowed
- [ ] /etc/request-key.d/cifs.spnego.conf 존재 및 내용 확인
- [ ] auditd/EDR 로그에서 비정상 cifs.upcall 호출 탐지 규칙 확인
- [ ] SMB/CIFS 파일 공유 필요 여부 확인 및 불필요한 호스트에서 cifs-utils 제거 대상 분류
보안 담당자용
- [ ] 영향받는 배포판(Linux Mint, Kali, CentOS Stream 9, Rocky 9, AlmaLinux 9, SLES 15 SP7) 우선 점검 대상 확인
- [ ] 비특권 셸 접근이 허용되는 시스템(크로스사이트·점프 호스트) 별도 분류 및 우선 순위 할당
- [ ] 패치 적용 전 임시 완화 조치 적용 여부 확인(모듈 블랙리스트, 패키지 제거, request-key 비활성화, 네임스페이스 비활성화)
- [ ] 패치 적용 후 시스템 재부팅 및 정상 동작 확인
- [ ] 완화 조치 적용 후 cifs-utils 제거 호스트에서 정상 동작 확인
- [ ] 비정상 cifs.upcall 호출 탐지 규칙 배포 및 알림 설정 확인
- [ ] 사후 조사: 패치 적용 전 이벤트 로그 분석하여 악용 흔적 여부 확인
보안 운영 센터(SOC)용
- [ ] cifs.upcall 비정상 호출 탐지 규칙 SIEM/EDR에 배포 여부
- [ ] 비특권 UID에서 root 권한 프로세스 생성 탐지 규칙 확인
- [ ] NSS 라이브러리 로드 탐지 규칙 확인
- [ ] 관련 IoC(Indicators of Compromise) 위협 인텔리전스 피드 확인
- [ ] 사고 대응 플레이북: 로컬 권한 상승 의심 시 조사 절차 정립
결론
CVE-2026-46243(CIFSwitch)은 Linux 커널의 cifs.spnego 키 타입 검증 누락으로 인한 로컬 권한 상승 취약점이다. 공격자는 이미 비특권 접근 권한을 가진 상태에서 위조한 디스크립션을 통해 root 권한을 획득할 수 있으며, 실제 PoC가 공개되어 있어 위험도가 높다.
이 취약점은 기본 설치 상태에서 영향을 받는 배포판과 cifs-utils가 추가 설치된 환경 모두에 영향을 미친다. 파일 공유 환경에서는 cifs-utils가 필수로 설치되는 경우가 많아, 서버 운영자는 패치 우선순위를 판단해야 한다.
대응 전략은 즉시 영향 환경을 식별하고, 패치 적용 전까지 임시 완화 조치를 적용하며, 단기적으로 패치를 적용하고, 장기적으로는 정책과 감시 체계를 정립하는 것이다. 특히 cifs-utils가 불필요한 호스트에서는 제거하여 공격 표면을 최소화해야 한다.
국내 보안 담당자는 이 취약점의 기술적 세부사항과 대응 방안을 숙지하고, 관련 시스템을 점검하여 잠재적인 위협에 대비해야 한다. PoC가 공개되어 있는 상황에서 신속한 대응이 필요하다.
참고문헌
-
NVD
https://nvd.nist.gov/vuln/detail/CVE-2026-46243 -
Linux kernel commit 3da1fdf4efbc
https://git.kernel.org/stable/c/3da1fdf4efbc490041eb4f836bf596201203f8f2 -
oss-security mailing list
http://www.openwall.com/lists/oss-security/2026/06/01/6 -
manizada/CIFSwitch PoC repository
https://github.com/manizada/CIFSwitch -
Researcher writeup
https://heyitsas.im/posts/cifswitch -
SK쉴더스 보안 인사이트
https://www.skshieldus.com/security-insights/trends/eqst-linux-cifs-spnego-cve-2026-46243
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하시시면 댓글을 통해 소중한 의견 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!