CVE-2026-0160
Executive Summary
CVE-2026-0160 is a critical remote code execution vulnerability in the TextRtpPayloadDecoderNode::DecodeT140 function within TextRtpPayloadDecoderNode.cpp. The flaw is an out-of-bounds write caused by a missing bounds check when processing T.140 text data over RTP. An unauthenticated attacker can trigger this remotely without user interaction, leading to full system compromise. No patch or public exploit is currently available, but the vulnerability is weaponizable.
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 affects a native C++ component (TextRtpPayloadDecoderNode) likely part of a multimedia or real-time communication library. No NPM, PyPI, Go, or Ruby packages are directly involved, but downstream dependencies using this decoder (e.g., WebRTC stacks, VoIP applications) are at risk. Supply chain risk is high due to the lack of a patch.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- Base Score: 9.8 (Critical)
- Attack Vector: Network (AV:N) – exploitable remotely.
- Attack Complexity: Low (AC:L) – no special conditions required.
- Privileges Required: None (PR:N) – no authentication needed.
- User Interaction: None (UI:N) – fully autonomous.
- Scope: Unchanged (S:U) – vulnerable component only.
- Confidentiality/Integrity/Availability: High (C:H/I:H/A:H) – full compromise.
Threat Level: Critical. Immediate action required.
Deep Dive & Mechanics
The vulnerability resides in TextRtpPayloadDecoderNode::DecodeT140, which processes T.140 real-time text data encapsulated in RTP packets. T.140 is used for live text communication (e.g., captioning, chat). The function fails to validate the length of the incoming payload before writing to a fixed-size buffer. An attacker can craft a malformed RTP packet with a payload length exceeding the buffer capacity, causing a heap-based buffer overflow. This overwrites adjacent memory, enabling arbitrary code execution in the context of the decoder process.
Root Cause: Missing bounds check on payload_length before memcpy or similar write operation.
Attack Vector: Sending a specially crafted RTP packet to a service using the vulnerable decoder (e.g., a VoIP server, streaming platform).
Vulnerable vs. Patched Code
Vulnerable Code (pseudocode):
void TextRtpPayloadDecoderNode::DecodeT140(const uint8_t* payload, size_t payload_length) {
char buffer[256];
// Missing bounds check
memcpy(buffer, payload, payload_length); // OOB write if payload_length > 255
// ... process buffer
}
Patched Code (hypothetical):
void TextRtpPayloadDecoderNode::DecodeT140(const uint8_t* payload, size_t payload_length) {
char buffer[256];
if (payload_length >= sizeof(buffer)) {
// Handle error, drop packet
return;
}
memcpy(buffer, payload, payload_length);
// ... process buffer
}
The patch adds a length check before the copy operation, preventing the overflow.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A target running the vulnerable decoder (e.g., a custom VoIP server).
- Ability to send raw RTP packets (e.g., using Scapy or custom C code).
Exploit Concept:
- Craft an RTP packet with a T.140 payload length > 256 bytes.
- Include shellcode in the payload to overwrite a function pointer or return address.
- Send the packet to the target's RTP port (typically 5004 or dynamic).
Example Scapy Script:
from scapy.all import *
import struct
# Craft RTP header (simplified)
payload = b"A" * 256 + b"\x90\x90\x90\x90" + shellcode # overflow + NOP sled + shellcode
pkt = IP(dst="192.168.1.100")/UDP(sport=12345, dport=5004)/RTP(payload=payload)
send(pkt)
Note: No public exploit exists; this is a conceptual demonstration.
Blue Team (Defense)
Detection:
- Monitor for RTP packets with T.140 payloads exceeding 256 bytes.
- Use network intrusion detection (Suricata) to flag oversized T.140 data.
- Enable ASLR, DEP, and stack canaries to mitigate exploitation.
Honeypot:
- Deploy a fake T.140 decoder service to capture exploit attempts.
Indicators of Compromise (IOCs)
- Network: RTP packets with T.140 payload length > 256 bytes.
- Memory: Heap corruption patterns in
TextRtpPayloadDecoderNodeprocess. - Logs: Unexpected crashes or segmentation faults in the decoder process.
- File: Modified binary or injected DLLs in the decoder's memory space.
Detection Engineering
YARA Rule
rule CVE_2026_0160_T140_Overflow {
meta:
description = "Detects T.140 RTP payloads exceeding 256 bytes"
author = "Valters IT"
date = "2025-04-10"
strings:
$t140_marker = { 00 01 02 03 } // Example T.140 header bytes
condition:
// Check for RTP payload length > 256 (adjust offset as needed)
uint16(0) > 256 and $t140_marker at 0
}
Sigma Rule
title: CVE-2026-0160 T.140 Buffer Overflow Attempt
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects oversized T.140 RTP payloads
logsource:
category: network
product: suricata
detection:
selection:
app_protocol: 'rtp'
payload_length: > 256
condition: selection
falsepositives:
- Legitimate large T.140 messages (rare)
level: critical
Suricata Rule
alert udp any any -> any 5004 (msg:"CVE-2026-0160 T.140 Buffer Overflow Attempt"; content:"|00 01 02 03|"; offset:0; depth:4; byte_test:2,>,256,0; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Isolate any systems using the vulnerable decoder until a patch is available.
- Apply network segmentation to restrict RTP traffic to trusted sources.
- Enable WAF/IPS rules to block oversized T.140 payloads.
Long-Term Fix:
- Vendor must release a patched version with proper bounds checking.
- If vendor is unresponsive, consider forking the code and applying the fix manually.
Workaround:
- Disable T.140 decoding if not essential.
- Use a proxy to validate RTP payload lengths before forwarding.
Valters IT