CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2025-21590

CVE-2025-21590: The RedPenguin Kernel Bypass

Alon Barad
Alon Barad
Software Engineer

Feb 26, 2026·6 min read·154 visits

Executive Summary (TL;DR)

Local root exploit in Junos OS kernel allowing bypass of binary signature enforcement (Veriexec). Actively exploited by UNC3886 to plant rootkits (RedPenguin). Low CVSS (4.4) masks high impact: total, persistent device compromise.

A critical improper isolation vulnerability in the Juniper Networks Junos OS kernel allows local attackers to bypass the Veriexec integrity subsystem. Exploited in the wild by the China-nexus threat actor UNC3886 as part of the RedPenguin campaign, this flaw enables the installation of persistent, stealthy rootkits on carrier-grade routers, turning network infrastructure into invisible espionage platforms.

The Hook: The Ghost in the Router

Carrier-grade routers are supposed to be fortresses. When you buy a Juniper MX or SRX series box, you're paying for hardware that moves packets at the speed of light and software that is hardened against the chaotic cesspool of the internet. A key part of that hardening is Veriexec (Verified Executables), a kernel-level bodyguard derived from FreeBSD. Its job is simple: if a binary isn't digitally signed by Juniper, it doesn't run. Period.

But what if you could distract the bodyguard? CVE-2025-21590 is exactly that distraction. It isn't a remote code execution vulnerability that kicks the front door down. It's something far more insidious. It's a method for an attacker who already has the keys (shell access) to turn off the security cameras and install a secret elevator in the basement.

This vulnerability is the centerpiece of the RedPenguin campaign by UNC3886, a China-nexus threat actor known for living off the land—and now, living inside the kernel. They aren't just breaking in; they are moving in, setting up furniture, and ensuring that even if you reboot the device, they are still watching your traffic.

The Flaw: When Isolation Fails

To understand the gravity of CVE-2025-21590, you have to respect the architecture of Junos OS. It runs on a modified FreeBSD kernel. In this environment, root isn't supposed to be God anymore. Even the root user is restricted by Veriexec, which enforces mandatory access control based on digital signatures. You can't just insmod a malicious kernel module or replace /sbin/init with a bash script, because the kernel checks the signature before execution.

The vulnerability, classified as CWE-653 (Improper Isolation or Compartmentalization), breaks this contract. It resides in how the kernel handles specific state transitions or memory isolation for privileged processes. The flaw allows a local attacker—specifically one who has already dropped to a shell (which is distinct from the CLI)—to manipulate kernel memory or capabilities in a way that effectively toggles the Veriexec enforcement flag to 'OFF'.

Think of it like a bank vault with a time lock. The lock is unbreakable, but the wiring for the timer is exposed on the outside wall. If you know which wire to cut, the vault opens immediately. UNC3886 found the wire. By exploiting this isolation failure, they can inject code into the kernel space, bypassing the very mechanism designed to prevent code injection.

The Code: Breaking Integrity

While the exact source code for the proprietary Junos kernel isn't public, we can reconstruct the vulnerability mechanism based on standard BSD Veriexec implementations and the exploit behavior. In a hardened BSD system, the Veriexec level is usually raised during boot and cannot be lowered (a property known as securelevel).

However, the flaw in Junos OS likely involves a race condition or an exposed syscall that allows modifying the veriexec_bypass check. Conceptually, the vulnerable kernel logic looks something like this:

// Conceptual Vulnerability in Kernel Access Control
int veriexec_verify(struct vnode *vp, struct thread *td, int mode) {
    // If the global bypass flag is set, skip checks
    // The BUG: This flag should be immutable after boot!
    if (kernel_security_state->bypass_veriexec == 1) {
        return (0); // Authorized!
    }
 
    // ... perform signature verification ...
}

The exploit targets the memory structure holding bypass_veriexec (or its equivalent capability bitmask). By leveraging the improper isolation, the attacker essentially does this:

// The Attack Primitive
void disable_protection() {
   // 1. Locate the kernel security structure in memory
   void *security_struct = find_kernel_symbol("security_state");
 
   // 2. Overwrite the enforcement flag
   // This should be blocked by memory protection, but isn't.
   write_kernel_memory(security_struct + OFFSET_FLAGS, 0x1); 
}

The fix implemented in versions like 21.2R3-S9 and 24.2R2 likely involves strictly enforcing Write-XOR-Execute (W^X) on these kernel structures or removing the code path that allowed the state modification entirely.

The Exploit: Deploying RedPenguin

The attack chain observed in the wild is a masterclass in persistence. It doesn't start with an exploit; it usually starts with compromised credentials. But credentials can be rotated. A rootkit is forever.

Step 1: The Drop

The attacker gains access to the Juniper device via SSH, authenticating as a high-privileged user. They drop to the underlying BSD shell (start shell). They upload a small, seemingly innocuous binary. This is the loader.

Step 2: The Bypass

The loader executes. It triggers CVE-2025-21590, manipulating the kernel state to temporarily suspend Veriexec enforcement. For a brief window, the router is blind to signature violations.

Step 3: The Infection

With the shields down, the attacker deploys the payload. In the RedPenguin campaign, this involves highly sophisticated rootkits like REPTILE, MEDUSA, or MOPSLED. These aren't just user-mode binaries; they are kernel modules or injected threads into legitimate daemons (like rpd or chassisd).

# Conceptual Attack Flow
user@junos% ./cve_2025_21590_exploit
[+] Kernel patching successful. Veriexec disabled.
user@junos% insmod reptile.ko
[+] Module loaded.
user@junos% ./cleanup.sh
[+] Logs wiped. Veriexec re-enabled.

Step 4: The Ghost Mode

Once loaded, the rootkit hooks kernel functions like getdents (get directory entries) and sysctl. If an admin runs show system processes or looks at /var/log, the rootkit filters the output. The malware is running, but the router lies to you about it.

The Impact: Why CVSS 4.4 is a Trap

If you look at the CVSS score of 4.4 (Medium), you might be tempted to deprioritize this patch. That would be a catastrophic mistake. The score is low only because the attacker needs high privileges (Local/Admin) to execute it. But in the world of APTs and nation-state actors, gaining initial access is trivial—it's maintaining access that is hard.

CVE-2025-21590 solves the "hard" part for the attacker. It converts a compromised password into a compromised hardware lifecycle. The impact is Critical for three reasons:

  1. Persistence: The attacker survives reboots and firmware upgrades (if they hook the upgrade process).
  2. Stealth: Traditional security monitoring tools on the router are rendered useless because the kernel itself is untrustworthy.
  3. Data Exfiltration: Being in the kernel allows for direct tapping of network flows before they hit firewalls or logging mechanisms.

This is not a vulnerability you patch next month. If you are a target of interest for groups like UNC3886, this is a "drop everything" emergency.

Technical Appendix

CVSS Score
4.4/ 10
CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:N/I:H/A:N
EPSS Probability
0.89%
Top 25% most exploited

Affected Systems

Junos OS (MX Series)Junos OS (SRX Series)Junos OS (EX Series)Junos OS (ACX Series)

Affected Versions Detail

Product
Affected Versions
Fixed Version
Junos OS
Juniper Networks
< 21.2R3-S921.2R3-S9
Junos OS
Juniper Networks
21.4 < 21.4R3-S1021.4R3-S10
Junos OS
Juniper Networks
24.2 < 24.2R1-S224.2R1-S2
AttributeDetail
CVE IDCVE-2025-21590
CWE IDCWE-653 (Improper Isolation)
CVSS v3.14.4 (Medium)
Attack VectorLocal (Shell Required)
ImpactSecurity Bypass / Persistence
KEV StatusListed (Active Exploitation)
Threat ActorUNC3886 (RedPenguin)

MITRE ATT&CK Mapping

T1548.001Abuse Elevation Control Mechanism
Privilege Escalation
T1055Process Injection
Defense Evasion
T1014Rootkit
Defense Evasion
CWE-653
Improper Isolation

Improper Isolation or Compartmentalization

References & Sources

  • [1]Juniper Security Bulletin JSA93446
  • [2]CISA KEV Catalog

More Reports

•about 1 hour ago•CVE-2026-75827
8.8

CVE-2026-75827: Grav Arbitrary File Write & Remote Code Execution

An arbitrary file write and remote code execution vulnerability exists in Grav CMS before version 2.0.15. The vulnerability is caused by using an incomplete denylist validation approach for bare PHP functions in the Blueprint dynamic-data compiler, allowing authenticated users with page-editing or blueprint-configuration privileges to execute arbitrary functions such as error_log.

Alon Barad
Alon Barad
2 views•4 min read
•about 2 hours ago•CVE-2026-75834
5.4

CVE-2026-75834: Input Sanitization Bypass leading to Stored XSS in Grav CMS

CVE-2026-75834 is a stored Cross-Site Scripting (XSS) vulnerability in Grav CMS core, caused by a design flaw in its input validation wrapper Security::detectXss(). Regular expressions using the PCRE UTF-8 /u modifier fail-open when encountering invalid UTF-8 sequences or when the PCRE JIT stack limit is exhausted, allowing authenticated users with page-editing privileges to save malicious HTML and scripts.

Alon Barad
Alon Barad
4 views•6 min read
•about 3 hours ago•CVE-2026-75837
9.1

CVE-2026-75837: Privilege Escalation in Grav CMS via Missing Blueprint Validation

CVE-2026-75837 is a critical privilege escalation vulnerability affecting the Grav Flat-File Content Management System (CMS) in versions prior to 2.0.14. Due to a missing security guard on the access field within the core Flex group blueprint configuration file (system/blueprints/user/group.yaml), a delegated administrative operator can submit a crafted payload to elevate their permissions to super-administrator, which can then be leveraged to achieve remote code execution.

Alon Barad
Alon Barad
4 views•8 min read
•about 3 hours ago•CVE-2026-76461
9.8

CVE-2026-76461: SQL Injection to Remote Code Execution in Cisco Secure Email Gateway

CVE-2026-76461 is a critical, unauthenticated, remotely exploitable SQL Injection (SQLi) vulnerability in the email parsing engine of Cisco AsyncOS Software for Cisco Secure Email Gateway (SEG). An unauthenticated remote attacker can exploit this vulnerability by transmitting a specially crafted email message containing malicious SQL statements directly through an affected gateway.

Amit Schendel
Amit Schendel
9 views•5 min read
•about 4 hours ago•CVE-2026-72819
8.8

CVE-2026-72819: Remote Code Execution in Grav CMS via Dynamic Callable Validation Bypass in Blueprint

CVE-2026-72819 is a high-severity Remote Code Execution (RCE) vulnerability in Grav CMS before version 2.0.13. The vulnerability lies in the validation of dynamic data providers (callbacks) within the Flex Objects plugin settings and blueprints, allowing administrative users to bypass validation checks via array-notation callables. This validation failure enables administrative users to execute arbitrary PHP classes and methods, including the GPM Installer unZip routine, leading to full remote code execution on the server.

Amit Schendel
Amit Schendel
8 views•9 min read
•about 5 hours ago•CVE-2026-75523
5.9

CVE-2026-75523: Exposure of Sensitive Query Parameter Secrets in Steeltoe Actuator Endpoints

Steeltoe, a popular framework for building cloud-native .NET applications, contains a critical data-exposure flaw in its HttpExchanges actuator endpoint before version 4.3.0. When explicitly configured to include query strings, the system records and stores sensitive values (such as OAuth tokens and credentials) in memory and application debug logs without sanitization, exposing them to unauthorized network actors.

Alon Barad
Alon Barad
5 views•5 min read