{"id":"CVE-2026-23408","state":"PUBLISHED","title":"apparmor: Fix double free of ns_name in aa_replace_profiles()","description":"In the Linux kernel, the following vulnerability has been resolved:\n\napparmor: Fix double free of ns_name in aa_replace_profiles()\n\nif ns_name is NULL after\n1071         error = aa_unpack(udata, &lh, &ns_name);\n\nand if ent->ns_name contains an ns_name in\n1089                 } else if (ent->ns_name) {\n\nthen ns_name is assigned the ent->ns_name\n1095                         ns_name = ent->ns_name;\n\nhowever ent->ns_name is freed at\n1262                 aa_load_ent_free(ent);\n\nand then again when freeing ns_name at\n1270         kfree(ns_name);\n\nFix this by NULLing out ent->ns_name after it is transferred to ns_name\n\n\")","publishedAt":"2026-04-01T08:36:37.873Z","updatedAt":"2026-08-05T12:21:29.316Z","severity":{"score":7.8,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"c6347a2116ecccb8fd9ee4ebc75ae41d1d7ef689","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"c053ae381ce227577567d1ef10090ce7506d7a28","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"35f4caec1352054b9a61cfdf2bf1898073637aa0","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"55ef2af7490aaf72f8ffe11ec44c6bcb7eb2162a","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"86feeccd6b93ed94bd6655f30de80f163f8d5a45","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"7998ab3010d2317643f91828f1853d954ef31387","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"18b5233e860c294a847ee07869d93c0b8673a54b","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"5df0c44e8f5f619d3beb871207aded7c78414502","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["security/apparmor/policy.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.5","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.5","versionType":"semver"},{"version":"5.10.253","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.203","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.169","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.130","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.77","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.18","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"6.19.8","status":"unaffected","lessThanOrEqual":"6.19.*","versionType":"semver"},{"version":"7.0","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["security/apparmor/policy.c"]}],"references":["https://git.kernel.org/stable/c/c6347a2116ecccb8fd9ee4ebc75ae41d1d7ef689","https://git.kernel.org/stable/c/c053ae381ce227577567d1ef10090ce7506d7a28","https://git.kernel.org/stable/c/35f4caec1352054b9a61cfdf2bf1898073637aa0","https://git.kernel.org/stable/c/55ef2af7490aaf72f8ffe11ec44c6bcb7eb2162a","https://git.kernel.org/stable/c/86feeccd6b93ed94bd6655f30de80f163f8d5a45","https://git.kernel.org/stable/c/7998ab3010d2317643f91828f1853d954ef31387","https://git.kernel.org/stable/c/18b5233e860c294a847ee07869d93c0b8673a54b","https://git.kernel.org/stable/c/5df0c44e8f5f619d3beb871207aded7c78414502"],"weaknesses":[],"ingestedAt":"2026-10-29T20:11:21.040Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/23xxx/CVE-2026-23408.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-23408","state":"PUBLISHED","datePublished":"2026-04-01T08:36:37.873Z","dateUpdated":"2026-08-05T12:21:29.316Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-01-13T15:37:46.013Z"},"containers":{"cna":{"title":"apparmor: Fix double free of ns_name in aa_replace_profiles()","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\napparmor: Fix double free of ns_name in aa_replace_profiles()\n\nif ns_name is NULL after\n1071         error = aa_unpack(udata, &lh, &ns_name);\n\nand if ent->ns_name contains an ns_name in\n1089                 } else if (ent->ns_name) {\n\nthen ns_name is assigned the ent->ns_name\n1095                         ns_name = ent->ns_name;\n\nhowever ent->ns_name is freed at\n1262                 aa_load_ent_free(ent);\n\nand then again when freeing ns_name at\n1270         kfree(ns_name);\n\nFix this by NULLing out ent->ns_name after it is transferred to ns_name\n\n\")"}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"c6347a2116ecccb8fd9ee4ebc75ae41d1d7ef689","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"c053ae381ce227577567d1ef10090ce7506d7a28","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"35f4caec1352054b9a61cfdf2bf1898073637aa0","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"55ef2af7490aaf72f8ffe11ec44c6bcb7eb2162a","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"86feeccd6b93ed94bd6655f30de80f163f8d5a45","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"7998ab3010d2317643f91828f1853d954ef31387","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"18b5233e860c294a847ee07869d93c0b8673a54b","versionType":"git"},{"version":"145a0ef21c8e944957f58e2c8ffcd8a10f46266a","status":"affected","lessThan":"5df0c44e8f5f619d3beb871207aded7c78414502","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["security/apparmor/policy.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.5","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.5","versionType":"semver"},{"version":"5.10.253","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.203","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.169","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.130","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.77","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.18","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"6.19.8","status":"unaffected","lessThanOrEqual":"6.19.*","versionType":"semver"},{"version":"7.0","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["security/apparmor/policy.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/c6347a2116ecccb8fd9ee4ebc75ae41d1d7ef689"},{"url":"https://git.kernel.org/stable/c/c053ae381ce227577567d1ef10090ce7506d7a28"},{"url":"https://git.kernel.org/stable/c/35f4caec1352054b9a61cfdf2bf1898073637aa0"},{"url":"https://git.kernel.org/stable/c/55ef2af7490aaf72f8ffe11ec44c6bcb7eb2162a"},{"url":"https://git.kernel.org/stable/c/86feeccd6b93ed94bd6655f30de80f163f8d5a45"},{"url":"https://git.kernel.org/stable/c/7998ab3010d2317643f91828f1853d954ef31387"},{"url":"https://git.kernel.org/stable/c/18b5233e860c294a847ee07869d93c0b8673a54b"},{"url":"https://git.kernel.org/stable/c/5df0c44e8f5f619d3beb871207aded7c78414502"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The vulnerability is triggered by writing to AppArmor's securityfs interface (.load or .replace files), which requires local system access.\nAC:L - The double free is deterministic and triggered reliably by loading a policy where ent->ns_name is set and ns_name is NULL after aa_unpack(). No race condition or special conditions are needed.\nPR:L - CAP_MAC_ADMIN is required but can be obtained via user namespaces with the default unprivileged_userns_apparmor_policy=1 setting, making this reachable by unprivileged local users.\nUI:N - No user interaction is required; the attacker can trigger the vulnerability entirely by loading crafted AppArmor policy data.\nS:U - The vulnerability stays within the kernel's security authority; there is no crossing of a security boundary like a VM escape or sandbox escape.\nC:H - A double free enables use-after-free conditions where the attacker can control freed object contents via heap spraying, allowing arbitrary kernel memory reads.\nI:H - The double free enables heap corruption and arbitrary write primitives through heap spraying, potentially allowing kernel code execution.\nA:H - A double free causes immediate kernel heap corruption which can lead to kernel crashes (panic/oops) even without deliberate exploitation."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-05T12:21:29.316Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"5.10.253"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"5.15.203"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"6.1.169"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"6.6.130"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"6.12.77"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"6.18.18"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"6.19.8"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"7.0"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}}}}}