CVE-2026-70455
CVE-2026-70455 Threat Intelligence Report
Document Classification: TLP:CLEAR
Date: 2026
Prepared By: Valtersit Threat Intelligence
Audience: Enterprise Security Teams, SOC Analysts, Penetration Testers
Executive Summary
CVE-2026-70455 is unpatched (patch confidence 0/4) denial-of-service vulnerability in rsync 3.4.2 through 3.5.0-rc1 — reachable by an unauthenticated, remote sender targeting an rsync receiver daemon. The flaw lets a remote attacker bypass the refuse options directive's string-matching protections by supplying the short alias --zt for --compress-threads, and then specifying --zt=N with an arbitrarily large value. The receiver spawns an unbounded number of Zstandard (zstd) worker threads, exhausting memory and thread limits to crash the target process or entire host. With AV:N / PR:N / UI:N / S:U / C:N / I:N / A:H (CVSS 7.5), the vulnerability is remotely triggerable with zero privileges, no user interaction, and requires no existing foothold — a critical availability concern for any enterprise relying on rsync-over-daemon for backup, replication, or content distribution.
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
Technical Analysis
Vulnerability Mechanism
rsync is a file-synchronization utility that runs in one of two operational modes — as a client (sender) or a daemon (receiver). When run as a daemon on port 873/TCP (or over an SSH transport), the receiver parses command-line options received from the remote sender. Administrators commonly enforce refuse options in rsyncd.conf to block dangerous flags (e.g., --delete, --compress) from being set by remote clients.
The flaw lies in a short-option alias bypass:
--ztis an undocumented short alias for--compress-threads.The
refuse optionsdirective performs string matching on the long option name (compress-threads) but fails to match the short alias (-zt).A malicious remote sender passes
--zt=Nwhere N is any large integer.The receiver treats this as
--compress-threads=N, which spawns N Zstandard worker threads — each requiring its own thread stack (typically 8–16 MB virtual) and associated memory context.There is no upper-bound validation on N; an attacker can specify values in the tens of thousands, immediately exhausting:
- Process thread limit (
RLIMIT_NPROC/pthread_max) - Available memory via thread stack allocation
- CPU scheduling as the kernel attempts to schedule a massive thread pool
- Process thread limit (
The result is a complete denial of service — the rsync daemon process either exhausts memory and dies, becomes unresponsive, or the entire host destabilizes (OOM-killer invoked). On multi-tenant hosts, this may crash collocated services.
Attack Surface
| Surface | Detail |
|---|---|
| Protocol | rsync daemon protocol (default port 873/TCP), SSH-wrapped rsync |
| Precondition | rsync daemon (rsync --daemon) running version 3.4.2–3.5.0-rc1 with module access |
| Auth | None required — rsync daemon modules may allow anonymous read/write access by default |
| Trigger | Single TCP connection sending --zt=<large> in option negotiation |
| Complexity | Low — no special payloads, no exploitation chaining, no user interaction |
The attack is trivially scriptable — a single rsync -zt=999999 source/ target/ invocation or a raw protocol handshake suffices. The vulnerability is independent of the data being transferred; a zero-byte file transfer can trigger the option parsing flaw.
Root Cause Class
This is a CWE-770: Allocation of Resources Without Limits or Throttling. The software fails to bound the number of configurable worker threads based on architecture-specific constraints (CPU count, available RAM). This is distinct from a logic bug — the design allows unbounded resource allocation by design, but the refuse options mechanism was intended to mitigate it. The short-alias match bypass renders that mitigation useless.
Exploitation Scenarios
Note: No public PoC is available at the time of writing. The attack chain below is inferred from the NVD description and vulnerability class; specific implementation details are not fabricated.
Attack Chain
Step 1 — Reconnaissance / Target Identification
- Attacker scans for hosts exposing port 873/TCP or SSH with rsync configured (
/usr/bin/rsyncwith--daemonin inetd/xinetd). - Tools: Shodan dork
port:873, banner grabbing viarsync --versionor raw socket connection to retrieve the rsync banner (e.g.,@RSYNCD: 31.0). - Attacker confirms version falls in the 3.4.2 ≤ version < 3.5.0 range.
Step 2 — Flaw Trigger
- Attacker establishes a connection to the rsync daemon and authenticates to an accessible module (anonymous read access is often enabled by default for public mirrors).
- During option negotiation, the attacker specifies
--zt=100000(or higher). - Because the
refuse optionsdirective checks only the long namecompress-threads, the short alias-ztpasses the filter.
Step 3 — Payload / Execution Method
- The receiver processes
--zt=100000as--compress-threads=100000. - The rsync process attempts to initialize 100,000 Zstandard worker threads.
- Each thread allocation consumes kernel resources; the process quickly hits
RLIMIT_NPROCor exhausts virtual memory for thread stacks. - The process either:
- Crashes (SIGSEGV / SIGABRT from thread creation failure), or
- Becomes unresponsive (deadlock / livelock in thread scheduler), or
- Triggers host OOM-killer, killing the rsync process and potentially other processes.
Step 4 — Post-Exploitation Impact
- On the rsync process: service unavailable; subsequent legitimate sync attempts fail.
- On the host: if memory exhaustion is severe and no cgroup limits exist, the kernel's OOM-killer may terminate unrelated services (databases, web servers) on the same host.
- In enterprise environments: backup pipelines, CI/CD artifacts distribution, or web-server replication breaks — potentially causing cascading system degradation.
Variants
- Multiple concurrent connections: A single attacker can open many simultaneous low-resource connections, each spawning thousands of threads, amplifying the impact.
- SSH tunnel: If rsync is wrapped in SSH with
rsync --serverforwarding, the same--ztoption passes through the SSH session, though SSH typically limits concurrent sessions.
Impact Assessment
CVSS Sub-score Analysis (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H — 7.5)
| Component | Value | Interpretation |
|---|---|---|
| AV:N | Network | Remotely exploitable without physical/logical adjacency |
| AC:L | Low | No race conditions, no special conditions, no windows of opportunity |
| PR:N | None | No authentication required — anonymous rsync access suffices |
| UI:N | None | No user interaction from victim required |
| S:U | Unchanged | Impact confined to the vulnerable component (rsync process/host) |
| C:N / I:N | None | No confidentiality or integrity impact — this is pure availability |
| A:H | High | Total availability loss of the rsync service; potential host destabilization |
Business Impact
| Sector | Impact |
|---|---|
| Cloud providers | Public rsync mirrors (e.g., Linux distro mirrors) are high-value targets — a single attacker can take down distribution infrastructure |
| Enterprise backup | rsync-based backup pipelines (rsnapshot, commercial tools) — backup windows fail, potentially risking data loss (unreplicated changes) |
| CI/CD | Artifact syncing and code distribution break, stalling releases |
| Critical infrastructure | Any ICS/OT environment using rsync for file syncing between zones |
Blast Radius
- Directly affected: The rsync daemon process on the target host.
- Indirectly affected: Any process on the same kernel sharing memory/thread resources (mitigated by cgroups/containers).
- Downtime projection: Without a patch, manual process restart is required — restart alone does NOT resolve the issue, since the same attack can be re-triggered. Persistent availability threat until the upstream fix or workaround is deployed.
Detection Guidance
Detection rules below target both exploitation attempts (option negotiation with
--zt) and indicative behavior (thread explosion / process failure).
Sigma Rule
title: Rsync Compress-Threads Short Alias DoS Attempt (CVE-2026-70455)
id: 8f9b2d1e-3a4c-4b9f-9e0a-c1d2e3f4a5b6
status: experimental
description: Detects rsync option negotiation containing -zt/--zt with a large value, indicating an attempt to trigger CVE-2026-70455.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-70455
author: Valtersit Threat Intel
date: 2026/01/01
logsource:
category: process_creation
product: linux
detection:
selection_rsync:
Image|endswith: '/rsync'
selection_cmdline:
CommandLine|contains|all:
- '--server' # receiver mode
CommandLine|contains:
- '--zt' # short alias of --compress-threads
selection_large_value:
CommandLine|re: '(?i)\-\-zt\s*[= ]\s*\d{4,}' # 4+ digits (>= 1000)
condition: selection_rsync and selection_cmdline and selection_large_value
falsepositives:
- Legitimate admins using -zt with reasonable values (unlikely >1000)
- Backup tooling that may pass compress-threads explicitly
level: high
YARA Rule
rule rsync_zt_compress_threads_dos {
meta:
author = "Valtersit Threat Intel"
description = "Matches rsync command-line strings attempting CVE-2026-70455"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-70455"
date = "2026-01-01"
cve = "CVE-2026-70455"
strings:
$a1 = "--zt" nocase
$a2 = "-zt" nocase
$b = "--compress-threads" nocase
$big = /\-\-zt[= ]\d{4,}/ nocase
condition:
// Captures both short-alias exploitation and long-form usage
( uint16(0) == 0x7f45 or filesize < 10MB ) and
( $a1 or $a2 ) and
$big
}
Suricata IDS Rule
alert tcp any any -> any 873 (msg:"CVE-2026-70455 rsync --zt compress-threads DoS attempt";
flow:to_server,established;
content:"--zt"; nocase; within:200;
content:"--server"; nocase; distance:0; within:400;
pcre:"/--zt(=|\s)\d{4,}/i";
classtype:attempted-dos;
reference:cve,2026-70455;
sid:2026704551; rev:1;)
Elastic Detection
process where event.type == "start" and process.name == "rsync" and
process.args : ("--server", "--daemon") and
wildcard(process.command_line, "*-zt*") and
regex(process.command_line, "--zt(=|\\s)\\d{4,}")
Splunk SPL Query
index=linux sourcetype=process_creation
| where match(CommandLine, "--zt[= ]\\d{4,}")
| search Image="*rsync*" OR Image="*/rsync"
| rename CommandLine as cmdline
| table _time host user cmdline process_id
| sort - _time
Wazuh OSSEC Rule
<group name="rsync,">
<rule id="100451" level="12">
<decoded>rsync</decoded>
<regex>(¬|--|-)zt(=|\s)\d{4,}</regex>
<description>CVE-2026-70455: rsync compress-threads short-alias DoS attempt detected</description>
<mitre>
<id>T1499</id>
</mitre>
<group>attempted_dos,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 0/4 — UNPATCHED. No upstream patch, vendor advisory, or CVE-fix commit is tracked. Upgrade path is to rsync 3.5.0+ per the NVD description (vulnerable range: 3.4.2 ≤ x < 3.5.0).
1. Immediate Mitigations (no patch available — implement all that apply)
| Mitigation | Description | Effort |
|---|---|---|
Disable --compress-threads globally |
Add refuse options = compress-threads to ALL rsyncd.conf instances. Note: this does NOT block the -zt bypass — see next row. |
Low |
| Block short-alias by brute force | Since refuse options fails on short aliases, reject unknown options by adding refuse options = * (refuse ALL options) OR use a whitelist approach in rsync config (allow options is not available in all versions — validate behavior) |
Medium |
| Network-level ACL | Restrict port 873/TCP to allow-list source IPs only (firewall / security group). Block anonymous access; require SSH-key–based rsync-over-SSH instead. | Low |
| Kernel / runtime limits | Set ulimit -u (max user processes) on the rsync daemon account, and enforce RLIMIT_NPROC via systemd LimitNPROC= |
Low |
| Containerize or sandbox | Run rsync daemon in a Docker container with --pids-limit=100 and memory cgroup limits to isolate thread/memory exhaustion from the host |
Medium |
| Rate-limit connections | Use fail2ban or iptables recent module to limit connections per IP to rsync port |
Low |
| Disable daemon mode | If daemon mode is not required, run rsync only over SSH — this requires SSH authentication, reducing anonymous attack surface | Low |
2. Patch / Upgrade Steps
- Monitor vendor channels (rsync.samba.org, GitHub
WayneD/rsyncreleases) for a 3.5.x or later release that fixes the short-alias bypass. - When available: upgrade to the patched version — ideally
>= 3.5.0.# Example (verify release availability first) wget https://download.samba.org/pub/rsync/rsync-3.5.0.tar.gz tar xzf rsync-3.5.0.tar.gz && cd rsync-3.5.0 ./configure && make && sudo make install - Validate version post-upgrade:
rsync --versionshould report ≥ 3.5.0. - Re-test with connect scenario to confirm the
--ztoption is either rejected or bounded.
3. Long-Term Hardening
- Remove anonymous access: Require
auth usersinrsyncd.confwith strong credentials. - Disable compress-threads entirely in environments not requiring multi-threaded Zstandard compression.
- Implement resource caps for ALL network services (systemd
MemoryMax=,TasksMax=,LimitNPROC=). - Use SSH-tunneled rsync exclusively — SSH provides authentication, integrity, and option-whitelisting semantics.
- Regular audit of
rsyncversion and configuration against CVE databases. - Harden the host kernel: enable
kernel.pid_maxlimits and cgroup v2 resource controls.
References
- NVD Entry — https://nvd.nist.gov/vuln/detail/CVE-2026-70455 (authoritative source for description, CVSS, CWE)
- rsync Project Home — https://rsync.samba.org/ (vendor project; monitor for release notes addressing this CVE)
- rsync GitHub Repository — https://github.com/WayneD/rsync (watch for upstream commit fixing short-alias bypass)
- CWE-770 Reference — https://cwe.mitre.org/data/definitions/770.html (Allocation of Resources Without Limits or Throttling)
- CISA KEV — Not listed (as of this report; no known in-the-wild exploitation has been confirmed, but the attack is trivial to implement once the rsync daemon surface is exposed)
Threat Actor Activity: No known threat actor campaigns or exploit-in-the-wild evidence are associated with CVE-2026-70455 at this time. However, the vulnerability is technically trivial to exploit (single option injection) and likely to be incorporated into botnet-based DDoS tooling targeting exposed rsync daemons once a PoC circulates.
TLP Classification: TLP:CLEAR — Distribution unlimited.
Next Review: 30 days from publication or upon disclosure of a vendor patch.
This report was generated by Valtersit Threat Intelligence for internal enterprise defensive use. All technical claims are derived from the provided CVE intelligence data; where specific implementation details are unavailable, the report describes the vulnerability class without fabrication.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.