From e93b1054957cad1a5457768febb5ba92f30b07a7 Mon Sep 17 00:00:00 2001 From: "release-controller[bot]" <110195724+release-controller[bot]@users.noreply.github.com> Date: Tue, 1 Sep 2026 21:47:06 +0000 Subject: [PATCH] Patch release notes for GitHub Enterprise Server (#62841) Co-authored-by: Release-Controller Co-authored-by: Sophie <29382425+sophietheking@users.noreply.github.com> Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com> Co-authored-by: Pallavi <96553709+pallsama@users.noreply.github.com> Co-authored-by: jokego <100397366+jokego@users.noreply.github.com> Copilot-Session: d4cbe994-16cd-405c-8ec2-819d50ff6b45 --- .../enterprise-server/3-17/20.yml | 78 +++++++++++++++ .../enterprise-server/3-18/14.yml | 90 +++++++++++++++++ .../enterprise-server/3-19/11.yml | 86 ++++++++++++++++ .../enterprise-server/3-20/7.yml | 90 +++++++++++++++++ .../enterprise-server/3-21/5.yml | 98 +++++++++++++++++++ 5 files changed, 442 insertions(+) create mode 100644 data/release-notes/enterprise-server/3-17/20.yml create mode 100644 data/release-notes/enterprise-server/3-18/14.yml create mode 100644 data/release-notes/enterprise-server/3-19/11.yml create mode 100644 data/release-notes/enterprise-server/3-20/7.yml create mode 100644 data/release-notes/enterprise-server/3-21/5.yml diff --git a/data/release-notes/enterprise-server/3-17/20.yml b/data/release-notes/enterprise-server/3-17/20.yml new file mode 100644 index 000000000000..286b097b3436 --- /dev/null +++ b/data/release-notes/enterprise-server/3-17/20.yml @@ -0,0 +1,78 @@ +date: '2026-08-25' +sections: + security_fixes: + - | + **HIGH:** An attacker could execute arbitrary code on the instance by exploiting a race condition that replaced a validated upload with attacker-controlled content before processing. Exploitation required an authenticated user with write access to a repository. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com/) and was assigned [CVE-2026-19118](https://www.cve.org/cverecord?id=CVE-2026-19118). + - | + **HIGH:** An unauthenticated attacker could cause a GitHub Enterprise Server instance to send crafted outbound requests to an attacker-controlled host via an unauthenticated Manage API endpoint that parsed an attacker-supplied cluster configuration. An attacker positioned to intercept the outbound request could capture a replayable management bearer token. High-availability deployments were not affected. GitHub has requested [CVE-2026-18730](https://www.cve.org/cverecord?id=CVE-2026-18730) for this vulnerability, which was reported via the [GitHub Bug Bounty program](https://bounty.github.com/). + - | + **HIGH:** An attacker could execute arbitrary code on a GitHub Enterprise Server instance by using a configured pre-receive hook to redirect trusted internal requests to a privileged internal service. Exploitation required pre-receive hook networking to be enabled and the ability to configure or modify a pre-receive hook. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com/) and was assigned [CVE-2026-76851](https://www.cve.org/cverecord?id=CVE-2026-76851). + - | + **LOW**: An attacker using a mail service that forwards nonstandard SMTP sequences unchanged could exploit the upstream Postfix SMTP smuggling vulnerability [CVE-2023-51764](https://www.cve.org/CVERecord?id=CVE-2023-51764) to potentially bypass email security controls and spoof sender addresses on messages delivered locally by a GitHub Enterprise Server instance. GitHub has updated the Postfix configuration to enable the applicable mitigation. + bugs: + - | + Backups using rsync could fail with signature verification. + - | + The Management Console would not allow setting a SMTP password with special characters although those should be permitted and valid. + - | + On repositories with many packfiles, concurrent Git operations could consume excessive system CPU and complete more slowly. Pack metadata checks were optimized to reduce CPU contention and improve Git operation performance. + - | + Cached license information was not cleared until the instance was restarted. + - | + Users who edited, created, or deleted files in the web UI saw a generic rule violation message when a pre-receive hook blocked the commit, even when no rule was violated. + - | + The `ghe-spokes cache-replica sync` command exited immediately with an error on all instances, regardless of whether a cache replica was configured or not. + - | + Some API and web requests on instances with large organizations could respond slowly or time out intermittently. Loading configuration settings for many repositories in a single request—such as listing an organization teams repositories or viewing a pull request or issue—allocated an excessive number of objects and triggered heavy garbage collection. Configuration loading in these requests is now more memory-efficient, reducing latency and timeouts on affected endpoints. + - | + Secret scanning operations that look up blob origins returned spurious timeout errors (HTTP 408), even when the underlying work would have completed quickly. This caused a significant drop in success rate for affected requests. + - | + During background repository maintenance, a failed Git repack operation was incorrectly reported as successful. This could also result in Git objects being pruned without a backup, potentially causing data loss if those objects were still referenced by active operations. + changes: + - | + Administrators can run three new command-line utilities over administrative SSH to perform common SAML troubleshooting operations that GitHub Enterprise Support would otherwise guide them through manually: `ghe-saml-mapping-find` looks up a users SAML mapping, `ghe-saml-debug` toggles global SAML debug logging, and `ghe-saml-mapping-destroy` deletes SAML mappings matching a NameID. + known_issues: + - | + During an upgrade of GitHub Enterprise Server, custom firewall rules are removed. If you use custom firewall rules, you must reapply them after upgrading. + - | + During the validation phase of a configuration run, a `No such object` error may occur for the Notebook and Viewscreen services. This error can be ignored as the services should still correctly start. + - | + If the root site administrator is locked out of the Management Console after failed login attempts, the account does not unlock automatically after the defined lockout time. Someone with administrative SSH access to the instance must unlock the account using the administrative shell. For more information, see [Troubleshooting access to the Management Console](/admin/administering-your-instance/administering-your-instance-from-the-web-ui/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + When following the steps for [Replacing the primary MySQL node](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-the-primary-mysql-node), step 14 (running `ghe-cluster-config-apply`) might fail with errors. If this occurs, re-running `ghe-cluster-config-apply` is expected to succeed. + - | + Running a config apply as part of the steps for [Replacing a node in an emergency](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-a-node-in-an-emergency) may fail with errors if the node being replaced is still reachable. If this occurs, shutdown the node and repeat the steps. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring data originally backed up from a 3.13 or greater appliance version, the Elasticsearch indices need to be reindexed before some of the data will show up. This happens via a nightly scheduled job. It can also be forced by running `/usr/local/share/enterprise/ghe-es-search-repair`. + - | + An organization-level code scanning configuration page is displayed on instances that do not use GitHub Advanced Security or code scanning. + - | + When enabling automatic update checks for the first time in the Management Console, the status is not dynamically reflected until the "Updates" page is reloaded. + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + When initializing a new GHES cluster, nodes with the `consul-server` role should be added to the cluster before adding additional nodes. Adding all nodes simultaneously creates a race condition between nomad server registration and nomad client registration. + - | + In a cluster, the host running restore requires access the storage nodes via their private IPs. + - | + On an instance hosted on Azure, commenting on an issue via email meant the comment was not added to the issue. + - | + After a restore, existing outside collaborators cannot be added to repositories in a new organization. This issue can be resolved by running `/usr/local/share/enterprise/ghe-es-search-repair` on the appliance. + - | + After a geo-replica is promoted to be a primary by running `ghe-repl-promote`, the actions workflow of a repository does not have any suggested workflows. + - | + Unexpected elements may appear in the UI on the repository overview page for locked repositories. + - | + When publishing npm packages in a workflow after restoring from a backup to GitHub Enterprise Server 3.13.5.gm4 or 3.14.2.gm3, you may encounter a `401 Unauthorized` error from the GitHub Packages service. This can happen if the restore is from an N-1 or N-2 version and the workflow targets the npm endpoint on the backup instance. To avoid this issue, ensure the access token is valid and includes the correct scopes for publishing to GitHub Packages. + - | + Enterprise owners who apply a security configuration, such as Secret Scanning or Code Scanning, to all repositories in an enterprise may experience increased system load and degraded performance because GitHub Enterprise Server simultaneously queues enablement jobs for every organization. To reduce the impact, apply security configurations at the organization level and enable them incrementally while monitoring system performance. + - | + Git versions are mismatched between containers on the instance. diff --git a/data/release-notes/enterprise-server/3-18/14.yml b/data/release-notes/enterprise-server/3-18/14.yml new file mode 100644 index 000000000000..a69a6e4dc03c --- /dev/null +++ b/data/release-notes/enterprise-server/3-18/14.yml @@ -0,0 +1,90 @@ +date: '2026-08-25' +sections: + security_fixes: + - | + **HIGH:** An attacker could execute arbitrary code on the instance by exploiting a race condition that replaced a validated upload with attacker-controlled content before processing. Exploitation required an authenticated user with write access to a repository. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com/) and was assigned [CVE-2026-19118](https://www.cve.org/cverecord?id=CVE-2026-19118). + - | + **HIGH:** An unauthenticated attacker could cause a GitHub Enterprise Server instance to send crafted outbound requests to an attacker-controlled host via an unauthenticated Manage API endpoint that parsed an attacker-supplied cluster configuration. An attacker positioned to intercept the outbound request could capture a replayable management bearer token. High-availability deployments were not affected. GitHub has requested [CVE-2026-18730](https://www.cve.org/cverecord?id=CVE-2026-18730) for this vulnerability, which was reported via the [GitHub Bug Bounty program](https://bounty.github.com/). + - | + **HIGH:** An attacker could execute arbitrary code on a GitHub Enterprise Server instance by using a configured pre-receive hook to redirect trusted internal requests to a privileged internal service. Exploitation required pre-receive hook networking to be enabled and the ability to configure or modify a pre-receive hook. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com/) and was assigned [CVE-2026-76851](https://www.cve.org/cverecord?id=CVE-2026-76851). + - | + **LOW**: An attacker using a mail service that forwards nonstandard SMTP sequences unchanged could exploit the upstream Postfix SMTP smuggling vulnerability [CVE-2023-51764](https://www.cve.org/CVERecord?id=CVE-2023-51764) to potentially bypass email security controls and spoof sender addresses on messages delivered locally by a GitHub Enterprise Server instance. GitHub has updated the Postfix configuration to enable the applicable mitigation. + bugs: + - | + Dependabot processes multi-ecosystem groups configured in `dependabot.yml`. This was previously gated by a legacy feature flag which did not always apply. + - | + Backups using rsync could fail with signature verification. + - | + The Management Console would not allow setting a SMTP password with special characters although those should be permitted and valid. + - | + On repositories with many packfiles, concurrent Git operations could consume excessive system CPU and complete more slowly. Pack metadata checks were optimized to reduce CPU contention and improve Git operation performance. + - | + Cached license information was not cleared until the instance was restarted. + - | + An enterprises license usage page did not load at all if there was a timeout affecting the GitHub Advanced Security section. + - | + Users who edited, created, or deleted files in the web UI saw a generic rule violation message when a pre-receive hook blocked the commit, even when no rule was violated. + - | + The `ghe-spokes cache-replica sync` command exited immediately with an error on all instances, regardless of whether a cache replica was configured or not. + - | + Some API and web requests on instances with large organizations could respond slowly or time out intermittently. Loading configuration settings for many repositories in a single request—such as listing an organization teams repositories or viewing a pull request or issue—allocated an excessive number of objects and triggered heavy garbage collection. Configuration loading in these requests is now more memory-efficient, reducing latency and timeouts on affected endpoints. + - | + Site administrators received an HTTP 500 error when applying a new Elasticsearch Cross Cluster Replication (CCR) compatible license file to the instance. + - | + Secret scanning operations that look up blob origins returned spurious timeout errors (HTTP 408), even when the underlying work would have completed quickly. This caused a significant drop in success rate for affected requests. + - | + During background repository maintenance, a failed Git repack operation was incorrectly reported as successful. This could also result in Git objects being pruned without a backup, potentially causing data loss if those objects were still referenced by active operations. + - | + On instances running GitHub Enterprise Server 3.18 or later, Git-related services generated excessive syslog output, increasing log volume by up to several orders of magnitude compared to previous versions. In some cases, this caused log storage and monitoring issues for administrators. + changes: + - | + Administrators can run three new command-line utilities over administrative SSH to perform common SAML troubleshooting operations that GitHub Enterprise Support would otherwise guide them through manually: `ghe-saml-mapping-find` looks up a users SAML mapping, `ghe-saml-debug` toggles global SAML debug logging, and `ghe-saml-mapping-destroy` deletes SAML mappings matching a NameID. + - | + Administrators can configure multiple WireGuard tunnels for high-availability deployments by setting `wireguard.num-tunnels`. Multiple tunnels distribute inter-node traffic across network queues and CPU cores, improving performance during high-volume traffic. The default configuration remains unchanged. See [Mitigating single-core softirq saturation](/admin/monitoring-and-managing-your-instance/additional-nodes/configuring-additional-nodes#mitigating-single-core-softirq-saturation). + known_issues: + - | + During an upgrade of GitHub Enterprise Server, custom firewall rules are removed. If you use custom firewall rules, you must reapply them after upgrading. + - | + During the validation phase of a configuration run, a `No such object` error may occur for the Notebook and Viewscreen services. This error can be ignored as the services should still correctly start. + - | + If the root site administrator is locked out of the Management Console after failed login attempts, the account does not unlock automatically after the defined lockout time. Someone with administrative SSH access to the instance must unlock the account using the administrative shell. For more information, see [Troubleshooting access to the Management Console](/admin/administering-your-instance/administering-your-instance-from-the-web-ui/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + When following the steps for [Replacing the primary MySQL node](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-the-primary-mysql-node), step 14 (running `ghe-cluster-config-apply`) might fail with errors. If this occurs, re-running `ghe-cluster-config-apply` is expected to succeed. + - | + Running a config apply as part of the steps for [Replacing a node in an emergency](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-a-node-in-an-emergency) may fail with errors if the node being replaced is still reachable. If this occurs, shutdown the node and repeat the steps. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring data originally backed up from a 3.13 or greater appliance version, the Elasticsearch indices need to be reindexed before some of the data will show up. This happens via a nightly scheduled job. It can also be forced by running `/usr/local/share/enterprise/ghe-es-search-repair`. + - | + An organization-level code scanning configuration page is displayed on instances that do not use GitHub Advanced Security or code scanning. + - | + When enabling automatic update checks for the first time in the Management Console, the status is not dynamically reflected until the "Updates" page is reloaded. + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + When initializing a new GHES cluster, nodes with the `consul-server` role should be added to the cluster before adding additional nodes. Adding all nodes simultaneously creates a race condition between nomad server registration and nomad client registration. + - | + In a cluster, the host running restore requires access the storage nodes via their private IPs. + - | + On an instance hosted on Azure, commenting on an issue via email meant the comment was not added to the issue. + - | + After a restore, existing outside collaborators cannot be added to repositories in a new organization. This issue can be resolved by running `/usr/local/share/enterprise/ghe-es-search-repair` on the appliance. + - | + After a geo-replica is promoted to be a primary by running `ghe-repl-promote`, the actions workflow of a repository does not have any suggested workflows. + - | + Unexpected elements may appear in the UI on the repository overview page for locked repositories. + - | + When publishing npm packages in a workflow after restoring from a backup to GitHub Enterprise Server 3.13.5.gm4 or 3.14.2.gm3, you may encounter a `401 Unauthorized` error from the GitHub Packages service. This can happen if the restore is from an N-1 or N-2 version and the workflow targets the npm endpoint on the backup instance. To avoid this issue, ensure the access token is valid and includes the correct scopes for publishing to GitHub Packages. + - | + The setting to define private registries at the organization level for code scanning is only available if Dependabot is also enabled for the instance. + - | + Custom NTP settings are removed during the upgrade process. + - | + Enterprise owners who apply a security configuration, such as Secret Scanning or Code Scanning, to all repositories in an enterprise may experience increased system load and degraded performance because GitHub Enterprise Server simultaneously queues enablement jobs for every organization. To reduce the impact, apply security configurations at the organization level and enable them incrementally while monitoring system performance. diff --git a/data/release-notes/enterprise-server/3-19/11.yml b/data/release-notes/enterprise-server/3-19/11.yml new file mode 100644 index 000000000000..87f53e0cadde --- /dev/null +++ b/data/release-notes/enterprise-server/3-19/11.yml @@ -0,0 +1,86 @@ +date: '2026-08-25' +sections: + security_fixes: + - | + **HIGH:** An attacker could execute arbitrary code on the instance by exploiting a race condition that replaced a validated upload with attacker-controlled content before processing. Exploitation required an authenticated user with write access to a repository. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com/) and was assigned [CVE-2026-19118](https://www.cve.org/cverecord?id=CVE-2026-19118). + - | + **HIGH:** An unauthenticated attacker could cause a GitHub Enterprise Server instance to send crafted outbound requests to an attacker-controlled host via an unauthenticated Manage API endpoint that parsed an attacker-supplied cluster configuration. An attacker positioned to intercept the outbound request could capture a replayable management bearer token. High-availability deployments were not affected. GitHub has requested [CVE-2026-18730](https://www.cve.org/cverecord?id=CVE-2026-18730) for this vulnerability, which was reported via the [GitHub Bug Bounty program](https://bounty.github.com/). + - | + **HIGH:** An attacker could execute arbitrary code on a GitHub Enterprise Server instance by using a configured pre-receive hook to redirect trusted internal requests to a privileged internal service. Exploitation required pre-receive hook networking to be enabled and the ability to configure or modify a pre-receive hook. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com/) and was assigned [CVE-2026-76851](https://www.cve.org/cverecord?id=CVE-2026-76851). + - | + **LOW**: An attacker using a mail service that forwards nonstandard SMTP sequences unchanged could exploit the upstream Postfix SMTP smuggling vulnerability [CVE-2023-51764](https://www.cve.org/CVERecord?id=CVE-2023-51764) to potentially bypass email security controls and spoof sender addresses on messages delivered locally by a GitHub Enterprise Server instance. GitHub has updated the Postfix configuration to enable the applicable mitigation. + bugs: + - | + Dependabot processes multi-ecosystem groups configured in `dependabot.yml`. This was previously gated by a legacy feature flag which did not always apply. + - | + During `ghe-config-apply`, a process that was intended to check that all pending jobs had passed health checks was silently skipped. + - | + Backups using rsync could fail with signature verification. + - | + When an administrator ran `ghe-repl-promote` on a replica node, the original primary node was not set to maintenance mode. + - | + The Management Console would not allow setting a SMTP password with special characters although those should be permitted and valid. + - | + On repositories with many packfiles, concurrent Git operations could consume excessive system CPU and complete more slowly. Pack metadata checks were optimized to reduce CPU contention and improve Git operation performance. + - | + An enterprises license usage page did not load at all if there was a timeout affecting the GitHub Advanced Security section. + - | + Users who edited, created, or deleted files in the web UI saw a generic rule violation message when a pre-receive hook blocked the commit, even when no rule was violated. + - | + The `ghe-spokes cache-replica sync` command exited immediately with an error on all instances, regardless of whether a cache replica was configured or not. + - | + Some API and web requests on instances with large organizations could respond slowly or time out intermittently. Loading configuration settings for many repositories in a single request—such as listing an organization teams repositories or viewing a pull request or issue—allocated an excessive number of objects and triggered heavy garbage collection. Configuration loading in these requests is now more memory-efficient, reducing latency and timeouts on affected endpoints. + - | + Secret scanning operations that look up blob origins returned spurious timeout errors (HTTP 408), even when the underlying work would have completed quickly. This caused a significant drop in success rate for affected requests. + - | + During background repository maintenance, a failed Git repack operation was incorrectly reported as successful. This could also result in Git objects being pruned without a backup, potentially causing data loss if those objects were still referenced by active operations. + - | + On instances running GitHub Enterprise Server 3.18 or later, Git-related services generated excessive syslog output, increasing log volume by up to several orders of magnitude compared to previous versions. In some cases, this caused log storage and monitoring issues for administrators. + - | + On an instance with secret scanning enabled, secret scanning services repeatedly attempted to connect to an unavailable internal data source, which increased resource usage and generated excessive log entries on the instance. + changes: + - | + Administrators can run three new command-line utilities over administrative SSH to perform common SAML troubleshooting operations that GitHub Enterprise Support would otherwise guide them through manually: `ghe-saml-mapping-find` looks up a users SAML mapping, `ghe-saml-debug` toggles global SAML debug logging, and `ghe-saml-mapping-destroy` deletes SAML mappings matching a NameID. + - | + Administrators can configure multiple WireGuard tunnels for high-availability deployments by setting `wireguard.num-tunnels`. Multiple tunnels distribute inter-node traffic across network queues and CPU cores, improving performance during high-volume traffic. The default configuration remains unchanged. See [Mitigating single-core softirq saturation](/admin/monitoring-and-managing-your-instance/additional-nodes/configuring-additional-nodes#mitigating-single-core-softirq-saturation). + known_issues: + - | + During an upgrade of GitHub Enterprise Server, custom firewall rules are removed. If you use custom firewall rules, you must reapply them after upgrading. + - | + During the validation phase of a configuration run, a `No such object` error may occur for the Notebook and Viewscreen services. This error can be ignored as the services should still correctly start. + - | + If the root site administrator is locked out of the Management Console after failed login attempts, the account does not unlock automatically after the defined lockout time. Someone with administrative SSH access to the instance must unlock the account using the administrative shell. For more information, see [Troubleshooting access to the Management Console](/admin/administering-your-instance/administering-your-instance-from-the-web-ui/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + When following the steps for [Replacing the primary MySQL node](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-the-primary-mysql-node), step 14 (running `ghe-cluster-config-apply`) might fail with errors. If this occurs, re-running `ghe-cluster-config-apply` is expected to succeed. + - | + Running a config apply as part of the steps for [Replacing a node in an emergency](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-a-node-in-an-emergency) may fail with errors if the node being replaced is still reachable. If this occurs, shutdown the node and repeat the steps. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring data originally backed up from a 3.13 or greater appliance version, the Elasticsearch indices need to be reindexed before some of the data will show up. This happens via a nightly scheduled job. It can also be forced by running `/usr/local/share/enterprise/ghe-es-search-repair`. + - | + When enabling automatic update checks for the first time in the Management Console, the status is not dynamically reflected until the "Updates" page is reloaded. + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + When initializing a new GHES cluster, nodes with the `consul-server` role should be added to the cluster before adding additional nodes. Adding all nodes simultaneously creates a race condition between nomad server registration and nomad client registration. + - | + In a cluster, the host running restore requires access the storage nodes via their private IPs. + - | + On an instance hosted on Azure, commenting on an issue via email meant the comment was not added to the issue. + - | + After a restore, existing outside collaborators cannot be added to repositories in a new organization. This issue can be resolved by running `/usr/local/share/enterprise/ghe-es-search-repair` on the appliance. + - | + After a geo-replica is promoted to be a primary by running `ghe-repl-promote`, the actions workflow of a repository does not have any suggested workflows. + - | + When publishing npm packages in a workflow after restoring from a backup to GitHub Enterprise Server 3.13.5.gm4 or 3.14.2.gm3, you may encounter a `401 Unauthorized` error from the GitHub Packages service. This can happen if the restore is from an N-1 or N-2 version and the workflow targets the npm endpoint on the backup instance. To avoid this issue, ensure the access token is valid and includes the correct scopes for publishing to GitHub Packages. + - | + The setting to define private registries at the organization level for code scanning is only available if Dependabot is also enabled for the instance. + - | + An issue in the Management Console means the Backups (Preview) and Updates tabs may fail to open and instead return an Internal Server Error. We recommend using the command line interface (CLI) for backups and updates. + - | + Enterprise owners who apply a security configuration, such as Secret Scanning or Code Scanning, to all repositories in an enterprise may experience increased system load and degraded performance because GitHub Enterprise Server simultaneously queues enablement jobs for every organization. To reduce the impact, apply security configurations at the organization level and enable them incrementally while monitoring system performance. diff --git a/data/release-notes/enterprise-server/3-20/7.yml b/data/release-notes/enterprise-server/3-20/7.yml new file mode 100644 index 000000000000..83ab8f5d337c --- /dev/null +++ b/data/release-notes/enterprise-server/3-20/7.yml @@ -0,0 +1,90 @@ +date: '2026-08-25' +sections: + security_fixes: + - | + **HIGH:** An attacker could execute arbitrary code on the instance by exploiting a race condition that replaced a validated upload with attacker-controlled content before processing. Exploitation required an authenticated user with write access to a repository. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com/) and was assigned [CVE-2026-19118](https://www.cve.org/cverecord?id=CVE-2026-19118). + - | + **HIGH:** An unauthenticated attacker could cause a GitHub Enterprise Server instance to send crafted outbound requests to an attacker-controlled host via an unauthenticated Manage API endpoint that parsed an attacker-supplied cluster configuration. An attacker positioned to intercept the outbound request could capture a replayable management bearer token. High-availability deployments were not affected. GitHub has requested [CVE-2026-18730](https://www.cve.org/cverecord?id=CVE-2026-18730) for this vulnerability, which was reported via the [GitHub Bug Bounty program](https://bounty.github.com/). + - | + **HIGH:** An attacker could execute arbitrary code on a GitHub Enterprise Server instance by using a configured pre-receive hook to redirect trusted internal requests to a privileged internal service. Exploitation required pre-receive hook networking to be enabled and the ability to configure or modify a pre-receive hook. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com/) and was assigned [CVE-2026-76851](https://www.cve.org/cverecord?id=CVE-2026-76851). + - | + **LOW**: An attacker using a mail service that forwards nonstandard SMTP sequences unchanged could exploit the upstream Postfix SMTP smuggling vulnerability [CVE-2023-51764](https://www.cve.org/CVERecord?id=CVE-2023-51764) to potentially bypass email security controls and spoof sender addresses on messages delivered locally by a GitHub Enterprise Server instance. GitHub has updated the Postfix configuration to enable the applicable mitigation. + bugs: + - | + Dependabot processes multi-ecosystem groups configured in `dependabot.yml`. This was previously gated by a legacy feature flag which did not always apply. + - | + During `ghe-config-apply`, a process that was intended to check that all pending jobs had passed health checks was silently skipped. + - | + Backups using rsync could fail with signature verification. + - | + When a high-availability instance with the backup-service enabled was upgraded to a version greater than 3.20, the backup-service stopped working because of the addition of the `backup-server` cluster role. This role is now correctly backfilled when it is not already present to nodes with `/data/backup` mounted. Additionally, when a GHES instance using the backup-service with scheduled backups was upgraded, the schedule would not resume until an additional config-apply was performed. The schedule is now correctly preserved. + - | + When an administrator ran `ghe-repl-promote` on a replica node, the original primary node was not set to maintenance mode. + - | + The Management Console would not allow setting a SMTP password with special characters although those should be permitted and valid. + - | + On repositories with many packfiles, concurrent Git operations could consume excessive system CPU and complete more slowly. Pack metadata checks were optimized to reduce CPU contention and improve Git operation performance. + - | + On instances where an administrator had customized the lifetime policy for {% data variables.product.pat_v1 %}, users could not create a {% data variables.product.pat_v1 %} with a lifetime equal to the custom limit. + - | + An enterprises license usage page did not load at all if there was a timeout affecting the GitHub Advanced Security section. + - | + Users who edited, created, or deleted files in the web UI saw a generic rule violation message when a pre-receive hook blocked the commit, even when no rule was violated. + - | + The `ghe-spokes cache-replica sync` command exited immediately with an error on all instances, regardless of whether a cache replica was configured or not. + - | + Some API and web requests on instances with large organizations could respond slowly or time out intermittently. Loading configuration settings for many repositories in a single request—such as listing an organization teams repositories or viewing a pull request or issue—allocated an excessive number of objects and triggered heavy garbage collection. Configuration loading in these requests is now more memory-efficient, reducing latency and timeouts on affected endpoints. + - | + Secret scanning operations that look up blob origins returned spurious timeout errors (HTTP 408), even when the underlying work would have completed quickly. This caused a significant drop in success rate for affected requests. + - | + During background repository maintenance, a failed Git repack operation was incorrectly reported as successful. This could also result in Git objects being pruned without a backup, potentially causing data loss if those objects were still referenced by active operations. + - | + On instances running GitHub Enterprise Server 3.18 or later, Git-related services generated excessive syslog output, increasing log volume by up to several orders of magnitude compared to previous versions. In some cases, this caused log storage and monitoring issues for administrators. + - | + Secret scanning services did not start on instances whose processors did not provide the AVX2 instruction set, which can happen when a hypervisor hides processor features from its virtual machines. On these instances, secret scanning alerts were unavailable to all users. + - | + On an instance with secret scanning enabled, secret scanning services repeatedly attempted to connect to an unavailable internal data source, which increased resource usage and generated excessive log entries on the instance. + changes: + - | + Administrators can run three new command-line utilities over administrative SSH to perform common SAML troubleshooting operations that GitHub Enterprise Support would otherwise guide them through manually: `ghe-saml-mapping-find` looks up a users SAML mapping, `ghe-saml-debug` toggles global SAML debug logging, and `ghe-saml-mapping-destroy` deletes SAML mappings matching a NameID. + - | + Administrators can run retention for the `check_steps` and `statuses` database tables via Percona `pt-archiver` instead of the built-in application jobs. Disabled by default; enable per table with `checks.retention.steps.via-pt-archiver` and `checks.retention.statuses.via-pt-archiver`. When enabled, the corresponding application-side job is automatically disabled to avoid overlapping deletions. + - | + Administrators can configure multiple WireGuard tunnels for high-availability deployments by setting `wireguard.num-tunnels`. Multiple tunnels distribute inter-node traffic across network queues and CPU cores, improving performance during high-volume traffic. The default configuration remains unchanged. See [Mitigating single-core softirq saturation](/admin/monitoring-and-managing-your-instance/additional-nodes/configuring-additional-nodes#mitigating-single-core-softirq-saturation). + known_issues: + - | + Site administrators can ensure that secret scanning uses processor features available on their GHES instance because secret scanning compiles its pattern-matching databases on the instance instead of using prebuilt databases. The first scan of each type after an upgrade or restart can take a few seconds longer while the databases are prepared. + - | + During an upgrade of GitHub Enterprise Server, custom firewall rules are removed. If you use custom firewall rules, you must reapply them after upgrading. + - | + During the validation phase of a configuration run, a `No such object` error may occur for the Notebook and Viewscreen services. This error can be ignored as the services should still correctly start. + - | + If the root site administrator is locked out of the Management Console after failed login attempts, the account does not unlock automatically after the defined lockout time. Someone with administrative SSH access to the instance must unlock the account using the administrative shell. For more information, see [Troubleshooting access to the Management Console](/admin/administering-your-instance/administering-your-instance-from-the-web-ui/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + When following the steps for [Replacing the primary MySQL node](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-the-primary-mysql-node), step 14 (running `ghe-cluster-config-apply`) might fail with errors. If this occurs, re-running `ghe-cluster-config-apply` is expected to succeed. + - | + Running a config apply as part of the steps for [Replacing a node in an emergency](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-a-node-in-an-emergency) may fail with errors if the node being replaced is still reachable. If this occurs, shutdown the node and repeat the steps. + - | + When restoring data originally backed up from a 3.13 or greater appliance version, the Elasticsearch indices need to be reindexed before some of the data will show up. This happens via a nightly scheduled job. It can also be forced by running `/usr/local/share/enterprise/ghe-es-search-repair`. + - | + When initializing a new GHES cluster, nodes with the `consul-server` role should be added to the cluster before adding additional nodes. Adding all nodes simultaneously creates a race condition between nomad server registration and nomad client registration. + - | + In a cluster, the host running restore requires access the storage nodes via their private IPs. + - | + On an instance hosted on Azure, commenting on an issue via email meant the comment was not added to the issue. + - | + After a restore, existing outside collaborators cannot be added to repositories in a new organization. This issue can be resolved by running `/usr/local/share/enterprise/ghe-es-search-repair` on the appliance. + - | + After a geo-replica is promoted to be a primary by running `ghe-repl-promote`, the actions workflow of a repository does not have any suggested workflows. + - | + When publishing npm packages in a workflow after restoring from a backup to GitHub Enterprise Server 3.13.5.gm4 or 3.14.2.gm3, you may encounter a `401 Unauthorized` error from the GitHub Packages service. This can happen if the restore is from an N-1 or N-2 version and the workflow targets the npm endpoint on the backup instance. To avoid this issue, ensure the access token is valid and includes the correct scopes for publishing to GitHub Packages. + - | + Enterprise owners who apply a security configuration, such as Secret Scanning or Code Scanning, to all repositories in an enterprise may experience increased system load and degraded performance because GitHub Enterprise Server simultaneously queues enablement jobs for every organization. To reduce the impact, apply security configurations at the organization level and enable them incrementally while monitoring system performance. + - | + On instances with multiple Git storage nodes in a voting configuration, including cluster and geo-replication high availability topologies, upgrading may fail to correctly install Actions that ship with the new version. In some cases, previous versions of these Actions remain on the instance. To resolve this issue, run the following commands on the primary node: `ghe-config --unset 'app.actions.actions-repos-sha1sum'`, `ghe-config-apply`, and `/usr/local/share/enterprise/ghe-run-init-actions-graph`. + - | + When restoring an instance with `ghe-restore` while the replication controller is enabled, the storage directory is not restored. diff --git a/data/release-notes/enterprise-server/3-21/5.yml b/data/release-notes/enterprise-server/3-21/5.yml new file mode 100644 index 000000000000..d3acec140ae6 --- /dev/null +++ b/data/release-notes/enterprise-server/3-21/5.yml @@ -0,0 +1,98 @@ +date: '2026-08-25' +sections: + security_fixes: + - | + **HIGH:** An attacker could execute arbitrary code on the instance by exploiting a race condition that replaced a validated upload with attacker-controlled content before processing. Exploitation required an authenticated user with write access to a repository. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com/) and was assigned [CVE-2026-19118](https://www.cve.org/cverecord?id=CVE-2026-19118). + - | + **HIGH:** An unauthenticated attacker could cause a GitHub Enterprise Server instance to send crafted outbound requests to an attacker-controlled host via an unauthenticated Manage API endpoint that parsed an attacker-supplied cluster configuration. An attacker positioned to intercept the outbound request could capture a replayable management bearer token. High-availability deployments were not affected. GitHub has requested [CVE-2026-18730](https://www.cve.org/cverecord?id=CVE-2026-18730) for this vulnerability, which was reported via the [GitHub Bug Bounty program](https://bounty.github.com/). + - | + **HIGH:** An attacker could execute arbitrary code on a GitHub Enterprise Server instance by using a configured pre-receive hook to redirect trusted internal requests to a privileged internal service. Exploitation required pre-receive hook networking to be enabled and the ability to configure or modify a pre-receive hook. This vulnerability was reported via the [GitHub Bug Bounty program](https://bounty.github.com/) and was assigned [CVE-2026-76851](https://www.cve.org/cverecord?id=CVE-2026-76851). + - | + **LOW**: An attacker using a mail service that forwards nonstandard SMTP sequences unchanged could exploit the upstream Postfix SMTP smuggling vulnerability [CVE-2023-51764](https://www.cve.org/CVERecord?id=CVE-2023-51764) to potentially bypass email security controls and spoof sender addresses on messages delivered locally by a GitHub Enterprise Server instance. GitHub has updated the Postfix configuration to enable the applicable mitigation. + bugs: + - | + Dependabot processes multi-ecosystem groups configured in `dependabot.yml`. This was previously gated by a legacy feature flag which did not always apply. + - | + During `ghe-config-apply`, a process that was intended to check that all pending jobs had passed health checks was silently skipped. + - | + When a high-availability instance with the backup-service enabled was upgraded to a version greater than 3.20, the backup-service stopped working because of the addition of the `backup-server` cluster role. This role is now correctly backfilled when it is not already present to nodes with `/data/backup` mounted. Additionally, when a GHES instance using the backup-service with scheduled backups was upgraded, the schedule would not resume until an additional config-apply was performed. The schedule is now correctly preserved. + - | + Backups using rsync could fail with signature verification. + - | + When an administrator ran `ghe-repl-promote` on a replica node, the original primary node was not set to maintenance mode. + - | + The Management Console would not allow setting a SMTP password with special characters although those should be permitted and valid. + - | + On repositories with many packfiles, concurrent Git operations could consume excessive system CPU and complete more slowly. Pack metadata checks were optimized to reduce CPU contention and improve Git operation performance. + - | + On instances where an administrator had customized the lifetime policy for {% data variables.product.pat_v1 %}, users could not create a {% data variables.product.pat_v1 %} with a lifetime equal to the custom limit. + - | + An enterprises license usage page did not load at all if there was a timeout affecting the GitHub Advanced Security section. + - | + Users who edited, created, or deleted files in the web UI saw a generic rule violation message when a pre-receive hook blocked the commit, even when no rule was violated. + - | + The `ghe-spokes cache-replica sync` command exited immediately with an error on all instances, regardless of whether a cache replica was configured or not. + - | + Some API and web requests on instances with large organizations could respond slowly or time out intermittently. Loading configuration settings for many repositories in a single request—such as listing an organization teams repositories or viewing a pull request or issue—allocated an excessive number of objects and triggered heavy garbage collection. Configuration loading in these requests is now more memory-efficient, reducing latency and timeouts on affected endpoints. + - | + Secret scanning operations that look up blob origins returned spurious timeout errors (HTTP 408), even when the underlying work would have completed quickly. This caused a significant drop in success rate for affected requests. + - | + During background repository maintenance, a failed Git repack operation was incorrectly reported as successful. This could also result in Git objects being pruned without a backup, potentially causing data loss if those objects were still referenced by active operations. + - | + On instances running GitHub Enterprise Server 3.18 or later, Git-related services generated excessive syslog output, increasing log volume by up to several orders of magnitude compared to previous versions. In some cases, this caused log storage and monitoring issues for administrators. + - | + Secret scanning services did not start on instances whose processors did not provide the AVX2 instruction set, which can happen when a hypervisor hides processor features from its virtual machines. On these instances, secret scanning alerts were unavailable to all users. + - | + On an instance with secret scanning enabled, secret scanning services repeatedly attempted to connect to an unavailable internal data source, which increased resource usage and generated excessive log entries on the instance. + changes: + - | + Administrators can run three new command-line utilities over administrative SSH to perform common SAML troubleshooting operations that GitHub Enterprise Support would otherwise guide them through manually: `ghe-saml-mapping-find` looks up a users SAML mapping, `ghe-saml-debug` toggles global SAML debug logging, and `ghe-saml-mapping-destroy` deletes SAML mappings matching a NameID. + - | + Administrators can run retention for the `check_steps` and `statuses` database tables via Percona `pt-archiver` instead of the built-in application jobs. Disabled by default; enable per table with `checks.retention.steps.via-pt-archiver` and `checks.retention.statuses.via-pt-archiver`. When enabled, the corresponding application-side job is automatically disabled to avoid overlapping deletions. + - | + Administrators can configure multiple WireGuard tunnels for high-availability deployments by setting `wireguard.num-tunnels`. Multiple tunnels distribute inter-node traffic across network queues and CPU cores, improving performance during high-volume traffic. The default configuration remains unchanged. See [Mitigating single-core softirq saturation](/admin/monitoring-and-managing-your-instance/additional-nodes/configuring-additional-nodes#mitigating-single-core-softirq-saturation). + known_issues: + - | + Webhook configurations now use TCP (instead of UNIX streams) by default when connecting to the internal queueing system. To use UNIX, run `ghe-config app.hookshot-go.aqueduct-tcp-connection-enabled false`. + - | + Site administrators can ensure that secret scanning uses processor features available on their GHES instance because secret scanning compiles its pattern-matching databases on the instance instead of using prebuilt databases. The first scan of each type after an upgrade or restart can take a few seconds longer while the databases are prepared. + - | + During an upgrade of GitHub Enterprise Server, custom firewall rules are removed. If you use custom firewall rules, you must reapply them after upgrading. + - | + During the validation phase of a configuration run, a `No such object` error may occur for the Notebook and Viewscreen services. This error can be ignored as the services should still correctly start. + - | + If the root site administrator is locked out of the Management Console after failed login attempts, the account does not unlock automatically after the defined lockout time. Someone with administrative SSH access to the instance must unlock the account using the administrative shell. For more information, see [Troubleshooting access to the Management Console](/admin/administering-your-instance/administering-your-instance-from-the-web-ui/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + When following the steps for [Replacing the primary MySQL node](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-the-primary-mysql-node), step 14 (running `ghe-cluster-config-apply`) might fail with errors. If this occurs, re-running `ghe-cluster-config-apply` is expected to succeed. + - | + Running a config apply as part of the steps for [Replacing a node in an emergency](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-a-node-in-an-emergency) may fail with errors if the node being replaced is still reachable. If this occurs, shutdown the node and repeat the steps. + - | + When restoring data originally backed up from a 3.13 or greater appliance version, the Elasticsearch indices need to be reindexed before some of the data will show up. This happens via a nightly scheduled job. It can also be forced by running `/usr/local/share/enterprise/ghe-es-search-repair`. + - | + When initializing a new GHES cluster, nodes with the `consul-server` role should be added to the cluster before adding additional nodes. Adding all nodes simultaneously creates a race condition between nomad server registration and nomad client registration. + - | + In a cluster, the host running restore requires access the storage nodes via their private IPs. + - | + On an instance hosted on Azure, commenting on an issue via email meant the comment was not added to the issue. + - | + After a restore, existing outside collaborators cannot be added to repositories in a new organization. This issue can be resolved by running `/usr/local/share/enterprise/ghe-es-search-repair` on the appliance. + - | + After a geo-replica is promoted to be a primary by running `ghe-repl-promote`, the actions workflow of a repository does not have any suggested workflows. + - | + When publishing npm packages in a workflow after restoring from a backup to GitHub Enterprise Server 3.13.5.gm4 or 3.14.2.gm3, you may encounter a `401 Unauthorized` error from the GitHub Packages service. This can happen if the restore is from an N-1 or N-2 version and the workflow targets the npm endpoint on the backup instance. To avoid this issue, ensure the access token is valid and includes the correct scopes for publishing to GitHub Packages. + - | + Enterprise owners who apply a security configuration, such as Secret Scanning or Code Scanning, to all repositories in an enterprise may experience increased system load and degraded performance because GitHub Enterprise Server simultaneously queues enablement jobs for every organization. To reduce the impact, apply security configurations at the organization level and enable them incrementally while monitoring system performance. + - | + On instances with multiple Git storage nodes in a voting configuration, including cluster and geo-replication high availability topologies, upgrading may fail to correctly install Actions that ship with the new version. In some cases, previous versions of these Actions remain on the instance. To resolve this issue, run the following commands on the primary node: `ghe-config --unset 'app.actions.actions-repos-sha1sum'`, `ghe-config-apply`, and `/usr/local/share/enterprise/ghe-run-init-actions-graph`. + - | + In some cases, pull requests using auto-merge or merge queue may not merge automatically until mergeability is recalculated. + - | + After upgrading to GHES 3.21, scheduled Dependabot version updates may stop running for pre-existing configurations. If you have already upgraded and want to trigger scheduled version updates, save a change to each affected repository’s `.github/dependabot.yml` file. + - | + When restoring an instance with `ghe-restore` while the replication controller is enabled, the storage directory is not restored. + - | + In clustered GitHub Enterprise Server environments, administrators may find that nodes that remain in the cluster but no longer have the `git-server`, `pages-server`, or `storage-server` role remain online and eligible to vote in the corresponding replication tables. Review role-specific replication state and contact GitHub Support if stale rows affect replication.