CVE-2025-21614
High · 7.5go-git clients vulnerable to DoS via maliciously crafted Git server replies
CVSS
7.5
EPSS
0.7%
Published
Jan 6, 2025
CISA due date
—
Cloudanix analysis
A bug in a popular Go library for talking to Git servers lets a malicious server crash or slow down any program that uses it, potentially disrupting automated code workflows until the library is updated.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Improper input validation in go-git clients allows a remote Git server to return specially crafted responses that trigger unbounded resource allocation, leading to exhaustion of memory or CPU on the client.
Why it matters to the business
Applications and tools that embed go-git to fetch or interact with remote repositories can be forced offline or slowed to unusability when connecting to an attacker-controlled or compromised Git server, disrupting CI/CD pipelines, dependency updates, and automated code operations.
How an attack unfolds
An attacker hosts or compromises a Git server and returns malicious protocol responses; a go-git client connecting to fetch or clone triggers excessive memory or CPU consumption until the process crashes or becomes unresponsive.
How to fix it
Upgrade go-git to the version containing commit 94bd4af1deb15a64e90c6287eaf9e9f09b192a1f or later; rebuild and redeploy all dependent binaries; verify no pinned older versions remain in vendor directories or container images.
How to confirm the fix worked
Confirm the go-git module version in go.mod or binary build info matches or exceeds the fixed commit; run integration tests against a server returning known malicious responses to verify resource usage remains bounded.
Typical attack path
- Attacker positions a malicious Git server reachable by the target client
- Target application initiates a fetch, clone, or other remote operation using go-git
- Server returns crafted responses that exploit validation gaps
- Client allocates excessive resources leading to denial of service
How to detect it
Review application logs for sudden spikes in memory or CPU usage correlated with Git client activity; inspect outbound connections to Git servers for unexpected hosts or unusual response sizes; examine process dumps or traces showing excessive allocation during remote operations.
What your security team should do
- Immediately update all go-git usages to the fixed commit and rebuild affected services
- Inventory Go-based tools and CI runners that perform Git operations over the network
- Add dependency scanning rules to block future builds with versions prior to the fix
- Monitor for anomalous memory or CPU spikes during Git client operations
The record
A denial of service (DoS) vulnerability was discovered in go-git versions prior to `v5.13`. This vulnerability allows an attacker to perform denial of service attacks by providing specially crafted responses from a Git server which triggers resource exhaustion in `go-git` clients. This is a `go-git` implementation issue and does not affect the upstream `git` cli.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | github.com/go-git/go-git | 4.0.0 | No fix |
| Go | github.com/go-git/go-git/v4 | 4.0.0 | No fix |
| Go | github.com/go-git/go-git/v5 | 0 | 5.13.0 |
| Go | gopkg.in/src-d/go-git.v4 | 4.0.0 | No fix |
| AlmaLinux:8 | grafana | 0 | 9.2.10-21.el8_10 |
| AlmaLinux:8 | grafana-selinux | 0 | 9.2.10-21.el8_10 |
| Chainguard | amazon-ssm-agent | 0 | 3.3.1957.0-r5 |
| Chainguard | amazon-ssm-agent-ecs-exec | 0 | 3.3.1957.0-r5 |
| Chainguard | apko | 0 | 0.22.5-r0 |
| Chainguard | argo-cd-2.10 | 0 | 2.10.18-r4 |
| Chainguard | argo-cd-2.10-compat | 0 | 2.10.18-r4 |
| Chainguard | argo-cd-2.10-repo-server | 0 | 2.10.18-r4 |
| Chainguard | argo-cd-2.11 | 0 | 2.11.12-r3 |
| Chainguard | argo-cd-2.11-compat | 0 | 2.11.12-r3 |
| Chainguard | argo-cd-2.11-repo-server | 0 | 2.11.12-r3 |
| Chainguard | argo-cd-2.12 | 0 | 2.12.9-r1 |
| Chainguard | argo-cd-2.12-compat | 0 | 2.12.9-r1 |
| Chainguard | argo-cd-2.12-repo-server | 0 | 2.12.9-r1 |
| Chainguard | argo-cd-2.13 | 0 | 2.13.3-r1 |
| Chainguard | argo-cd-2.13-compat | 0 | 2.13.3-r1 |
| Chainguard | argo-cd-2.13-repo-server | 0 | 2.13.3-r1 |
| Chainguard | argo-cd-fips-2.10 | 0 | 2.10.18-r4 |
| Chainguard | argo-cd-fips-2.10-compat | 0 | 2.10.18-r4 |
| Chainguard | argo-cd-fips-2.10-repo-server | 0 | 2.10.18-r4 |
| Chainguard | argo-cd-fips-2.11 | 0 | 2.11.12-r3 |
| Chainguard | argo-cd-fips-2.11-compat | 0 | 2.11.12-r3 |
| Chainguard | argo-cd-fips-2.11-repo-server | 0 | 2.11.12-r3 |
| Chainguard | argo-cd-fips-2.12 | 0 | 2.12.9-r1 |
| Chainguard | argo-cd-fips-2.12-compat | 0 | 2.12.9-r1 |
| Chainguard | argo-cd-fips-2.12-repo-server | 0 | 2.12.9-r1 |
| Chainguard | argo-cd-fips-2.13 | 0 | 2.13.3-r1 |
| Chainguard | argo-cd-fips-2.13-compat | 0 | 2.13.3-r1 |
| Chainguard | argo-cd-fips-2.13-repo-server | 0 | 2.13.3-r1 |
| Chainguard | argo-events | 0 | 1.9.3-r3 |
| Chainguard | argo-events-compat | 0 | 1.9.3-r3 |
| Chainguard | argo-events-fips | 0 | 1.9.3-r3 |
| Chainguard | argo-events-fips-compat | 0 | 1.9.3-r3 |
| Chainguard | argo-workflow-cli | 0 | 3.6.2-r4 |
| Chainguard | argo-workflow-cli-fips | 0 | 3.6.2-r3 |
| Chainguard | argo-workflow-controller | 0 | 3.6.2-r4 |
| Chainguard | argo-workflow-controller-compat | 0 | 3.6.2-r4 |
| Chainguard | argo-workflow-controller-compat-fips | 0 | 3.6.2-r3 |
| Chainguard | argo-workflow-controller-fips | 0 | 3.6.2-r3 |
| Chainguard | argo-workflow-executor | 0 | 3.6.2-r4 |
| Chainguard | argo-workflow-executor-compat | 0 | 3.6.2-r4 |
| Chainguard | argo-workflow-executor-compat-fips | 0 | 3.6.2-r3 |
| Chainguard | argo-workflow-executor-fips | 0 | 3.6.2-r3 |
| Chainguard | argo-workflows | 0 | 3.6.2-r4 |
| Chainguard | argo-workflows-fips | 0 | 3.6.2-r3 |
| Chainguard | argo-workflows-known-hosts | 0 | 3.6.2-r4 |
| Chainguard | argo-workflows-known-hosts-fips | 0 | 3.6.2-r3 |
| Chainguard | argo-workflows-ui | 0 | 3.6.2-r4 |
| Chainguard | argocd-image-updater | 0 | 0.15.2-r1 |
| Chainguard | argocd-image-updater-compat | 0 | 0.15.2-r1 |
| Chainguard | argocd-image-updater-fips | 0 | 0.15.2-r0 |
| Chainguard | bom | 0 | 0.6.0-r14 |
| Chainguard | chainctl | 0 | 0.2.20-r0 |
| Chainguard | chezmoi | 0 | 2.57.0-r1 |
| Chainguard | crossplane | 0 | 1.18.2-r2 |
| Chainguard | crossplane-crank | 0 | 1.18.2-r2 |
| Chainguard | crossplane-crank-fips | 0 | 1.18.2-r2 |
| Chainguard | crossplane-fips | 0 | 1.18.2-r2 |
| Chainguard | crossplane-xfn | 0 | 1.18.2-r2 |
| Chainguard | dagger | 0 | 0.15.1-r3 |
| Chainguard | datadog-agent | 0 | 7.60.1-r1 |
| Chainguard | datadog-agent-core-integrations | 0 | 7.60.1-r1 |
| Chainguard | datadog-agent-core-integrations-fips | 0 | 7.60.1-r1 |
| Chainguard | datadog-agent-fakeintake | 0 | 7.60.1-r1 |
| Chainguard | datadog-agent-fakeintake-fips | 0 | 7.60.1-r1 |
| Chainguard | datadog-agent-fips | 0 | 7.60.1-r1 |
| Chainguard | datadog-agent-jmx | 0 | 7.60.1-r1 |
| Chainguard | datadog-agent-jmx-fips | 0 | 7.60.1-r1 |
| Chainguard | datadog-agent-oci-compat | 0 | 7.60.1-r1 |
| Chainguard | datadog-agent-oci-compat-fips | 0 | 7.60.1-r1 |
| Chainguard | datadog-agent-s6-overlay | 0 | 7.60.1-r1 |
| Chainguard | datadog-agent-s6-overlay-fips | 0 | 7.60.1-r1 |
| Chainguard | datadog-cluster-agent | 0 | 7.60.1-r1 |
| Chainguard | datadog-cluster-agent-fips | 0 | 7.60.1-r1 |
| Chainguard | datadog-cluster-agent-oci-compat | 0 | 7.60.1-r1 |
| Chainguard | datadog-cluster-agent-oci-compat-fips | 0 | 7.60.1-r1 |
| Chainguard | docker-credential-cgr | 0 | 0.2.20-r0 |
| Chainguard | dogstatsd | 0 | 7.60.1-r1 |
| Chainguard | flux | 0 | 2.4.0-r3 |
| Chainguard | flux-2.4 | 0 | 2.4.0-r3 |
| Chainguard | flux-2.4-compat | 0 | 2.4.0-r3 |
| Chainguard | flux-compat | 0 | 2.4.0-r3 |
| Chainguard | flux-fips | 0 | 2.4.0-r3 |
| Chainguard | flux-fips-2.4 | 0 | 2.4.0-r3 |
| Chainguard | flux-fips-2.4-compat | 0 | 2.4.0-r3 |
| Chainguard | flux-fips-compat | 0 | 2.4.0-r3 |
| Chainguard | flux-image-automation-controller | 0 | 0.39.0-r5 |
| Chainguard | flux-image-automation-controller-compat | 0 | 0.39.0-r5 |
| Chainguard | flux-image-automation-controller-fips | 0 | 0.39.0-r3 |
| Chainguard | flux-image-automation-controller-fips-compat | 0 | 0.39.0-r3 |
| Chainguard | flux-image-automation-controller-fips-iamguarded-compat | 0 | 0.39.0-r3 |
| Chainguard | flux-image-automation-controller-iamguarded-compat | 0 | 0.39.0-r5 |
| Chainguard | flux-kustomize-controller | 0 | 1.4.0-r4 |
| Chainguard | flux-kustomize-controller-bitnami-compat | 0 | 1.4.0-r4 |
| Chainguard | flux-kustomize-controller-fips | 0 | 1.4.0-r3 |
| Chainguard | flux-kustomize-controller-fips-iamguarded-compat | 0 | 1.4.0-r3 |
| Chainguard | flux-kustomize-controller-iamguarded-compat | 0 | 1.4.0-r4 |
| Chainguard | flux-source-controller | 0 | 1.4.1-r6 |
| Chainguard | flux-source-controller-bitnami-compat | 0 | 1.4.1-r6 |
| Chainguard | flux-source-controller-fips | 0 | 1.4.1-r4 |
| Chainguard | flux-source-controller-fips-iamguarded-compat | 0 | 1.4.1-r4 |
| Chainguard | flux-source-controller-iamguarded-compat | 0 | 1.4.1-r6 |
| Chainguard | fluxcd-source-controller-bitnami-compat | 0 | 1.4.1-r6 |
| Chainguard | gitaly-17.10 | 0 | 17.10.0-r2 |
| Chainguard | gitaly-17.2 | 0 | 17.2.9-r3 |
| Chainguard | gitaly-17.3 | 0 | 17.3.7-r3 |
| Chainguard | gitaly-17.4 | 0 | 17.4.6-r3 |
| Chainguard | gitaly-17.5 | 0 | 17.5.4-r3 |
| Chainguard | gitaly-17.6 | 0 | 17.6.2-r4 |
| Chainguard | gitaly-17.7 | 0 | 17.7.0-r2 |
| Chainguard | gitaly-backup-17.10 | 0 | 17.10.0-r2 |
| Chainguard | gitaly-backup-17.2 | 0 | 17.2.9-r3 |
| Chainguard | gitaly-backup-17.3 | 0 | 17.3.7-r3 |
| Chainguard | gitaly-backup-17.4 | 0 | 17.4.6-r3 |
| Chainguard | gitaly-backup-17.5 | 0 | 17.5.4-r3 |
| Chainguard | gitaly-backup-17.6 | 0 | 17.6.2-r4 |
| Chainguard | gitaly-backup-17.7 | 0 | 17.7.0-r2 |
| Chainguard | gitaly-backup-fips-17.10 | 0 | 17.10.0-r2 |
| Chainguard | gitaly-backup-fips-17.2 | 0 | 17.2.9-r3 |
| Chainguard | gitaly-backup-fips-17.3 | 0 | 17.3.7-r4 |
| Chainguard | gitaly-backup-fips-17.4 | 0 | 17.4.6-r4 |
| Chainguard | gitaly-backup-fips-17.5 | 0 | 17.5.4-r4 |
| Chainguard | gitaly-backup-fips-17.6 | 0 | 17.6.2-r2 |
| Chainguard | gitaly-backup-fips-17.7 | 0 | 17.7.2-r0 |
| Chainguard | gitaly-backup-fips-17.8 | 0 | 17.8.0-r1 |
| Chainguard | gitaly-compat-17.10 | 0 | 17.10.0-r2 |
| Chainguard | gitaly-compat-17.2 | 0 | 17.2.9-r3 |
| Chainguard | gitaly-compat-17.3 | 0 | 17.3.7-r3 |
| Chainguard | gitaly-compat-17.4 | 0 | 17.4.6-r3 |
| Chainguard | gitaly-compat-17.5 | 0 | 17.5.4-r3 |
| Chainguard | gitaly-compat-17.6 | 0 | 17.6.2-r4 |
| Chainguard | gitaly-compat-17.7 | 0 | 17.7.0-r2 |
| Chainguard | gitaly-fips-17.10 | 0 | 17.10.0-r2 |
| Chainguard | gitaly-fips-17.2 | 0 | 17.2.9-r3 |
| Chainguard | gitaly-fips-17.3 | 0 | 17.3.7-r4 |
| Chainguard | gitaly-fips-17.4 | 0 | 17.4.6-r4 |
| Chainguard | gitaly-fips-17.5 | 0 | 17.5.4-r4 |
| Chainguard | gitaly-fips-17.6 | 0 | 17.6.2-r2 |
| Chainguard | gitaly-fips-17.7 | 0 | 17.7.2-r0 |
| Chainguard | gitaly-fips-17.8 | 0 | 17.8.0-r1 |
| Chainguard | gitaly-git-17.10 | 0 | 17.10.0-r2 |
| Chainguard | gitaly-git-17.2 | 0 | 17.2.9-r3 |
| Chainguard | gitaly-git-17.3 | 0 | 17.3.7-r3 |
| Chainguard | gitaly-git-17.4 | 0 | 17.4.6-r3 |
| Chainguard | gitaly-git-17.5 | 0 | 17.5.4-r3 |
| Chainguard | gitaly-git-17.6 | 0 | 17.6.2-r4 |
| Chainguard | gitaly-git-17.7 | 0 | 17.7.0-r2 |
| Chainguard | gitaly-git-fips-17.10 | 0 | 17.10.0-r2 |
| Chainguard | gitaly-git-fips-17.3 | 0 | 17.3.7-r4 |
| Chainguard | gitaly-git-fips-17.4 | 0 | 17.4.6-r4 |
| Chainguard | gitaly-git-fips-17.5 | 0 | 17.5.4-r4 |
| Chainguard | gitaly-git-fips-17.6 | 0 | 17.6.2-r2 |
| Chainguard | gitaly-git-fips-17.7 | 0 | 17.7.2-r0 |
| Chainguard | gitaly-git-fips-17.8 | 0 | 17.8.0-r1 |
| Chainguard | gitaly-init-cgroups-17.10 | 0 | 17.10.0-r2 |
| Chainguard | gitaly-init-cgroups-17.2 | 0 | 17.2.9-r3 |
| Chainguard | gitaly-init-cgroups-17.2-compat | 0 | 17.2.9-r3 |
| Chainguard | gitaly-init-cgroups-17.3 | 0 | 17.3.7-r3 |
| Chainguard | gitaly-init-cgroups-17.4 | 0 | 17.4.6-r3 |
| Chainguard | gitaly-init-cgroups-17.5 | 0 | 17.5.4-r3 |
| Chainguard | gitaly-init-cgroups-17.6 | 0 | 17.6.2-r4 |
| Chainguard | gitaly-init-cgroups-17.7 | 0 | 17.7.0-r2 |
| Chainguard | gitaly-init-cgroups-compat-17.10 | 0 | 17.10.0-r2 |
| Chainguard | gitaly-init-cgroups-compat-17.2 | 0 | 17.2.9-r3 |
| Chainguard | gitaly-init-cgroups-compat-17.3 | 0 | 17.3.7-r3 |
| Chainguard | gitaly-init-cgroups-compat-17.4 | 0 | 17.4.6-r3 |
| Chainguard | gitaly-init-cgroups-compat-17.5 | 0 | 17.5.4-r3 |
| Chainguard | gitaly-init-cgroups-compat-17.6 | 0 | 17.6.2-r4 |
| Chainguard | gitaly-init-cgroups-compat-17.7 | 0 | 17.7.0-r2 |
| Chainguard | gitaly-init-cgroups-fips-17.10 | 0 | 17.10.0-r2 |
| Chainguard | gitaly-init-cgroups-fips-17.2 | 0 | 17.2.9-r3 |
| Chainguard | gitaly-init-cgroups-fips-17.3 | 0 | 17.3.7-r4 |
| Chainguard | gitaly-init-cgroups-fips-17.4 | 0 | 17.4.6-r4 |
| Chainguard | gitaly-init-cgroups-fips-17.5 | 0 | 17.5.4-r4 |
| Chainguard | gitaly-init-cgroups-fips-17.6 | 0 | 17.6.2-r2 |
| Chainguard | gitaly-init-cgroups-fips-17.7 | 0 | 17.7.2-r0 |
| Chainguard | gitaly-init-cgroups-fips-17.8 | 0 | 17.8.0-r1 |
| Chainguard | gitea | 0 | 1.22.6-r2 |
| Chainguard | gitea-compat | 0 | 1.22.6-r2 |
| Chainguard | gitea-fips | 0 | 1.22.6-r2 |
| Chainguard | gitea-fips-compat | 0 | 1.22.6-r2 |
| Chainguard | gitlab-rails-ee-17.5 | 0 | 17.5.5-r1 |
| Chainguard | gitlab-rails-ee-17.6 | 0 | 17.6.3-r1 |
| Chainguard | gitlab-rails-ee-17.7 | 0 | 17.7.2-r0 |
| Chainguard | gitlab-rails-ee-assets-17.5 | 0 | 17.5.5-r1 |
| Chainguard | gitlab-rails-ee-assets-17.6 | 0 | 17.6.3-r1 |
| Chainguard | gitlab-rails-ee-assets-17.7 | 0 | 17.7.2-r0 |
| Chainguard | gitlab-rails-ee-assets-fips-17.5 | 0 | 17.5.5-r1 |
| Chainguard | gitlab-rails-ee-assets-fips-17.6 | 0 | 17.6.3-r1 |
| Chainguard | gitlab-rails-ee-assets-fips-17.7 | 0 | 17.7.2-r0 |
| Chainguard | gitlab-rails-ee-doc-17.5 | 0 | 17.5.5-r1 |
| Chainguard | gitlab-rails-ee-doc-17.6 | 0 | 17.6.3-r1 |
| Chainguard | gitlab-rails-ee-doc-17.7 | 0 | 17.7.2-r0 |
| Chainguard | gitlab-rails-ee-doc-fips-17.5 | 0 | 17.5.5-r1 |
| Chainguard | gitlab-rails-ee-doc-fips-17.6 | 0 | 17.6.3-r1 |
| Chainguard | gitlab-rails-ee-doc-fips-17.7 | 0 | 17.7.2-r0 |
Related vulnerabilities
- CVE-2026-25934 go-git is a highly extensible git implementation library written in pure Go. Also affects github.com/go-git/go-git
- CVE-2025-21613 go-git has an Argument Injection via the URL field Also affects github.com/go-git/go-git/v4
- CVE-2023-49569 A path traversal vulnerability was discovered in go-git versions prior to v5.11. Also affects github.com/go-git/go-git/v4
- CVE-2023-49568 A denial of service (DoS) vulnerability was discovered in go-git versions prior to v5.11. Also affects github.com/go-git/go-git/v5
- CVE-2025-61729 Within HostnameError.Error(), when constructing an error string, there is no limit to the… Also affects grafana
- CVE-2025-4123 A cross-site scripting (XSS) vulnerability exists in Grafana caused by combining a client… Also affects grafana
- CVE-2025-22871 The net/http package improperly accepts a bare LF as a line terminator in chunked data… Also affects grafana
- CVE-2024-47875 DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. Also affects grafana