<?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://vulnerability.circl.lu</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>Tue, 06 Oct 2026 23:10:36 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-102827</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-102827</link>
      <description>&lt;p&gt;simple-git, an interface for running git commands in any node.js application, enables applications to execute Git operations from JavaScript. Prior to 4.0.0, the default blockUnsafeOperationsPlugin compares parsed option names with literal dangerous option spellings while Git accepts unambiguous long-option abbreviations. Attacker-influenced push arguments such as abbreviated --receive-pack or --exec forms can therefore bypass detectVulnerableFlags, reach git push against a local or file remote or an attacker-influenced receive-pack target, and cause Git to invoke an attacker-selected command in consumers that expose those arguments. The clone-side abbreviation handling does not protect the push path. This issue is fixed in 4.0.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;simple-git, an interface for running git commands in any node.js application, enables applications to execute Git operations from JavaScript. Prior to 4.0.0, the default blockUnsafeOperationsPlugin compares parsed option names with literal dangerous option spellings while Git accepts unambiguous long-option abbreviations. Attacker-influenced push arguments such as abbreviated --receive-pack or --exec forms can therefore bypass detectVulnerableFlags, reach git push against a local or file remote or an attacker-influenced receive-pack target, and cause Git to invoke an attacker-selected command in consumers that expose those arguments. The clone-side abbreviation handling does not protect the push path. This issue is fixed in 4.0.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-102827</guid>
    </item>
    <item>
      <title>GHSA-858h-whjf-mvg5 — simple-git: unsafe-operations plugin bypass via git long-option abbreviation (--receive-p/--exe) -&gt; command execution (…</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-858h-whjf-mvg5</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: simple-git&lt;/p&gt;
&lt;p&gt;simple-git&amp;#39;s blockUnsafeOperationsPlugin blocks dangerous git options (--upload-pack/--receive-pack/--exec/...) unless the consumer opts in via unsafe:{allowUnsafePack:true}. Detection (@simple-git/argv-parser detectVulnerableFlags) matches the parsed flag NAME against literal-spelling patterns: /--(upload|receive)-pack/ (requires the literal &amp;#39;-pack&amp;#39;) and the string &amp;#39;--exec&amp;#39;. But git accepts unambiguous prefix abbreviations of long options, and expandToken (token-expander.ts) returns the LITERAL token as flag.name (it uses the spec only for needsNext, never to canonicalize). So `git push --receive-p=&amp;lt;cmd&amp;gt;` parses with flag.name=&amp;#39;--receive-p&amp;#39;, which /--(upload|receive)-pack/ does NOT match, yet git expands --receive-p -&amp;gt; --receive-pack and runs &amp;lt;cmd&amp;gt; (on a local/file remote, locally). The clone side is robust (its &amp;#39;--u&amp;#39; substring rule catches every --upload* abbreviation); the push --receive-* and --exe* abbreviations have no equivalent rule and slip through.&lt;/p&gt;
&lt;p&gt;Proof of concept (latest: simple-git 3.36.0, @simple-git/argv-parser 1.1.1, default unsafe plugin ON):
Gate vulnerabilityCheck: &amp;#39;push --receive-pack=touch...&amp;#39; -&amp;gt; BLOCKED; &amp;#39;push --receive-pa=touch...&amp;#39; and &amp;#39;push --receive-p=touch...&amp;#39; -&amp;gt; BYPASS (empty vulns); &amp;#39;--exec=&amp;#39; BLOCKED, &amp;#39;--exe=&amp;#39; BYPASS.
End-to-end via simpleGit().push():
  CONTROL git.push([&amp;#39;../bare&amp;#39;,&amp;#39;HEAD:refs/heads/c&amp;#39;,&amp;#39;--receive-pack=touch /tmp/pwned_ctrl;&amp;#39;]) -&amp;gt; throws GitPluginError &amp;#39;Use of --upload-pack or --receive-pack is not permitted...&amp;#39;; no command runs.…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: simple-git&lt;/p&gt;
&lt;p&gt;simple-git&amp;#39;s blockUnsafeOperationsPlugin blocks dangerous git options (--upload-pack/--receive-pack/--exec/...) unless the consumer opts in via unsafe:{allowUnsafePack:true}. Detection (@simple-git/argv-parser detectVulnerableFlags) matches the parsed flag NAME against literal-spelling patterns: /--(upload|receive)-pack/ (requires the literal &amp;#39;-pack&amp;#39;) and the string &amp;#39;--exec&amp;#39;. But git accepts unambiguous prefix abbreviations of long options, and expandToken (token-expander.ts) returns the LITERAL token as flag.name (it uses the spec only for needsNext, never to canonicalize). So `git push --receive-p=&amp;lt;cmd&amp;gt;` parses with flag.name=&amp;#39;--receive-p&amp;#39;, which /--(upload|receive)-pack/ does NOT match, yet git expands --receive-p -&amp;gt; --receive-pack and runs &amp;lt;cmd&amp;gt; (on a local/file remote, locally). The clone side is robust (its &amp;#39;--u&amp;#39; substring rule catches every --upload* abbreviation); the push --receive-* and --exe* abbreviations have no equivalent rule and slip through.&lt;/p&gt;
&lt;p&gt;Proof of concept (latest: simple-git 3.36.0, @simple-git/argv-parser 1.1.1, default unsafe plugin ON):
Gate vulnerabilityCheck: &amp;#39;push --receive-pack=touch...&amp;#39; -&amp;gt; BLOCKED; &amp;#39;push --receive-pa=touch...&amp;#39; and &amp;#39;push --receive-p=touch...&amp;#39; -&amp;gt; BYPASS (empty vulns); &amp;#39;--exec=&amp;#39; BLOCKED, &amp;#39;--exe=&amp;#39; BYPASS.
End-to-end via simpleGit().push():
  CONTROL git.push([&amp;#39;../bare&amp;#39;,&amp;#39;HEAD:refs/heads/c&amp;#39;,&amp;#39;--receive-pack=touch /tmp/pwned_ctrl;&amp;#39;]) -&amp;gt; throws GitPluginError &amp;#39;Use of --upload-pack or --receive-pack is not permitted...&amp;#39;; no command runs.…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-858h-whjf-mvg5</guid>
    </item>
  </channel>
</rss>
