CVE-2025-69263: pnpm Lockfile Integrity Bypass Allows Remote Dynamic Dependencies
Summary
HTTP tarball dependencies (and git-hosted tarballs) are stored in the lockfile without integrity hashes. This allows the remote server to serve different content on each install, even when a lockfile is committed.
Details
When a package depends on an HTTP tarball URL, pnpm's tarball resolver returns only the URL without computing an integrity hash:
resolving/tarball-resolver/src/index.ts: javascript return { resolution: { tarball: resolvedUrl, // No integrity field }, resolvedVia: 'url', }
The resulting lockfile entry has no integrity to verify: yaml remote-dynamic-dependency@http://example.com/pkg.tgz: resolution: {tarball: http://example.com/pkg.tgz} version: 1.0.0
Since there is no integrity hash, pnpm cannot detect when the server returns different content.
This affects: - HTTP/HTTPS tarball URLs ("pkg": "https://example.com/pkg.tgz") - Git shorthand dependencies ("pkg": "github:user/repo") - Git URLs ("pkg": "git+https://github.com/user/repo")
npm registry packages are not affected as they include integrity hashes from the registry metadata.
PoC
See attached pnpm-bypass-integrity-poc.zip
The POC includes: - A server that returns different tarball content on each request - A malicious-package that depends on the HTTP tarball - A victim project that depends on malicious-package
To run: bash cd pnpm-bypass-integrity-poc ./run-poc.sh
The output shows that each install (with pnpm store prune between them) downloads different code despite having a committed lockfile.
Impact
An attacker who publishes a package with an HTTP tarball dependency can serve different code to different users or CI/CD environments. This enables:
- Targeted attacks based on request metadata (IP, headers, timing) - Evasion of security audits (serve benign code during review, malicious code later) - Supply chain attacks where the malicious payload changes over time
The attack requires the victim to install a package that has an HTTP/git tarball in its dependency tree. The victim's lockfile provides no protection.
Other sources
pnpm is a package manager. Versions 10.26.2 and below store HTTP tarball dependencies (and git-hosted tarballs) in the lockfile without integrity hashes. This allows the remote server to serve different content on each install, even when a lockfile is committed. An attacker who publishes a package with an HTTP tarball dependency can serve different code to different users or CI/CD environments. The attack requires the victim to install a package that has an HTTP/git tarball in its dependency tree. The victim's lockfile provides no protection. This issue is fixed in version 10.26.0.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
npm/pnpmto a version that resolves this vulnerability.Fixed in 10.26.0 - Upgrade
Upgrade
pnpmto a version that resolves this vulnerability.Fixed in 10.26.0
Event History
Frequently Asked Questions
What is the severity of CVE-2025-69263?
CVE-2025-69263 is categorized as a moderate severity vulnerability.
How do I fix CVE-2025-69263?
To fix CVE-2025-69263, update the pnpm package to version 10.26.0 or later.
What causes CVE-2025-69263?
CVE-2025-69263 is caused by HTTP tarball dependencies stored in the lockfile without integrity hashes.
Which versions of pnpm are affected by CVE-2025-69263?
pnpm versions prior to 10.26.0 are affected by CVE-2025-69263.
What are the potential impacts of CVE-2025-69263?
CVE-2025-69263 allows a remote server to serve different content on each install, leading to inconsistent package installs.