Vulnerability DatabaseGHSA-gp5v-m67f-gmgp

GHSA-gp5v-m67f-gmgp: 
Rust vulnerability analysis and mitigation

Impact

Deep-Diff-Forge (DDF) reviews a patch so that a person or an automated gate can decide whether to apply it. In the cases below, DDF showed one change while git apply makes a different one. An attacker who writes the patch can use this to get a change to a sensitive file, such as a CI workflow or an executable script, reviewed as a harmless one.

  • Copy destination (high). DDF never read the copy to header. Git takes a copy's new path from its last copy to line. DDF reviewed the copy under the diff --git or +++ name instead. For example, a section diff --git a/README.md b/docs/README-copy.md with copy to .github/workflows/pwn.yml and a hunk was reviewed as a documentation copy (exit 0, in the CLI, rpc and the MCP review_outline tool). git apply wrote .github/workflows/pwn.yml with the hunk's content.
  • Nameless ---/+++ names (high). If -p1 strips nothing usable from a ---/+++ name in a Git section, Git treats it as no name and uses the diff --git path. For example, diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml with --- README / +++ README changed the workflow, but DDF reviewed README.
  • Headers after a binary line (high). Git stops reading a section's extended headers at a Binary files … differ or GIT binary patch line; DDF read on. For example, diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml with an index line, Binary files … differ, then copy from docs/logo.png / copy to docs/logo-copy.png was reviewed as a binary copy of a logo, while git apply rewrote the workflow from the index line's blob (which only has to be in the local object database, for example from any fetched branch). A rename from/rename to pair after the binary line did the same, and mode lines there showed a mode change Git never makes.
  • A carriage return in a move name (medium). Git reads an unquoted rename to/copy to name only up to a carriage return, so rename to build.rs\rdocs/notes.md created build.rs while DDF showed the whole line (with a control-character hazard, but not the build-script signal).
  • Repeated mode headers (medium). Git uses the last mode header, and reads the mode on an index line as the old mode. DDF read the first. So old mode 100755 / new mode 100755 / index … 100644 made a script executable, but DDF showed no mode change. All of these are in every release up to and including v0.8.1. This includes the 0.2.0 crates on crates.io. The results above were measured on v0.8.0 and v0.8.1 against Git 2.56.

Patches

Fixed in v0.8.2 (the GitHub release):

  • DDF now reviews a copy under its last copy to path, which is where Git writes it.
  • In a Git section, DDF refuses (exit 4) a ---/+++ name that -p1 strips to nothing.
  • DDF refuses a repeated mode header, and a mode header alongside an index line that has a mode.
  • A binary line ends the header, so any header, ---/+++ or hunk after it is refused. So are GIT binary patch with trailing text, Binary files without differ, and a binary patch with no literal or delta line.
  • An unquoted move name containing a carriage return, vertical tab or form feed is refused. DDF also refuses forms that Git itself rejects as inconsistent:
  • a section that is both a rename and a copy;
  • a +++ name that differs from the rename to or copy to name;
  • a new file's +++ name, or a deleted file's --- name, that differs from the diff --git name;
  • a second ---/+++ pair before a section's first hunk. The differential test against git apply now compares --summary as well as --numstat. It inserts each kind of extended header at every position in its sample sections. v0.8.2 is not yet published to crates.io. Until it is, build from the v0.8.2 tag or use the release binaries.

Workarounds

  • Run git apply --summary --numstat on the same patch, and refuse it if the paths or modes differ from what DDF reviewed.
  • Refuse patches that contain copy from/copy to headers, ---/+++ names without a directory prefix inside a diff --git section, any extended header after a Binary files or GIT binary patch line, or a control character in a move name.

References

  • CHANGELOG entry for 0.8.2 (Security section).
  • docs/PRODUCTION_READINESS.md, assessments of 2026-11-09 (findings N1–N3 on v0.8.1; F1–F2 on the untagged 0.8.2).

Source: NVD

Related Rust vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

GHSA-gp5v-m67f-gmgpHIGHN/A
  • Rust logoRust
  • deep-diff-forge-cli
NoYesNov 10, 2026
GHSA-rrfc-2x66-j7xhMEDIUMN/A
  • Rust logoRust
  • hatchzip
NoYesNov 10, 2026
GHSA-f7xj-6695-ww2qMEDIUMN/A
  • Rust logoRust
  • graphql-orm
NoYesNov 10, 2026
GHSA-439h-2cx8-xwgxHIGHN/A
  • Rust logoRust
  • graphql-orm-backup
NoYesNov 10, 2026
GHSA-3qf7-j9r6-6qv3HIGHN/A
  • Rust logoRust
  • graphql-orm-router
NoYesNov 10, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management