{"items":[{"id":"NVI-00012994","kind":"vulnerability","title":"GitPython: Repository content can impersonate the git directory, leading to arbitrary code execution","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-239g-whfq-7xj9","CVE-2026-87817"],"plain_summary":"GitHub lists this reviewed advisory for gitpython. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-323aab84019ab1042bf1cc20e37eb0e2"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-09-30T23:28:01.000Z","value":"8.8 high","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-323aab84019ab1042bf1cc20e37eb0e2"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-323aab84019ab1042bf1cc20e37eb0e2","url":"https://github.com/advisories/GHSA-239g-whfq-7xj9","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-239g-whfq-7xj9","publisher":"GitHub Advisory Database","observed_at":"2026-11-01T07:22:52.960Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-323aab84019ab1042bf1cc20e37eb0e2"],"technology":"gitpython","known_exclusions":[],"conditions_summary":"### Summary\n\n`Repo.__init__` decides which directory is the git directory by testing candidate paths in an order that\nconsiders the real `.git` **last**. Two earlier tests can be satisfied by ordinary tracked files. Git\nreserves only the literal name `.git`, so `HEAD`, `objects/`, `refs/`, `config`, `gitdir`, `commondir`\nand `hooks/` at a repository root are all legal tracked content.\n\nConsequently, after a victim opens or clones an attacker's repository, GitPython resolves `git_dir` to\nthe **working-tree root** while real git correctly resolves `/.git`. Everything GitPython then\ntreats as \"inside the git directory\" is attacker-authored content — including `hooks/`, which it\nexecutes.\n\n### CVE-2026-87817\n\n### Affected code (3.1.59)\n\nThe discovery loop in `git/repo/base.py` tests, in order:\n\n1. `git/repo/base.py:299` — `isfile(curpath/gitdir)` **and** `isfile(curpath/commondir)` **and** `isfile(curpath/HEAD)`\n2. `git/repo/base.py:320` — `is_git_dir(curpath)`\n3. `git/repo/base.py:341` — `dotgit = osp.join(curpath, \".git\")` ← the real git dir, considered last\n\n`is_git_dir` (`git/repo/fun.py:60`) requires only that `objects/` and `refs/` are directories and that\n`HEAD` is a file;","public_affected_ranges":["<= 3.1.59"]}],"null_published_at":"2026-11-01T07:29:12.907Z","source_updated_at":"2026-09-30T23:28:01.000Z","source_disclosed_at":"2026-09-30T23:27:59.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-11-01T07:22:52.960Z"}],"next_cursor":null,"snapshot_revision":"42594"}