Dirty COW CVE-2016-5195: How a 2016 Linux Kernel Race Condition Still Enables Privilege Escalation in Embedded Systems
The 2016 discovery of CVE-2016-5195, widely known as Dirty COW, revealed a race condition in the Linux kernel’s copy-on-write mechanism. The flaw enabled a local attacker to modify memory pages that should have remained read-only, providing a primitive for writing to protected files or memory regions.
Although the vulnerability was fixed in October 2016 for mainstream distributions, many embedded devices continue to run unpatched kernels for years. Routers, IP cameras, industrial controllers, and similar hardware often ship with vendor firmware that is rarely updated, leaving the original bug intact.
What Dirty COW Actually Allows
Dirty COW does not grant root privileges directly. It supplies a write primitive that can alter files such as /etc/passwd or overwrite code in memory-mapped regions. Attackers must then chain this primitive with additional steps, such as adding a root user entry or modifying a SUID binary, to achieve privilege escalation.
Public proof-of-concept code repeatedly triggers the race by writing through /proc/self/mem while calling madvise(..., MADV_DONTNEED). Correct timing causes the kernel to drop the original copy-on-write page, allowing the attacker’s data to persist in the shared mapping.
Why Ready-Made Exploits Often Fail
Many public Dirty COW exploits assume a full GNU userland with /bin/sh and conventional login utilities. On embedded systems that use BusyBox, these assumptions break. The single BusyBox binary may lack the expected applet, the required symbolic link may be absent, or the arguments passed to execve may not match the applet’s expectations.
Another common target is vDSO, a small kernel-provided library mapped into every process address space. Because vDSO exists only in memory and not as a file on disk, overwriting its functions requires precise knowledge of the architecture, the exported symbols, and the exact function chosen by the exploit. Payloads must also be written in the correct instruction set and respect the target ABI.
Practical Checks Before Exploitation
- Kernel version, build date, and presence of the Dirty COW patch
- Processor architecture, endianness, and enabled mitigations
- Available BusyBox applets and presence of login or su mechanisms
- Existence and contents of SUID binaries
- Presence and exported symbols of vDSO in process memory maps
- Compatibility of the chosen payload with the system’s libraries and shell environment
Exploitation attempts should be performed only on isolated test systems with rollback capability, as race-condition bugs can corrupt data or crash the target.
The article concludes by pointing readers to the free “White Hacker” course on the CyberED platform, where the practical lab “Strange And Dirty” requires participants to adapt a Dirty COW exploit to a minimal BusyBox environment and complete the privilege-escalation chain.
Related articles
Nightmare Eclipse Publishes SignDrop Zero-Day in Windows CLFS Driver
Security researcher Abdelhamid Naseri, known as Nightmare Eclipse, has disclosed a new zero-day vulnerability named SignDrop affecting the Common Log File System (CLFS) driver in Windows. The flaw allows attackers to bypass authentication protections introduced by Microsoft in October 2025 and escalate privileges on affected systems. SignDrop exploits the way CLFS handles .cnpf authentication file creation when a new log file is generated, enabling a privileged process to open the file later and create it with SYSTEM rights. The technique can also be abused against any antivirus or EDR engine to disable self-protection mechanisms by making file creation requests appear to originate from the legitimate security process itself. Nightmare Eclipse confirmed the issue works on Windows 11 26H2, Windows 11 26H2 Experimental, and Windows Server 2025 Experimental, impacting an estimated 80 percent of Windows installations. No workaround exists other than waiting for a Microsoft patch, as disabling CLFS protections would reintroduce memory corruption risks. The researcher previously released multiple other zero-days, including BigDiskBuster and RoguePlanet targeting Microsoft Defender.
Telegram Patches RCE Vulnerabilities in HTML Widgets After Researcher Demonstrates Calculator Exploit
Telegram introduced HTML widgets for bots in early November, allowing JavaScript execution inside messages via the QuickJS engine. Security researcher V12 quickly demonstrated remote code execution by launching the system calculator on Android. Pavel Durov responded that no vulnerability existed because the user had to first start the bot, yet server-side fixes were deployed anyway. Multiple use-after-free and use-after-return bugs were identified in QuickJS and QuickJS-ng, some discovered with AI assistance from Claude Fable 5.1 and Mythos 5.2. Telegram isolated the widget engine into a separate process on Android, added syscall filtering, and limited nested graphical effects to prevent crashes. Desktop clients received the fixes across versions 7.4.2 and 7.4.3, while widgets were temporarily restricted server-side. Users are advised to update to Android 13.2.2 or Desktop 7.4.3 and avoid unknown bots.
Telegram Patches Critical QuickJS Sandbox Escape Vulnerability in Android Update 13.2.2
Telegram has released version 13.2.2 for Android to address a high-severity vulnerability in its HTML widgets for bots. The flaw resided in the QuickJS JavaScript engine within Telegram's QuickJS-ng fork and allowed scripts in ordinary messages to break out of the sandbox and execute native code on the device. The root cause was improper handling of the await using construct inside non-async functions, which triggered a use-after-return condition by freeing local variable references while nested functions still accessed the stack. The vulnerable code entered the QuickJS-ng main branch on May 16 as part of explicit resource management support. Security researcher Andreas Rösler discovered the issue during an AI-assisted audit with Anthropic's Claude model that identified 27 findings total. The patch enforces a syntax error on the invalid construct and was merged on November 10, the same day the Android release became available. Although reported against Android 13.2.1, the bug affected every platform using the affected engine fork.
Node.js Patches 16 Vulnerabilities Exposing TLS Private Keys and Cross-Connection Data
The Node.js project has released fixes addressing 16 vulnerabilities, seven of which are rated high severity. The most critical issue, CVE-2026-123864, allows an unauthenticated client to read memory from other HTTPS connections, potentially exposing TLS private keys and requests belonging to other users. Three supported release lines were affected, and exploitation requires a specific application code pattern involving res.flushHeaders() and res.end() calls before the request body is fully received. Additional high-severity flaws include CVE-2026-123863, which crashes HTTP/2 servers, CVE-2026-123866 that leaks server memory chunks to clients, and CVE-2026-123865 that causes permanent memory and file descriptor leaks in HTTP/2 servers. Several other CVEs affect TLS renegotiation, SNI callbacks, and file streaming functions. The project states that end-of-life branches including 20.x and 25.x remain vulnerable with no patches available.