Security Resilience

CVE-2023-52452

Linux Kernel 5.12 – 6.6.14

Published
22 February 2024
Modified
21 November 2024
Patch / advisory
CVSS Score v3.1 7.8
Click a component to see what it means
Raw vectorCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
EPSS Score 0.0024 14th percentile
Risk Priority 55 floored blend · peak EPSS

CVSS and EPSS are reproduced from their sources (NVD, FIRST EPSS). Risk Priority is our own derived reading, not an NVD score.

Summary

CVE-2023-52452 is a high-severity Improper Initialization (CWE-665) vulnerability in Linux Linux Kernel. Its CVSS base score is 7.8 (High).

Operationally, ranked at the 14th percentile by exploit likelihood (below the median); it is not currently listed in the CISA KEV catalog.

The strongest mitigations our analysis identified map to SA-11 (Developer Testing and Evaluation) and SA-8 (Security and Privacy Engineering Principles) — see the control section below for these in your framework.

EU & UK References

Vulnerability Data

In the Linux kernel, the following vulnerability has been resolved: bpf: Fix accesses to uninit stack slots Privileged programs are supposed to be able to read uninitialized stack memory (ever since 6715df8d5) but, before this patch, these accesses were permitted…

more

inconsistently. In particular, accesses were permitted above state->allocated_stack, but not below it. In other words, if the stack was already "large enough", the access was permitted, but otherwise the access was rejected instead of being allowed to "grow the stack". This undesired rejection was happening in two places: - in check_stack_slot_within_bounds() - in check_stack_range_initialized() This patch arranges for these accesses to be permitted. A bunch of tests that were relying on the old rejection had to change; all of them were changed to add also run unprivileged, in which case the old behavior persists. One tests couldn't be updated - global_func16 - because it can't run unprivileged for other reasons. This patch also fixes the tracking of the stack size for variable-offset reads. This second fix is bundled in the same commit as the first one because they're inter-related. Before this patch, writes to the stack using registers containing a variable offset (as opposed to registers with fixed, known values) were not properly contributing to the function's needed stack size. As a result, it was possible for a program to verify, but then to attempt to read out-of-bounds data at runtime because a too small stack had been allocated for it. Each function tracks the size of the stack it needs in bpf_subprog_info.stack_depth, which is maintained by update_stack_depth(). For regular memory accesses, check_mem_access() was calling update_state_depth() but it was passing in only the fixed part of the offset register, ignoring the variable offset. This was incorrect; the minimum possible value of that register should be used instead. This tracking is now fixed by centralizing the tracking of stack size in grow_stack_state(), and by lifting the calls to grow_stack_state() to check_stack_access_within_bounds() as suggested by Andrii. The code is now simpler and more convincingly tracks the correct maximum stack size. check_stack_range_initialized() can now rely on enough stack having been allocated for the access; this helps with the fix for the first issue. A few tests were changed to also check the stack depth computation. The one that fails without this patch is verifier_var_off:stack_write_priv_vs_unpriv.

CWE(s)

Related Threats

CVEs Like This One

CVE-2024-44947Same product: Linux Linux Kernel
CVE-2024-39485Same product: Linux Linux Kernel
CVE-2024-39301Same product: Linux Linux Kernel
CVE-2024-42078Same product: Linux Linux Kernel
CVE-2024-46697Same product: Linux Linux Kernel
CVE-2024-38558Same product: Linux Linux Kernel
CVE-2025-21906Same product: Linux Linux Kernel
CVE-2024-45018Same product: Linux Linux Kernel
CVE-2024-41062Same product: Linux Linux Kernel
CVE-2024-35907Same product: Linux Linux Kernel

Affected Assets

linux
linux kernel
5.12 — 6.6.14 · 6.7.0 — 6.7.2

Mitigating Controls

Mitigating Controls (NIST 800-53 r5) AI

Developer testing and evaluation directly exercises initialization paths and can reveal missing or incorrect resource setup.

Engineering principles applied during design and implementation can require explicit initialization to a known state.

Requiring the system to fail to a known state structurally reduces the chance that uninitialized resources remain reachable.

Mitigating Controls (ISO/IEC 27001:2022 Annex A) AI

Derived directly from the weakness types (CWEs) cited in the NVD entry via our AI-authored CWE→ISO cross-walk (authority under review) — links open the control.

blocks

A.8.25 mandates security requirements, checkpoints, secure coding, testing and developer capability in the SDLC which reaches improper initialization as a design/coding defect, but leaves a bounded remainder (e.g. initialization of third-party components or libraries chosen in procurement, and post-deployment configuration defaults).

blocks

A.8.27 mandates security-by-design principles (least privilege, default-deny, fail-securely, distrust-external-input, hardening) plus explicit design reviews that can catch and block many uninitialized-resource cases before they ship, but leaves a bounded remainder (e.g. vendor libraries, runtime-initialization bugs, or post-review code changes) that can still be present and exploitable.

prevents

Secure coding standards explicitly forbid uninitialized variables and mandate proper resource initialization before use.

finds

Security testing can detect uninitialized variables but does not itself enforce initialization practices.

blocks

defining, enforcing, and monitoring secure configuration templates (including defaults, disabled services, changed vendor passwords, minimized privileges) directly stops most improper-initialization cases from being exploitable; the bounded remainder is initialization logic inside custom application code that no configuration template reaches

Hardening callouts derived

DISA STIG baselines are authored against specific weaknesses. Where this CVE cites a broad weakness class, the mapping is not asserted at that abstraction (owner ruling, 2026-09-25: grade only at Base and below), so no rule is shown here rather than a rule shown against the wrong grain.

  • No fine-grained STIG row for CWE-665, a class-level weakness. Rules are authored against its narrower children: CWE-770.

References