CVE-2026-77987: GitHub Enterprise Server: SSRF to RCE in notebook viewer
CRITICALCISA: TRACK*A critical flaw in the GitHub Enterprise Server notebook viewer lets an attacker steer server-side requests to internal services on other ports, then use response timing to extract instance secrets one character at a time and chain them into remote code execution on the appliance. It is unauthenticated when private mode is off and needs only a low-privilege authenticated account when private mode is on, so exposure is broad for any internet- or intranet-reachable instance. Current exploitation signals are modest: EPSS is 0.0068 (around the 49th percentile), it is not in CISA KEV, and there is no public exploit or Nuclei template, although CISA SSVC marks it TRACK_STAR and the CVSS score is 9.8. GHES holds source code, CI secrets and deployment credentials that feed ML training and model-release pipelines, so a compromise has a large downstream blast radius. Upgrade to 3.22.1, 3.21.6, 3.20.8, 3.19.12, 3.18.15 or 3.17.21 (the fixed release for your branch), and review exposure of any instance with private mode disabled.
What is the risk?
Severity is critical (CVSS 9.8): network-reachable, low complexity, no user interaction, and no authentication when private mode is disabled. Near-term exploitation likelihood is low to moderate (EPSS 0.0068, no public PoC, not in KEV), but the timing side-channel plus secret-to-RCE chain is a repeatable technique that skilled attackers can reproduce from the patch diff. The AI/ML angle is indirect: GHES is a code and secrets platform that commonly hosts AI/ML repositories, CI runners and model-release workflows. Confidence: HIGH on technical details (vendor advisory), MEDIUM on exploitation likelihood.
How does the attack unfold?
How severe is it?
What is the attack surface?
What should I do?
1 step1) Upgrade GHES to a fixed release: 3.22.1, 3.21.6, 3.20.8, 3.19.12, 3.18.15 or 3.17.21. 2) Until patched, enable private mode, restrict network access to the instance to trusted ranges/VPN, and where feasible limit access to the notebook rendering feature. 3) Detection: review GHES logs for notebook viewer requests carrying URLs with non-standard ports, internal hostnames or loopback addresses, and for bursts of repetitive requests from one source that suggest timing-oracle probing. 4) Assume exposure if the instance was reachable and unpatched: rotate instance secrets, Actions secrets, deploy keys and tokens, and audit for unexpected admin changes, new SSH keys, or modified workflows. 5) Review audit logs for anomalous processes or outbound connections from the appliance.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-77987?
A critical flaw in the GitHub Enterprise Server notebook viewer lets an attacker steer server-side requests to internal services on other ports, then use response timing to extract instance secrets one character at a time and chain them into remote code execution on the appliance. It is unauthenticated when private mode is off and needs only a low-privilege authenticated account when private mode is on, so exposure is broad for any internet- or intranet-reachable instance. Current exploitation signals are modest: EPSS is 0.0068 (around the 49th percentile), it is not in CISA KEV, and there is no public exploit or Nuclei template, although CISA SSVC marks it TRACK_STAR and the CVSS score is 9.8. GHES holds source code, CI secrets and deployment credentials that feed ML training and model-release pipelines, so a compromise has a large downstream blast radius. Upgrade to 3.22.1, 3.21.6, 3.20.8, 3.19.12, 3.18.15 or 3.17.21 (the fixed release for your branch), and review exposure of any instance with private mode disabled.
Is CVE-2026-77987 actively exploited?
No confirmed active exploitation of CVE-2026-77987 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-77987?
1) Upgrade GHES to a fixed release: 3.22.1, 3.21.6, 3.20.8, 3.19.12, 3.18.15 or 3.17.21. 2) Until patched, enable private mode, restrict network access to the instance to trusted ranges/VPN, and where feasible limit access to the notebook rendering feature. 3) Detection: review GHES logs for notebook viewer requests carrying URLs with non-standard ports, internal hostnames or loopback addresses, and for bursts of repetitive requests from one source that suggest timing-oracle probing. 4) Assume exposure if the instance was reachable and unpatched: rotate instance secrets, Actions secrets, deploy keys and tokens, and audit for unexpected admin changes, new SSH keys, or modified workflows. 5) Review audit logs for anomalous processes or outbound connections from the appliance.
What systems are affected by CVE-2026-77987?
This vulnerability affects the following AI/ML architecture patterns: Source code and CI/CD platforms hosting ML code, Training pipelines, Model release and deployment pipelines, Data science notebook workflows, AI supply chain (internal package and artifact feeds).
What is the CVSS score for CVE-2026-77987?
CVE-2026-77987 has a CVSS v3.1 base score of 9.8 (CRITICAL). The EPSS exploitation probability is 0.88%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0049Exploit Public-Facing ApplicationAML.T0055Unsecured CredentialsAML.T0106Exploitation for Credential AccessCompliance Controls Affected
What are the technical details?
Original Advisory
A server-side request forgery (SSRF) vulnerability was identified in the notebook viewer of GitHub Enterprise Server. The notebook viewer validated the scheme and host of a user-supplied URL but did not validate the port, allowing requests to be directed to internal services listening on other ports of the same appliance. Response bodies were not returned to the requester, but response timing acted as an oracle that allowed instance secrets to be extracted character by character. An extracted secret could then be used in a separate interaction with an internal service to obtain remote code execution on the appliance. Exploitation required network access to the instance and was unauthenticated when private mode was disabled, or required any authenticated user when private mode was enabled. This vulnerability affected GitHub Enterprise Server versions 3.17 through 3.22 and was fixed in versions 3.22.1, 3.21.6, 3.20.8, 3.19.12, 3.18.15, and 3.17.21. This vulnerability was reported through the GitHub Bug Bounty program.
Exploitation Scenario
An attacker reaches a GHES instance with private mode disabled, or signs in with any ordinary account when it is enabled. They submit notebook viewer URLs pointing at internal services on the appliance using non-default ports and measure response times. Because response bodies are not returned, they use timing differences to extract an internal secret character by character. They then present the secret to an internal service to execute code on the appliance. From there they harvest repository contents and CI secrets, including credentials for ML training infrastructure and model registries, and can implant malicious code in AI/ML build or release pipelines.
Weaknesses (CWE)
CWE-208Observable Timing DiscrepancyCWE-208Observable Timing DiscrepancyCWE-918Server-Side Request ForgeryCWE-918Server-Side Request ForgeryCWE-208 — Observable Timing Discrepancy: Two separate operations in a product require different amounts of time to complete, in a way that is observable to an actor and reveals security-relevant information about the state of the product, such as whether a particular operation was successful or not.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HReferences
- docs.github.com/en/enterprise-server@3.17/admin/release-notes
- docs.github.com/en/enterprise-server@3.18/admin/release-notes
- docs.github.com/en/enterprise-server@3.19/admin/release-notes
- docs.github.com/en/enterprise-server@3.20/admin/release-notes
- docs.github.com/en/enterprise-server@3.21/admin/release-notes
- docs.github.com/en/enterprise-server@3.22/admin/release-notes
Timeline
Related Vulnerabilities
CVE-2023-376510.0MLflow: path traversal allows arbitrary file read
Same attack type: Data ExtractionCVE-2025-512010.0smolagents: sandbox escape enables unauthenticated RCE
Same attack type: Code ExecutionCVE-2025-282810.0LangChain RequestsToolkit: SSRF exposes cloud metadata
Same attack type: Data ExtractionCVE-2025-5376710.0Azure OpenAI: SSRF EoP, no auth required (CVSS 10)
Same attack type: Data ExtractionCVE-2025-5952810.0Flowise: Unauthenticated RCE via MCP config injection
Same attack type: Code Execution