<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 22 Oct 2026 18:26:14 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-114145</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-114145</link>
      <description>&lt;p&gt;GitPython is a python library used to interact with Git repositories. Prior to 3.2.1, create_submodule() in git/objects/submodule/base.py accepts an attacker-influenced submodule path such as .git/hooks and invokes _clone_repo() before safely rejecting the destination. In 3.1.x, _validate_repo_path() does not exist and the call succeeds silently, while in 3.2.0 and later affected revisions the check in git/index/base.py raises ValueError only after the clone has written to disk and does not remove the planted file. An attacker-controlled submodule can therefore place an executable post-checkout hook that a later Git operation executes. Exploitation requires an application to accept an untrusted submodule path and a clone destination such as .git/hooks that is empty enough for Git to clone into it, which commonly means that default sample hooks are absent. This issue is fixed in version 3.2.1.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;GitPython is a python library used to interact with Git repositories. Prior to 3.2.1, create_submodule() in git/objects/submodule/base.py accepts an attacker-influenced submodule path such as .git/hooks and invokes _clone_repo() before safely rejecting the destination. In 3.1.x, _validate_repo_path() does not exist and the call succeeds silently, while in 3.2.0 and later affected revisions the check in git/index/base.py raises ValueError only after the clone has written to disk and does not remove the planted file. An attacker-controlled submodule can therefore place an executable post-checkout hook that a later Git operation executes. Exploitation requires an application to accept an untrusted submodule path and a clone destination such as .git/hooks that is empty enough for Git to clone into it, which commonly means that default sample hooks are absent. This issue is fixed in version 3.2.1.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-114145</guid>
    </item>
    <item>
      <title>GHSA-83vg-56qc-22m7 — GitPython validates a submodule's ".git" path only after cloning into it (RCE)</title>
      <link>https://db.gcve.eu/vuln/ghsa-83vg-56qc-22m7</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: Gitpython&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;`create_submodule(name, path, url)` clones a submodule into the repo&amp;#39;s own `.git`
directory before it rejects the path. A `path` of &amp;#34;.git/hooks&amp;#34; is accepted by the
pre-clone check, so the submodule is cloned straight into the live hooks directory,
and a file named `post-checkout` in the submodule becomes an executable
`.git/hooks/post-checkout`. On 3.2.0+ the later index check does raise `ValueError`,
but only after the clone already wrote to disk, and it does not remove the planted
hook; on 3.1.x there is no such check and the call succeeds silently. Either way the
hook runs on the next git operation (e.g. checkout), giving code execution.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The checkout path is validated too late, after the clone has already mutated disk.
This breaks the &amp;#34;validate before mutation&amp;#34; invariant that commit 43a43cd8 (&amp;#34;Validate
submodule checkout and metadata paths before mutation&amp;#34;) set out to enforce.&lt;/p&gt;
&lt;p&gt;Submodule.add() calls the permissive path check before cloning, and the strict check
only reaches the &amp;#34;.git&amp;#34; alias at index time, after _clone_repo has written to disk:&lt;/p&gt;
&lt;p&gt;git/objects/submodule/base.py (Submodule.add)
  599: path = cls._to_relative_path(repo, path)           # accepts &amp;#34;.git/hooks&amp;#34;
  673: mrepo = cls._clone_repo(repo, url, path, name, ...) # clones into &amp;lt;worktree&amp;gt;/.git/hooks
  714: index.add([sm], write=True)                         # strict check only triggers here&lt;/p&gt;
&lt;p&gt;git/index/base.py (IndexFile._preprocess_add_items)
  732: _validate_repo_path(entry.path)…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: Gitpython&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;`create_submodule(name, path, url)` clones a submodule into the repo&amp;#39;s own `.git`
directory before it rejects the path. A `path` of &amp;#34;.git/hooks&amp;#34; is accepted by the
pre-clone check, so the submodule is cloned straight into the live hooks directory,
and a file named `post-checkout` in the submodule becomes an executable
`.git/hooks/post-checkout`. On 3.2.0+ the later index check does raise `ValueError`,
but only after the clone already wrote to disk, and it does not remove the planted
hook; on 3.1.x there is no such check and the call succeeds silently. Either way the
hook runs on the next git operation (e.g. checkout), giving code execution.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The checkout path is validated too late, after the clone has already mutated disk.
This breaks the &amp;#34;validate before mutation&amp;#34; invariant that commit 43a43cd8 (&amp;#34;Validate
submodule checkout and metadata paths before mutation&amp;#34;) set out to enforce.&lt;/p&gt;
&lt;p&gt;Submodule.add() calls the permissive path check before cloning, and the strict check
only reaches the &amp;#34;.git&amp;#34; alias at index time, after _clone_repo has written to disk:&lt;/p&gt;
&lt;p&gt;git/objects/submodule/base.py (Submodule.add)
  599: path = cls._to_relative_path(repo, path)           # accepts &amp;#34;.git/hooks&amp;#34;
  673: mrepo = cls._clone_repo(repo, url, path, name, ...) # clones into &amp;lt;worktree&amp;gt;/.git/hooks
  714: index.add([sm], write=True)                         # strict check only triggers here&lt;/p&gt;
&lt;p&gt;git/index/base.py (IndexFile._preprocess_add_items)
  732: _validate_repo_path(entry.path)…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-83vg-56qc-22m7</guid>
    </item>
  </channel>
</rss>
