2026-03-18 17:54CVE-2026-23268Linux
PUBLISHED5.2

apparmor: fix unprivileged local user can do privileged policy management

In the Linux kernel, the following vulnerability has been resolved:

apparmor: fix unprivileged local user can do privileged policy management

An unprivileged local user can load, replace, and remove profiles by

opening the apparmorfs interfaces, via a confused deputy attack, by

passing the opened fd to a privileged process, and getting the

privileged process to write to the interface.

This does require a privileged target that can be manipulated to do

the write for the unprivileged process, but once such access is

achieved full policy management is possible and all the possible

implications that implies: removing confinement, DoS of system or

target applications by denying all execution, by-passing the

unprivileged user namespace restriction, to exploiting kernel bugs for

a local privilege escalation.

The policy management interface can not have its permissions simply

changed from 0666 to 0600 because non-root processes need to be able

to load policy to different policy namespaces.

Instead ensure the task writing the interface has privileges that

are a subset of the task that opened the interface. This is already

done via policy for confined processes, but unconfined can delegate

access to the opened fd, by-passing the usual policy check.

Affected products

Linux

Linux

< 0fc63dd9170643d15c25681fca792539e23f4640 - AFFECTED

< b60b3f7a35c46b2e0ca934f9c988b8fca06d76c6 - AFFECTED

< b6a94eeca9c6c8f7c55ad44c62c98324f51ec596 - AFFECTED

< 6601e13e82841879406bf9f369032656f441a425 - AFFECTED

Linux

4.11 - AFFECTED

< 4.11 - UNAFFECTED

<= 6.12.* - UNAFFECTED

<= 6.18.* - UNAFFECTED

<= 6.19.* - UNAFFECTED

<= * - UNAFFECTED

References

GitHub Security Advisories

GHSA-8qv8-8mpp-cc7j

In the Linux kernel, the following vulnerability has been resolved: apparmor: fix unprivileged...

https://github.com/advisories/GHSA-8qv8-8mpp-cc7j

In the Linux kernel, the following vulnerability has been resolved:

apparmor: fix unprivileged local user can do privileged policy management

An unprivileged local user can load, replace, and remove profiles by opening the apparmorfs interfaces, via a confused deputy attack, by passing the opened fd to a privileged process, and getting the privileged process to write to the interface.

This does require a privileged target that can be manipulated to do the write for the unprivileged process, but once such access is achieved full policy management is possible and all the possible implications that implies: removing confinement, DoS of system or target applications by denying all execution, by-passing the unprivileged user namespace restriction, to exploiting kernel bugs for a local privilege escalation.

The policy management interface can not have its permissions simply changed from 0666 to 0600 because non-root processes need to be able to load policy to different policy namespaces.

Instead ensure the task writing the interface has privileges that are a subset of the task that opened the interface. This is already done via policy for confined processes, but unconfined can delegate access to the opened fd, by-passing the usual policy check.

JSON source

https://cveawg.mitre.org/api/cve/CVE-2026-23268
Click to expand
{
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "cveMetadata": {
    "cveId": "CVE-2026-23268",
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "dateUpdated": "2026-03-18T17:54:41.974Z",
    "dateReserved": "2026-01-13T15:37:45.991Z",
    "datePublished": "2026-03-18T17:54:41.974Z",
    "state": "PUBLISHED"
  },
  "containers": {
    "cna": {
      "providerMetadata": {
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux",
        "dateUpdated": "2026-03-18T17:54:41.974Z"
      },
      "title": "apparmor: fix unprivileged local user can do privileged policy management",
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\napparmor: fix unprivileged local user can do privileged policy management\n\nAn unprivileged local user can load, replace, and remove profiles by\nopening the apparmorfs interfaces, via a confused deputy attack, by\npassing the opened fd to a privileged process, and getting the\nprivileged process to write to the interface.\n\nThis does require a privileged target that can be manipulated to do\nthe write for the unprivileged process, but once such access is\nachieved full policy management is possible and all the possible\nimplications that implies: removing confinement, DoS of system or\ntarget applications by denying all execution, by-passing the\nunprivileged user namespace restriction, to exploiting kernel bugs for\na local privilege escalation.\n\nThe policy management interface can not have its permissions simply\nchanged from 0666 to 0600 because non-root processes need to be able\nto load policy to different policy namespaces.\n\nInstead ensure the task writing the interface has privileges that\nare a subset of the task that opened the interface. This is already\ndone via policy for confined processes, but unconfined can delegate\naccess to the opened fd, by-passing the usual policy check."
        }
      ],
      "affected": [
        {
          "vendor": "Linux",
          "product": "Linux",
          "programFiles": [
            "security/apparmor/apparmorfs.c",
            "security/apparmor/include/policy.h",
            "security/apparmor/policy.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "defaultStatus": "unaffected",
          "versions": [
            {
              "version": "b7fd2c0340eacbee892425e9007647568b7f2a3c",
              "status": "affected",
              "versionType": "git",
              "lessThan": "0fc63dd9170643d15c25681fca792539e23f4640"
            },
            {
              "version": "b7fd2c0340eacbee892425e9007647568b7f2a3c",
              "status": "affected",
              "versionType": "git",
              "lessThan": "b60b3f7a35c46b2e0ca934f9c988b8fca06d76c6"
            },
            {
              "version": "b7fd2c0340eacbee892425e9007647568b7f2a3c",
              "status": "affected",
              "versionType": "git",
              "lessThan": "b6a94eeca9c6c8f7c55ad44c62c98324f51ec596"
            },
            {
              "version": "b7fd2c0340eacbee892425e9007647568b7f2a3c",
              "status": "affected",
              "versionType": "git",
              "lessThan": "6601e13e82841879406bf9f369032656f441a425"
            }
          ]
        },
        {
          "vendor": "Linux",
          "product": "Linux",
          "programFiles": [
            "security/apparmor/apparmorfs.c",
            "security/apparmor/include/policy.h",
            "security/apparmor/policy.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "defaultStatus": "affected",
          "versions": [
            {
              "version": "4.11",
              "status": "affected"
            },
            {
              "version": "0",
              "status": "unaffected",
              "versionType": "semver",
              "lessThan": "4.11"
            },
            {
              "version": "6.12.77",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "6.12.*"
            },
            {
              "version": "6.18.18",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "6.18.*"
            },
            {
              "version": "6.19.8",
              "status": "unaffected",
              "versionType": "semver",
              "lessThanOrEqual": "6.19.*"
            },
            {
              "version": "7.0-rc4",
              "status": "unaffected",
              "versionType": "original_commit_for_fix",
              "lessThanOrEqual": "*"
            }
          ]
        }
      ],
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/0fc63dd9170643d15c25681fca792539e23f4640"
        },
        {
          "url": "https://git.kernel.org/stable/c/b60b3f7a35c46b2e0ca934f9c988b8fca06d76c6"
        },
        {
          "url": "https://git.kernel.org/stable/c/b6a94eeca9c6c8f7c55ad44c62c98324f51ec596"
        },
        {
          "url": "https://git.kernel.org/stable/c/6601e13e82841879406bf9f369032656f441a425"
        }
      ]
    }
  }
}