Root SSH access via pre-receive symlink escape
Published Nov 10, 2025 · Updated Nov 10, 2025
Privilege escalation in GitHub Enterprise Server 3.14 through 3.18 allows remote authenticated users to gain root SSH access. Pre-receive hook cleanup follows attacker-created symlinks outside the hook environment and replaces system binaries, allowing a cleanup-time payload to install a root SSH key. Exploitation requires Enterprise administrator privileges and a crafted repository environment; successful exploitation gives persistent root-level appliance access.
Summary
What happened
Privilege escalation in GitHub Enterprise Server 3.14 through 3.18 allows remote authenticated users to gain root SSH access. Pre-receive hook cleanup follows attacker-created symlinks outside the hook environment and replaces system binaries, allowing a cleanup-time payload to install a root SSH key. Exploitation requires Enterprise administrator privileges and a crafted repository environment; successful exploitation gives persistent root-level appliance access.
The record
- CVE
- CVE-2025-11578
- Published
- Nov 10, 2025
- Updated
- Nov 10, 2025
- Vendor
- Product
- GitHub Enterprise Server
- Classifications
- CWE-59, T1098.004
- Attack vector
- network
- Privileges
- admin
Timeline
How it unfolded
- Nov 10, 2025CVE publishedPublication date reported by the CVE source.
- Nov 10, 2025Record updatedLatest update available in the CVE record.
Exploitability
Present is not the same as exploitable
Compare your product and version with the public record. A matching version still requires validation against your environment.
Is a vulnerable build present?
Compare these published version ranges with your installed build and any vendor patches.
- Affected versionversion=3.14 <=3.14.18 changes=[{"at":"3.14.19","status":"unaffected"}]
- Affected versionversion=3.15 <=3.15.13 changes=[{"at":"3.15.14","status":"unaffected"}]
- Affected versionversion=3.16 <=3.16.9 changes=[{"at":"3.16.10","status":"unaffected"}]
- Affected versionversion=3.17 <=3.17.6 changes=[{"at":"3.17.7","status":"unaffected"}]
- Affected versionversion=3.18 <=3.18.0 changes=[{"at":"3.18.1","status":"unaffected"}]
What conditions does exploitation require?
What is affected?
Attacks
What attackers are doing with it
Daily unique IPs observed by Shadowserver honeypots for known exploited vulnerabilities (KEVs). Missing observations do not establish an absence of attacks.
Weakness, pattern, technique
Public exploit references
No public exploit references are available in this record.
Labels summarize the accepted research assessment. They do not indicate a test against your environment.
Technologies
Your stack
See the directory against your own environment.
Your stack
Check the software in your environment
Book a demo to see how Hinoki identifies affected software and validates exploitability in your environment.
Book a demo