GHSA-fr8x-3vfx-f45h: gix and gitoxide: unvalidated submodule name traverses out of .git/modules and redirects state() / open() to another repository
attachments: pocs.zip
Submodule names coming from .gitmodules are exposed as unvalidated names and are later reused to derive the submodule git directory as:
<superproject common_dir>/modules/<submodule name>
Because the submodule name is joined directly as a filesystem path component, a name such as ../../../escaped-target.git escapes .git/modules after normalization. The current implementation then uses that escaped path in both state() and open().
The updated PoC demonstrates the real sink, not just string construction:
state()reportsrepository_exists=truefor the traversed path;open()returns a repository whose normalizedcommon_dir()matches the attacker-chosen repository outside.git/modules.
References
Code Behaviors & Features
Detect and mitigate GHSA-fr8x-3vfx-f45h with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →