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-20936

HDCPwned: Breaking the Samsung TrustZone Barrier via DRM

Amit Schendel
Amit Schendel
Senior Security Researcher

Feb 16, 2026·7 min read·36 visits

Executive Summary (TL;DR)

Samsung's HDCP DRM component, running in the secure TrustZone, failed to validate who was talking to it. Local attackers could use this to send privileged commands, corrupt secure memory, and escalate from a basic user to Root.

A critical privilege escalation vulnerability within Samsung's HDCP trustlet allows a local attacker to bypass Trusted Execution Environment (TEE) boundaries. By exploiting improper access controls in the communication interface between the Android kernel and the Secure World, a standard shell user can execute privileged commands, leading to total device compromise and root access.

The Hook: The Ivory Tower of TrustZone

In the world of Android security, the TrustZone (or TEE - Trusted Execution Environment) is the Holy of Holies. It is a hardware-isolated area of the processor where the most sensitive operations happen: biometric authentication, payment processing, and cryptographic key storage. The code running here, known as 'trustlets', operates with privileges that eclipse even the Android kernel (Ring 0). If you can compromise a trustlet, the entire security model of the device collapses like a house of cards in a hurricane.

Enter HDCP (High-bandwidth Digital Content Protection). It's that annoying DRM protocol that stops you from recording Netflix streams. To keep the content encryption keys safe, the HDCP logic runs as a trustlet inside the Samsung TEE. While DRM is generally boring, for a hacker, this component is a gold mine. Why? Because it exposes a communication interface to the 'Normal World' (the Android OS). And as history has taught us repeatedly, wherever two worlds meet, there is friction—and usually, a vulnerability.

CVE-2025-20936 isn't just a bug; it's a structural failure in how that communication was policed. Samsung's implementation created a bridge for video data, but they forgot to put a guard at the tollbooth. This vulnerability allows a lowly shell user to walk right into the most secure room in the building and start issuing orders.

The Flaw: A Doorman Asleep on the Job

The vulnerability is a classic case of CWE-285: Improper Access Control. When a user-space application needs to talk to a trustlet, it can't just call it directly. It has to go through a kernel driver (often /dev/qseecom or a specific /dev/tz_hdcp node). This driver takes the request, packages it, and utilizes the Secure Monitor Call (SMC) instruction to context-switch into the Secure World.

The flaw here is embarrassingly simple: the interface failed to check who was knocking. In a proper implementation, the kernel driver or the trustlet itself should verify the User ID (UID) of the calling process. Only trusted system services, like mediaserver or drmserver, should be allowed to speak to the HDCP trustlet. However, the affected code treated a request from a random shell user (UID 2000) with the same respect as a request from the system itself.

This lack of 'Access Control Lists' (ACLs) meant that the attack surface was wide open. A local attacker didn't need to find a complex memory corruption bug in the kernel first; they just needed to ask the trustlet nicely. By sending specific IOCTL commands that were intended for privileged initialization or key management, the attacker could trick the trustlet into performing operations that it assumed were authorized. It's the digital equivalent of walking into a bank vault because the security guard assumed anyone wearing a shirt and shoes was an employee.

The Code: Anatomy of a Broken Check

Since the actual source code for Samsung's proprietary trustlets is closed (and usually only seen via Ghidra/IDA Pro reverse engineering), we can visualize the logic failure through a reconstruction of the vulnerable driver handler. The issue lies in the ioctl handler responsible for dispatching commands to the TEE.

Vulnerable Logic (Pseudo-code):

// The Vulnerable IOCTL Handler
long hdcp_driver_ioctl(struct file *file, unsigned int cmd, unsigned long arg) {
    struct hdcp_req_data data;
 
    // 1. Copy data from user space
    if (copy_from_user(&data, (void __user *)arg, sizeof(data)))
        return -EFAULT;
 
    // 2. THE MISSING CHECK
    // The code proceeds to send the command to the Secure World
    // regardless of current_uid().
 
    // 3. Dispatch to TrustZone
    return send_cmd_to_trustlet(data.cmd_id, data.payload);
}

In the patched version, Samsung had to explicitly enforce caller identity. The fix likely introduces a check against a whitelist of allowed UIDs (like AID_MEDIA or AID_SYSTEM) or verifies the process context capabilities before allowing the SMC call to proceed.

Patched Logic (Pseudo-code):

// The Fixed IOCTL Handler
long hdcp_driver_ioctl(struct file *file, unsigned int cmd, unsigned long arg) {
    // 1. SECURITY CHECK: Is the caller authorized?
    // Only allow specific system UIDs to touch this interface
    uid_t uid = current_uid().val;
    if (uid != AID_MEDIA && uid != AID_SYSTEM && uid != AID_ROOT) {
        pr_err("HDCP: Unauthorized access attempt by UID %d\n", uid);
        return -EPERM; // Access Denied
    }
 
    // ... proceed with copy_from_user and TrustZone dispatch ...
}

By omitting that simple if statement, the driver effectively exposed the raw Secure World API to every app installed on the device.

The Exploit: From Shell to Root

Exploiting this requires a bit of finesse, but the path is clear. The goal is Local Privilege Escalation (LPE). The attacker starts with shell access—perhaps achieved via adb shell or by sideloading a malicious app. The target is the exposed /dev/ node associated with the HDCP trustlet.

Phase 1: The Setup The exploit opens a file descriptor to the vulnerable driver. Since there are no permission checks, open("/dev/tz_hdcp", O_RDWR) succeeds even from an unprivileged context.

Phase 2: The Payload The attacker crafts a specific IOCTL structure. This structure contains a command ID that the trustlet interprets as a "write" or "config" operation. Because the trustlet runs in the Secure World, it has a view of all physical memory, including the Normal World kernel memory. The exploit leverages a specific command (Command Misuse) that triggers the trustlet to write data to a memory location specified by the attacker (or implied by the command context).

Phase 3: The Execution By manipulating the arguments passed to the trustlet, the attacker coerces the Trusted Application to overwrite the cred structure (credentials) of the attacking process in the Linux kernel memory. This is the 'god mode' toggle.

Once the cred structure is overwritten to effectively uid=0, gid=0, the attacker has full root access to the Android system, bypassing the sandbox entirely.

The Impact: Why This Matters

A vulnerability like CVE-2025-20936 is a nightmare scenario for device security. It breaks the fundamental promise of the Trusted Execution Environment. TEEs are designed to protect secrets even if the main OS is compromised, but in this case, the TEE itself is the weapon used to compromise the OS.

With root access gained via this exploit, an attacker can:

  1. Bypass Application Sandboxes: Access private data (photos, messages, tokens) from any other application.
  2. Persist Malware: Modify the system partition (if write protection allows) or install persistent hooks in the user data partition.
  3. Defeat SafetyNet/Play Integrity: By controlling the kernel, attackers can potentially mask the device's compromised state, allowing them to run banking apps or cheats on a rooted device.

The fact that this was reachable from an unprivileged shell makes it a prime candidate for spyware chains or "one-click" root solutions. It demonstrates that complexity (adding HDCP DRM) is the enemy of security.

Official Patches

SamsungSamsung April 2025 Security Maintenance Release

Technical Appendix

CVSS Score
8.8/ 10
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
EPSS Probability
0.06%
Top 82% most exploited

Affected Systems

Samsung Mobile Devices running Android 13Samsung Mobile Devices running Android 14Samsung Mobile Devices running Android 15

Affected Versions Detail

Product
Affected Versions
Fixed Version
Samsung Android 13
Samsung
< SMR Apr-2025 Release 1SMR Apr-2025 Release 1
Samsung Android 14
Samsung
< SMR Apr-2025 Release 1SMR Apr-2025 Release 1
Samsung Android 15
Samsung
< SMR Apr-2025 Release 1SMR Apr-2025 Release 1
AttributeDetail
CWE IDCWE-285
Attack VectorLocal (AV:L)
CVSS8.8 (Critical)
Privileges RequiredLow (PR:L)
ImpactConfidentiality, Integrity, Availability (High)
Exploit StatusPoc / Internal Research

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
T1548Abuse Privilege Escalation Mechanism
Privilege Escalation
CWE-285
Improper Authorization

The application does not perform or incorrectly performs an authorization check when an actor attempts to access a resource or perform an action.

Vulnerability Timeline

Internal discovery by Vincenzo Bonforte (SVE-2024-1795)
2024-12-01
Public Disclosure via Samsung Bulletin
2025-04-08
Patch Released (Apr-2025 SMR)
2025-04-08

References & Sources

  • [1]Samsung Mobile Security Update
  • [2]NVD Detail

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•25 minutes ago•GHSA-M3Q2-P4FW-W38M
2.3

GHSA-M3Q2-P4FW-W38M: Cross-Site Scripting (XSS) via Unsafe innerHTML Assignment in Nuxt <NoScript> Component

A low-severity Cross-Site Scripting (XSS) vulnerability in Nuxt's globally registered <NoScript> head component allows unauthenticated attackers to execute arbitrary JavaScript. By injecting dynamic, untrusted data into <NoScript> slots, standard Vue HTML escaping is bypassed because the component processes slot text nodes and assigns them directly to the target element's innerHTML property instead of textContent. In modern browsers with scripting enabled, this raw injection can implicitly close the <noscript> tag, triggering script execution.

Amit Schendel
Amit Schendel
0 views•8 min read
•about 1 hour ago•CVE-2026-49993
5.7

CVE-2026-49993: Proprietary Source Code Exfiltration via Incomplete Same-Origin Verification in Nuxt Dev Servers

CVE-2026-49993 identifies an incomplete same-origin check validation mechanism in @nuxt/webpack-builder and @nuxt/rspack-builder dev server middleware. When the local development server is bound to a non-loopback address, cross-origin attackers can bypass verification checks by suppressing browser headers, leading to unauthorized retrieval and exfiltration of compiled source code chunks.

Amit Schendel
Amit Schendel
1 views•4 min read
•about 2 hours ago•GHSA-69QJ-PVH9-C5WG
7.5

GHSA-69QJ-PVH9-C5WG: Command Injection in yt-dlp `--exec` Option

An OS command injection vulnerability in yt-dlp before 2026.06.09 allows unauthenticated remote attackers to execute arbitrary shell commands via crafted media metadata when a user processes media using the --exec post-processing parameter with unsafe string interpolation conversions.

Alon Barad
Alon Barad
5 views•7 min read
•about 3 hours ago•GHSA-7CX2-G3H9-382P
8.1

GHSA-7CX2-G3H9-382P: Multiple Vulnerabilities in Crawl4AI Docker API (Arbitrary File Write, SSRF, CRLF Log Injection)

An in-depth technical analysis of multiple security vulnerabilities in the self-hosted Docker API server of Crawl4AI up to version 0.8.7. These flaws include a critical arbitrary file write via symlink traversal and TOCTOU weakness, CRLF log injection, webhook header injection, and SSRF filter gaps. These have been remediated in version 0.8.8.

Alon Barad
Alon Barad
3 views•6 min read
•about 4 hours ago•GHSA-F989-C77F-R2CQ
8.2

GHSA-f989-c77f-r2cq: LLM Credential Exfiltration and SSRF in Crawl4AI Docker Server

A technical evaluation of the Crawl4AI open-source web crawling and scraping library revealed a high-severity credential exfiltration vulnerability in its self-hosted Dockerized API server. The flaw arises from an unvalidated base_url parameter in request payloads and a dynamic prefix resolution mechanism that retrieves system environment variables. Unauthenticated remote attackers can leverage these features in tandem to extract host-level secrets or redirect configured LLM API keys to an external listener under their control.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 4 hours ago•GHSA-365W-HQF6-VXFG
9.8

GHSA-365w-hqf6-vxfg: Multiple Critical Vulnerabilities in Crawl4AI Docker API Server

The Crawl4AI Docker API server, in versions 0.8.6 and prior, contains multiple critical vulnerabilities including improper path sanitization, missing authentication on administration routes, hardcoded JWT secrets, and SSRF. These vulnerabilities allow remote, unauthenticated attackers to write arbitrary files, execute arbitrary code, and pivot into private cloud environments.

Amit Schendel
Amit Schendel
6 views•7 min read