CVE-2025-54584 Overview
CVE-2025-54584 affects FINOS GitProxy, an application that mediates traffic between developers and Git remote endpoints such as github.com. The flaw resides in the PACK signature detection logic within parsePush.ts. An attacker with authenticated push access can craft a malicious Git packfile that embeds a misleading PACK signature inside commit content. By carefully constructing the packet structure, the attacker tricks the parser into treating invalid or unintended data as the packfile. This can bypass approval workflows or hide commits from reviewers. The issue is tracked under [CWE-115] (Misinterpretation of Input) and is fixed in GitProxy version 1.19.2.
Critical Impact
Attackers with push privileges can bypass GitProxy approval controls and smuggle hidden commits into protected repositories, undermining code review gates and audit trails.
Affected Products
- FINOS GitProxy versions 1.19.1 and below
- Deployments relying on GitProxy for commit approval workflows
- Environments proxying pushes to upstream Git remotes through vulnerable GitProxy versions
Discovery Timeline
- 2025-07-30 - CVE CVE-2025-54584 published to NVD
- 2026-06-17 - Last updated in NVD database
Technical Details for CVE-2025-54584
Vulnerability Analysis
GitProxy inspects incoming Git push data to enforce approval workflows before relaying commits to the upstream remote. The parser in src/proxy/processors/push-action/parsePush.ts locates the Git packfile by scanning for the PACK magic signature in the push stream. The parser does not reliably distinguish between a genuine packfile header and PACK byte sequences that appear within commit content or other packet payloads. An attacker can embed a counterfeit PACK signature inside a legitimate-looking commit object, then structure the surrounding packet framing so that GitProxy treats the attacker-controlled bytes as the authoritative packfile. The real commits are then interpreted as non-packfile data and skipped by approval and audit logic, while the upstream Git server still receives and applies the full push.
Root Cause
The root cause is misinterpretation of input [CWE-115]. The parser used a signature-based heuristic to locate the packfile boundary without validating the Git protocol packet framing that precedes the packfile. Any byte sequence containing PACK could be mistaken for the start of the packfile, breaking the trust boundary between parsed and unparsed push data.
Attack Vector
Exploitation requires network access to the GitProxy endpoint and a low-privileged account with push permissions. The attacker constructs a malicious push whose commit content includes a crafted PACK byte sequence. When GitProxy parses the push, it locks onto the attacker-planted signature, causing commits to be hidden from approvers or to bypass policy checks entirely. No user interaction is required.
// Patch excerpt from src/proxy/processors/push-action/parsePush.ts
import { Action, Step } from '../../actions';
import zlib from 'zlib';
+import fs from 'fs';
import lod from 'lodash';
// Source: https://github.com/finos/git-proxy/commit/333c98a165a5a1ec88414db3d4a2c6f81e083e0f
// Patch excerpt from src/proxy/chain.ts introducing new validation steps
proc.push.checkCommitMessages,
proc.push.checkAuthorEmails,
proc.push.checkUserPushPermission,
- proc.push.checkIfWaitingAuth,
proc.push.pullRemote,
proc.push.writePack,
+ proc.push.checkHiddenCommits,
+ proc.push.checkIfWaitingAuth,
+ proc.push.getMissingData,
proc.push.preReceive,
proc.push.getDiff,
// Source: https://github.com/finos/git-proxy/commit/a620a2f33c39c78e01783a274580bf822af3cc3a
The fix reorders the push processing chain and introduces checkHiddenCommits and getMissingData steps that execute after writePack. These steps validate the actual contents of the written pack against the commits the proxy believed it was approving, closing the parser desynchronization gap.
Detect Identity Attacks the Moment Authentication Fails
Singularity™ Identity surfaces credential misuse, lateral movement, and privilege escalation in real time, so you can contain the breach before it spreads.
Stop Identity AttacksDetection Methods for CVE-2025-54584
Indicators of Compromise
- Push events in GitProxy logs where the number of parsed commits differs from the commit count visible on the upstream remote after relay.
- Commits appearing in protected branches without a corresponding GitProxy approval record.
- Push payloads containing the PACK byte sequence embedded inside commit message bodies or tree object content.
- GitProxy deployments still reporting version 1.19.1 or earlier in startup banners or health endpoints.
Detection Strategies
- Reconcile GitProxy approval logs against the upstream Git server's reflog to identify commits that bypassed the review workflow.
- Inspect packet-captured push traffic for multiple PACK signatures within a single push session, which is anomalous under normal Git protocol usage.
- Deploy integrity checks that hash the packfile GitProxy parsed and compare it to the packfile the upstream remote received.
Monitoring Recommendations
- Alert on commits appearing on protected branches whose author or committer email was not previously surfaced through GitProxy approval events.
- Monitor GitProxy process logs for parser warnings, truncated streams, or unexpected packet lengths during push handling.
- Track the installed GitProxy version across all proxy instances and flag any node below 1.19.2.
How to Mitigate CVE-2025-54584
Immediate Actions Required
- Upgrade all GitProxy instances to version 1.19.2 or later without delay.
- Audit recent pushes relayed through vulnerable GitProxy versions against upstream repository history to identify hidden or unapproved commits.
- Rotate any secrets or credentials that may have been introduced to repositories through unreviewed commits.
- Restrict push permissions to GitProxy to the minimum set of accounts required while patching is in progress.
Patch Information
The vendor released GitProxy 1.19.2 containing the fix. Review the GitHub Release v1.19.2, the parsePush.ts patch commit 333c98a, the chain.ts patch commit a620a2f, and the GitHub Security Advisory GHSA-xxmh-rf63-qwjv for complete remediation details.
Workarounds
- No official workaround exists; upgrading to 1.19.2 is the only supported remediation.
- Where immediate patching is not possible, require out-of-band code review on the upstream Git server using branch protection rules so that GitProxy approval is not the sole gating control.
- Enable server-side pre-receive hooks on the upstream remote to independently validate commits and reject pushes that did not pass the expected approval workflow.
# Upgrade GitProxy to the patched release
npm install -g @finos/git-proxy@1.19.2
# Verify the installed version
git-proxy --version
# Restart the service after upgrade
systemctl restart git-proxy
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

