
Linux kernel local privilege escalation exploit for CVE-2026-31635 that corrupts page cache via RxRPC in-place decryption, overwrites read-only files, and executes shellcode, with a verification mode.
Linux local privilege escalation in the RxRPC/GSSAPI decryption path. A missing
skb_cow_data()check inrxgk_decrypt_skb()allows an unprivileged local attacker to corrupt page cache pages and overwrite in-memory contents of read-only files.
This repository contains the research materials and proof-of-concept for CVE-2026-31635, a local privilege escalation in Linux kernel net/rxrpc/rxgk.c.
The vulnerability occurs when RxRPC decrypts packets in-place using AES-CBC without first ensuring the packet data is private. If the packet is built from page cache pages, the kernel may decrypt directly into shared file-backed memory.
Choose the path that matches your goal:
CONFIG_RXGK./dirtydecrypt --checkcd exploitmakedocs/vulnerability-analysis.mddocs/patch-analysis.md and docs/exploit-development.md⚠️ This repository is for authorized research and testing only. Do not use it against systems without explicit permission.
Run the following checks to determine whether your environment is in scope:
uname -r
zgrep CONFIG_RXGK /proc/config.gz 2>/dev/null || grep CONFIG_RXGK /boot/config-$(uname -r)
If the kernel is in the 6.10–6.13 range and CONFIG_RXGK is enabled, the system may be vulnerable.
Then use the exploit PoC verification mode:
cd exploit
./dirtydecrypt --check
If the check succeeds, the system is vulnerable. If it fails cleanly or reports missing RxRPC support, then the kernel is not exploitable.
The exploit uses a malformed RxRPC packet to force the kernel into decrypting into a shared page cache page.
Steps:
rxgk_decrypt_skb() in the kernel.The exploit is demonstrated in exploit/dirtydecrypt.c.
6.10 through 6.13CONFIG_RXGK=m or CONFIG_RXGK=yrxgkCONFIG_RXGK disabled by defaultgit clone https://github.com/0xFuffM3/CVE-2026-31635-DirtyDecrypt.git
cd exploit
make
For a fully static binary:
make static
./dirtydecrypt --check
Example usage:
./dirtydecrypt -f /usr/bin/sudo -o /tmp/sudo_patched
./dirtydecrypt -p shellcode/payload.bin
docs/vulnerability-analysis.mddocs/exploit-development.mddocs/patch-analysis.mddocs/affected-kernels.mdDisable RxRPC if it is not required:
sudo rmmod rxrpc
sudo modprobe -r rxgk
echo "blacklist rxrpc" | sudo tee /etc/modprobe.d/blacklist-rxrpc.conf
Upgrade to a patched kernel release:
6.13.26.12.106.6.75Audit relevant socket creation and key operations:
sudo auditctl -a always,exit -F arch=b64 -S socket -F a0=28 -k rxrpc_sock
Q: Can this exploit modify files on disk?
A: No. The vulnerability corrupts page cache contents only; the backing file on disk remains unchanged unless the page is later flushed.
Q: Is this vulnerability present on kernels newer than 6.13?
A: No, the patch was backported and the vulnerable code path is fixed in kernels after 6.13.2.
Q: What is the safest way to test this?
A: Use an isolated VM with a stock vulnerable kernel and a disposable user account.
Q: Where can I find the exploit source?
A: See exploit/dirtydecrypt.c and exploit/README.md.
CVE-2026-31635-DirtyDecrypt/
├── README.md
├── LICENSE
├── DISCLAIMER.md
├── CHANGELOG.md
├── exploit/
│ ├── README.md
│ ├── dirtydecrypt.c
│ ├── Makefile
│ └── shellcode/
│ └── payload.asm
└── docs/
├── vulnerability-analysis.md
├── exploit-development.md
├── affected-kernels.md
├── patch-analysis.md
└── references.md
MIT — see LICENSE.
This repository is intended for educational and authorized security research use only.
| Property | Detail |
|---|
| CVE | CVE-2026-31635 |
| Component | net/rxrpc/rxgk.c — rxgk_decrypt_skb() |
| Root cause | Missing skb_cow_data() check before decryption |
| Impact | Local privilege escalation to root |
| Affected kernels | 6.10 – 6.13 |
| Fixed in | 6.13.2 · 6.12.10 · 6.6.75 |