CIFSwitch Hands Out Root on Multiple Linux Distros via a Forged CIFS Auth Key

A new Linux kernel LPE called CIFSwitch lets unprivileged local users forge a cifs.spnego key description and hijack the kernel key-request mechanism, getting cifs.upcall to run attacker-controlled NSS code as root. PoC is public; CVE assignment is pending.

Share
Line-art row of identical server towers; one tower has a small open door at the base of its panel, and a single flat red dot sits on the door.

Key Takeaways

  • Security researcher Asim Manizada disclosed CIFSwitch on May 28, 2026 — a Linux kernel LPE that lets an unprivileged local user forge a cifs.spnego key description, abuse the kernel's key-request mechanism, and get cifs.upcall to load attacker-controlled NSS code as root.
  • The flaw lives upstream — the kernel-side bug has been latent since 2007 — and the researcher's testing confirms exploitability under default policy on Linux Mint 21.3 and 22.3, CentOS Stream 9, Rocky Linux 9, AlmaLinux 9.7, Kali Linux 2021.4 through 2026.1, and SLES 15 SP7 and SAP 15 SP7, with many other distros exploitable if cifs-utils is installed manually.
  • An upstream kernel patch is queued for stable, a public PoC has shipped, and a CVE is not yet assigned; Linux operators should track distribution advisories, audit hosts for the cifs-utils + unprivileged-user-namespaces precondition, and apply one of the documented mitigations on every host that cannot patch immediately.

CIFSwitch is an upstream-kernel local privilege escalation — a single missing key-description vetting hook that, when the right userspace and namespace conditions line up, hands out root on Linux Mint, CentOS Stream, Rocky, AlmaLinux, SLES, Kali, and more.

BOSTON, MASSACHUSETTS — Security researcher Asim Manizada publicly disclosed a Linux kernel local privilege escalation called CIFSwitch on May 28, 2026 in an oss-security advisory, after an embargo coordinated with the linux-distros list. The vulnerability lets an unprivileged local user forge a cifs.spnego authentication-key description, submit it through the kernel's key-request mechanism, and trigger the userspace cifs.upcall helper as root — turning a missing validation hook in the kernel's CIFS client into a single-command path to root on every host where the preconditions are present. A public proof-of-concept exploit shipped alongside the disclosure.

The bug is upstream and multi-distro by construction — the kernel-side fault has been latent in fs/smb/client/cifs_spnego.c since 2007 — but the researcher is careful to frame it as a 'non-universal' LPE: exploitation also requires an affected cifs-utils version, the default cifs.spnego request-key rule, unprivileged user and mount namespaces, and an LSM policy that does not block the chain. On many older Ubuntu, Debian, openSUSE, Oracle Linux, and Amazon Linux 2023 builds, the chain works under stock policy if cifs-utils is installed; on Fedora 40-44, Ubuntu 26.04, Rocky 10, AlmaLinux 10, and SLES 16, default SELinux or AppArmor blocks it. The upstream kernel patch is queued for stable; CVE assignment was still pending at publication.

Disclosure Overview
FieldDetails
VulnerabilityCIFSwitch — Linux kernel/cifs-utils local privilege escalation via forged cifs.spnego upcall
CVENot yet assigned at publication
DisclosedMay 28, 2026 via the oss-security mailing list, after a coordinated embargo through May 27, 2026
ResearcherAsim Manizada
Root CauseThe kernel's cifs_spnego_key_type registers no .vet_description hook, so the cifs.spnego key type accepts forged userspace-originated key descriptions as if they had come from kernel CIFS
Exploit ChainForged cifs.spnego description via request_key(2) → request-key rule launches /usr/sbin/cifs.upcall as root → attacker-controlled pid + upcall_target=app switch the helper into a private mount namespace → NSS lookup before final privilege drop loads attacker NSS module as root → sudoers.d entry → root shell
Public PoCPublished with the disclosure — github.com/manizada/CIFSwitch
PatchUpstream kernel commit 3da1fdf4 adds a vet_description hook that accepts cifs.spnego descriptions only when CIFS is using its private spnego_cred; queued for stable. Distribution backports are tracking.

What Happened

Manizada's oss-security advisory and accompanying technical write-up describe CIFSwitch as a logic-level chain that straddles the boundary between the Linux kernel and the userspace cifs-utils package. The kernel-side defect is precise and small: the cifs_spnego_key_type structure in fs/smb/client/cifs_spnego.c was declared without a .vet_description hook, which is the kernel-key-management callback that decides whether a given key description should be accepted. With no hook present, any process can call request_key() with a fake cifs.spnego description, and the kernel accepts it as if the request had come from the kernel's own CIFS client. The default request-key rule shipped by cifs-utils — `create cifs.spnego * * /usr/sbin/cifs.upcall %k` — then launches /usr/sbin/cifs.upcall as root with the attacker-controlled description string attached.

The userspace half of the chain converts that root upcall into root on the machine. cifs.upcall parses attacker-controlled pid, uid, creduid, and upcall_target fields from the forged description and treats them as kernel-produced facts. With upcall_target=app, the helper switches into the namespaces of the supplied pid — a feature intended to make CIFS work inside containers. Before the helper performs its final setuid()/setgid() privilege drop, it does account lookup via NSS, which the attacker's mount namespace has already poisoned with a fake nsswitch.conf and a malicious libnss_*.so.2 module. NSS loads the attacker's module as root, and the PoC uses that primitive to write an /etc/sudoers.d/<user> entry granting NOPASSWD: ALL and then runs sudo for an unrestricted root shell. The published proof-of-concept executes the whole chain in a single command on a vulnerable host.

An Upstream-Kernel Bug, Not a Distribution Bug

The defining feature of CIFSwitch is where the kernel-side defect lives. fs/smb/client/cifs_spnego.c is upstream Linux kernel code — every distribution that ships a kernel containing the CIFS client carries the same missing .vet_description hook. Manizada's writeup notes the bug has been latent in that file since 2007, which is why CIFSwitch is not a 'Red Hat bug' or an 'Ubuntu bug' but a Linux bug, and why the patching cycle has to play out across RHSA, USN, DSA, SUSE-SU, and the Amazon Linux advisories simultaneously. That is the operational distinction that matters for defenders: this is not a story of waiting on one vendor. It is a story of every Linux kernel team converging on the same upstream commit (3da1fdf4) and shipping it through their own release trains in parallel.

Why CIFSwitch Is 'Non-Universal' — and Why That Is Not Comfort

Manizada is explicit that CIFSwitch is a 'non-universal Linux local root vulnerability,' and the language is important. Exploitation requires four things to line up: a vulnerable kernel, an affected cifs-utils version (nominally 6.14 and higher, with some older backports also affected), the default cifs.spnego request-key rule that comes with cifs-utils, unprivileged user and mount namespaces enabled, and an SELinux or AppArmor policy that does not block the chain. The researcher's own distro-impact tables show wide variation. Stock-exploitable under default policy: Linux Mint 21.3/22.3, CentOS Stream 9, Rocky Linux 9, AlmaLinux 9.7, Kali Linux 2021.4 through 2026.1 headless, SLES 15 SP7 and SAP 15 SP7, and SLES SAP 16 (SELinux permissive). Exploitable under default policy when cifs-utils is installed: Ubuntu 18.04/20.04/22.04 Desktop and Server, Debian 11/12/13, Pop!_OS 22.04 and 24.04, openSUSE Leap 15.6, Rocky Linux 8 GenericCloud, Oracle Linux 8/9 KVM, Amazon Linux 2023, and CentOS Stream 9 spin variants. Blocked under default policy: Fedora 40-44, Ubuntu 26.04, CentOS Stream 10, Rocky Linux 10, AlmaLinux 10.1, Oracle Linux 10, openSUSE Tumbleweed, openSUSE Leap 16.0, and SLES 16. The first two groups are not edge cases — they are the operational reality of a Linux server fleet in 2026.

The Pattern: Linux LPEs Are the Post-Compromise Tool of Record

CIFSwitch arrives inside a now-familiar 2026 pattern. The CyberSignal tracked the Linux 'Copy Fail' kernel flaw CVE-2026-31431 when CISA added it to the Known Exploited Vulnerabilities catalog as an actively exploited Linux privilege escalation, and covered Pack2theRoot (CVE-2026-41651) — a cross-distro Linux LPE in PackageKit that affected RHEL, Fedora, and openSUSE simultaneously. Outside the kernel, the same story is playing out in adjacent root-grants: the LiteSpeed cPanel plugin CVE-2026-48172 root-code-execution flaw The CyberSignal covered earlier this month, and the broader perimeter-flaw cadence such as the Palo Alto GlobalProtect CVE-2026-0257 authentication-bypass campaign now under active exploitation, reinforce the structural conclusion Verizon's 2026 DBIR reached when it found that vulnerability exploitation had overtaken credential theft as the number-one initial-access method. CIFSwitch is the post-initial-access counterpart to that perimeter cycle: once an attacker has any unprivileged Linux foothold — a phished SSH key, a compromised CI runner, a webshell on a containerized application — an upstream kernel LPE is what gets them from 'user' to 'root,' and from 'root on this host' to 'control of the node it runs on.'

Scope and Impact

The exposure boundary is shaped by the four exploitability conditions Manizada documents — vulnerable kernel, affected cifs-utils, default request-key rule, permissive namespaces, and non-blocking LSM policy — and several specifics are still being filled in as distribution vendors publish their advisories. As of publication, CVE assignment is pending; the kernel-side patch is the upstream commit 3da1fdf4 and is queued for stable but the precise downstream advisory IDs and fixed package versions for every major distro have not all been published, and operators should track Red Hat RHSA, Ubuntu USN, Debian DSA, SUSE-SU, Amazon Linux, Oracle Linux, Rocky Linux, AlmaLinux, and CloudLinux advisories for the assigned CVE and the per-distribution fixed package versions before relying on specific numbers in a remediation plan.

What is unambiguous is the operational scope. The bug is in upstream Linux kernel code and the chain is unauthenticated-local — any process running as an unprivileged local user on a host that meets the conditions can take root in a single command, and the public PoC at github.com/manizada/CIFSwitch automates the chain. The downstream blast radius is wherever a Linux server, container host, or Kubernetes node sits inside an environment with even casual user-namespace permissiveness and an installed cifs-utils package. The condition stack is common in shared bastion hosts, CI/CD runners, multi-tenant Kubernetes nodes, and developer workstations. The unknowns that defenders should not assume away: whether any in-the-wild exploitation has occurred (the disclosure is days old and a public PoC has just shipped), how quickly distribution backports will reach LTS and extended-support kernels, and whether the userspace half of the chain in cifs-utils will receive additional hardening beyond the kernel fix that is already public — the researcher notes that more userspace work is warranted to stop assuming key descriptions are necessarily kernel-generated.

Response and Attribution

For organizations running Linux servers, containers, or shared bastion hosts, the immediate action is to track distribution security advisories for the CVE assigned to CIFSwitch and to deploy kernel updates against the published fixed versions as soon as those land. Until kernel patches are in place, the disclosure documents four practical mitigations, any of which breaks the chain on a given host: block the cifs kernel module from loading if CIFS/SMB mounts are not required (assuming the module is not built into the kernel), remove cifs-utils on hosts that do not need to mount SMB/CIFS shares, override the default cifs.spnego request-key rule with one that negates the key (a one-line file in /etc/request-key.d/cifs.spnego.conf), or disable unprivileged user namespaces. The mitigations are stackable, and several can be applied in parallel; the researcher's own PoC repository can be used by defenders to validate any of them on a representative host.

Priority ordering: multi-tenant Linux hosts first. Kubernetes nodes, container hosts, shared bastion hosts, CI/CD runners, and developer-shared workstations are the systems where an unprivileged-user foothold is most plausible, and the systems where root-on-the-node has the largest downstream impact — root on a Kubernetes node is, for practical purposes, one chain away from container escape. Audit which workloads have mounted CIFS or SMB shares in production; that population gets the patch first. Second tier: internet-reachable single-tenant Linux hosts where any unauthenticated remote-code-execution chain could deliver the unprivileged-user precondition that CIFSwitch then turns into root.

For SOC and threat-hunting teams, the indicators are well-defined. Hunt for unexpected privilege transitions on Linux hosts dating to and after May 28, 2026 — the day the PoC went public is the operational start of the threat window. Specifically: cifs.upcall invocations that did not originate from a legitimate CIFS mount workflow, request_key syscalls for the cifs.spnego key type from non-root user processes, mount-namespace transitions that precede an NSS module load by a root helper, and any creation of /etc/sudoers.d/* entries unaccounted for by configuration management. Add CIFSwitch detection rules to the stack as the researcher and the distribution vendors publish them. For CISOs, the structural conclusion is the one the brief identified: Linux kernel LPE patching cadence is now a recurring quarterly driver, behind only networking-stack flaws, and 7 days for multi-tenant hosts and 14 days for single-tenant hosts is a defensible baseline. Organizations that do not run kernel live-patching — kpatch, ksplice, or kernel livepatch — should treat CIFSwitch as the recurring incident class that argues for adopting it.


The CyberSignal Analysis

Signal 01 — Upstream Bugs Are a Different Incident Class Than Distro Bugs

CIFSwitch is an upstream-kernel bug, and that is the operational distinction defenders should organize their response around. A distribution-specific bug — a flaw in a RHEL-only patchset, a Debian-only package — has a single vendor on the hook and a single advisory cycle to wait on. An upstream bug carries the same defect across every distribution that pulls from torvalds/linux, which is effectively all of them, and the response cycle plays out in parallel across RHSA, USN, DSA, SUSE-SU, and the Amazon Linux and Oracle Linux trains simultaneously. That parallelism is what makes the patch-tracking exercise non-trivial. Operations teams accustomed to following one vendor advisory per bug will find themselves chasing six or eight in parallel, and the right baseline is not 'patch when Red Hat ships' but 'patch the assigned CVE on every Linux distribution we run, against each distribution's own published fixed version, in the same maintenance window.'

Signal 02 — The Verification Gap Is the Story, Not a Footnote

CIFSwitch ships into the public record with a coordinated embargo, a public proof-of-concept, an upstream kernel patch already in the source tree — and no CVE number, no consolidated cross-distro fixed-version table, and no in-the-wild exploitation telemetry. That gap is not unusual for oss-security disclosures; it is the default operational state in the first 72 to 96 hours after a Linux LPE goes public. The honest framing for defenders is that the verification work — confirming the CVE when it is assigned, identifying the precise fixed kernel and cifs-utils package versions on every distribution in the fleet, and pulling distribution advisory IDs into the patch ticket — is the bulk of the incident response, and it has to be done in the absence of the consolidated reference that defenders are used to having on day one. CIFSwitch is a case study in operating on a partial information set, and the right response is to treat the unknowns as unknowns: track the CVE assignment, track each distribution's advisory, and apply mitigations on the hosts that cannot wait.

Signal 03 — Unprivileged User Namespaces Are the Recurring Amplifier

Read across the 2026 Linux LPE record — Copy Fail, Pack2theRoot, CIFSwitch — and a structural commonality emerges: unprivileged user-namespace creation is the precondition that turns a logic-level kernel or userspace bug into root. The user-namespace feature exists for legitimate reasons (rootless containers, sandboxing) but it is also the consistent amplifier that lets unprivileged local processes reach kernel and helper code that would otherwise be unreachable. The defensive question many Linux operators have deferred — whether to enable unprivileged user namespaces by default, or to gate them behind capability checks, sysctls, or LSM policy — is the recurring decision that CIFSwitch puts in front of them again. The distros that block CIFSwitch under stock policy are the ones that have already made that decision the other way (SELinux enforcing on Fedora 40+, AppArmor user-namespace policy on Ubuntu 26.04). Organizations that have not made that decision are accepting the recurring exposure that comes with the looser default.


Sources

TypeSource
PrimaryAsim Manizada — CIFSwitch: a non-universal Linux local root vulnerability
Primaryoss-security — CIFSwitch: Linux kernel/cifs-utils local root via forged cifs.spnego upcall
PrimaryLinux kernel commit 3da1fdf4 — cifs: validate cifs.spnego key descriptions via vet_description hook
ReportingBleepingComputer — New CIFSwitch Linux flaw gives root on multiple distributions
ReportingLinuxiac — CIFSwitch Vulnerability Exposes Some Linux Distros to Local Root Access
ReportingCybersecurity News — New Linux CIFSwitch Kernel Vulnerability Allows Attackers to Gain Root Access
AnalysisSecurityOnline — CIFSwitch Local Root Exploit: Public Details and PoC Disclosed
OfficialAlmaLinux — CIFSwitch: Help Us Test the Patched Kernels