---
id: "CVE-2026-63475"
kind: "vulnerability"
aliases: ["CVE-2026-63475"]
title: "isomorphic-git: circular symrefs from a remote hang repository operations"
severity: "medium"
cvss: 4.3
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["browser", "git", "isomorphic-git", "node", "package"]
not_affected_if: ["no-remote-clone", "system-git-only"]
published_at: "2026-11-03T20:18:15+00:00"
first_seen_at: "2026-11-03T20:49:23+00:00"
updated_at: "2026-11-03T20:52:01+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-63475", "first_seen_at": "2026-11-03T20:49:23+00:00"}]
---

# isomorphic-git: circular symrefs from a remote hang repository operations

isomorphic-git, a pure JavaScript Git library, saves circular symbolic ref entries sent by a remote server and then loops forever when resolving them. An attacker controlling a remote or a man-in-the-middle position can leave a cloned repository permanently unusable, a persistent denial of service.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed version with `npm ls isomorphic-git` in each project that depends on it
- Look for the library in any Node.js or browser app that clones repositories from remotes you do not fully control

## Fix

- isomorphic-git: upgrade to `1.38.6`

## Timeline

- 2026-11-03T20:49:23+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-63475

## Documents

- [advisory] Vendor advisory: github.com https://github.com/isomorphic-git/isomorphic-git/security/advisories/GHSA-96wc-2m84-2cj7
- [fix] Patch: github.com https://github.com/isomorphic-git/isomorphic-git/commit/823843d1cd19182df79bc907c767f5bcecb39a0b
- [fix] Release notes: github.com https://github.com/isomorphic-git/isomorphic-git/releases/tag/v1.38.6

## From the sources

isomorphic-git is a pure JavaScript implementation of Git for Node.js and browsers. Prior to 1.38.6, isomorphic-git persists server-supplied circular symref= capabilities through updateRemoteRefs, and GitRefManager.resolve() follows the resulting loose symbolic references without a default depth limit or cycle detection. After a clone from a malicious or man-in-the-middle-controlled remote, operations such as log, status, checkout, and branch that resolve refs/remotes/origin/a or refs/remotes/origin/b do not terminate. The circular references remain on disk, leaving the repository unusable for the application and causing a persistent denial of service. This issue is fixed in version 1.38.6.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
