Media

pnpm: Git Fetch Argument Injection via Lockfile resolution.commit

  • Publicada: 26.06.2026
  • Actualizado: 11.10.2026 10:22

Summary

pnpm passes the lockfile-controlled git resolution.commit value to git fetch without a -- separator or commit-format validation. For git dependencies fetched through the shallow-fetch path, a malicious lockfile can replace the expected 40-character commit hash with a Git option such as --upload-pack=<command>. For SSH and local transports, --upload-pack can execute the supplied command. HTTPS transports ignore --upload-pack, so the practical attack surface is primarily SSH or local git dependencies.

Vulnerability Details

The vulnerable path is in fetching/git-fetcher/src/index.ts. When a git dependency host is configured for shallow fetching, pnpm calls:

ts
await execGit(['fetch', '--depth', '1', 'origin', resolution.commit], { cwd: tempLocation })

Because resolution.commit is appended before a -- separator, Git can parse a commit value beginning with - as an option. The same file later passes the value to git checkout without a separator:

ts
await execGit(['checkout', resolution.commit], { cwd: tempLocation })

resolution.commit comes from the lockfile and is typed as a plain string; pnpm does not validate it as a 40-character hexadecimal commit before passing it to Git.

Proof of Concept

bash
bash autofyn_audit/exploits/vuln11_git_upload_pack_rce/exploit.sh
# Creates a local bare git repo and triggers the shallow-fetch path.
# Replaces the lockfile commit hash with '--upload-pack=touch /tmp/vuln11_pwned'.
# Result: PASS -- /tmp/vuln11_pwned created by injected touch command.

The PoC uses a local file://githost/... repository because the injection requires a local or SSH transport. HTTPS transport ignores --upload-pack.

Impact

Code execution as the user running pnpm install, under specific transport conditions. The attacker must modify pnpm-lock.yaml, and the affected dependency must use SSH or local git transport. HTTPS transport (the common case) is immune.

Suggested Remediation

Add a -- separator before lockfile-controlled git revision values. Validate resolution.commit matches /^[0-9a-f]{40}$/i before passing to Git.


Discovered by AutoFyn Full audit report: audit_report.md Exploit script: exploit.sh

Software afectado

Haz clic en una tecnología para ver todas sus vulnerabilidades.

PlataformaPaqueteVersiones vulnerablesCorregida en
Paquete de npm pnpm < 10.34.0, >= 11.0.0, < 11.4.0 10.34.0, 11.4.0

Referencias

Puntuación CVSS 6.4/10
Vector CVSS
CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:N
Debilidad (CWE)
CWE-88
Plataforma
npm
Paquete
pnpm
Publicada
26.06.2026
Actualizado
11.10.2026 10:22

Fuentes y licencias

OSV / GitHub Advisory Database - GHSA-p4xf-rf54-rj3x - CC BY 4.0

Historial de vulnerabilidades: pnpm

Todas las vulnerabilidades publicadas de este paquete (Paquete de npm), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.

Todas (32) en el archivo
Entradas en total
32
Primera → última
03.2022 09.2026
Sin corrección
0
Explotada en ataques
0

Distribución por gravedad

  • Alta 18
  • Media 14

Divulgaciones por año

  1. 2022: 1
  2. 2023: 1
  3. 2024: 1
  4. 2025: 1
  5. 2026: 28
Gravedad:
  1. Alta · 7.1 CVE-2026-82392 < 10.34.5, >= 11.0.0, < 11.11.0 10.34.5, 11.11.0
  2. Alta · 7.5 CVE-2026-82393 < 10.34.5, >= 11.0.0, < 11.11.0 10.34.5, 11.11.0
  3. Alta · 7.4 CVE-2026-101043 >= 11.0.0, < 11.11.0, >= 10.7.0, < 10.34.5 11.11.0, 10.34.5
  4. Alta · 7.1 ghsa-2rx9-3g3h-c2jv >= 12.0.0-alpha.0, < 12.0.0-alpha.5 12.0.0-alpha.5
  5. Alta · 8.2 CVE-2026-59195 < 10.34.4, >= 11.0.0, < 11.8.0 10.34.4, 11.8.0
  6. Alta · 7.1 CVE-2026-59194 < 10.34.4, >= 11.0.0, < 11.7.0 10.34.4, 11.7.0
  7. Alta · 7.1 CVE-2026-59196 < 10.34.4, >= 11.0.0, < 11.7.0 10.34.4, 11.7.0
  8. Alta · 8.8 CVE-2026-55698 < 10.34.2, >= 11.0.0, < 11.5.3 10.34.2, 11.5.3
  9. Alta · 7.5 CVE-2026-55697 < 10.34.2, >= 11.0.0, < 11.5.3 10.34.2, 11.5.3
  10. Alta · 7.5 CVE-2026-55487 < 10.34.2, >= 11.0.0, < 11.5.3 10.34.2, 11.5.3
  11. Alta · 7.3 CVE-2026-50015 < 10.34.0, >= 11.0.0, < 11.4.0 10.34.0, 11.4.0
  12. Alta · 8.8 CVE-2026-50016 < 10.34.0, >= 11.0.0, < 11.4.0 10.34.0, 11.4.0
  13. pnpm: Git Fetch Argument Injection via Lockfile resolution.commit esta entrada
    Media · 6.4 CVE-2026-50014 < 10.34.0, >= 11.0.0, < 11.4.0 10.34.0, 11.4.0
  14. Alta · 8.8 CVE-2025-69264 >= 10.0.0, < 10.26.0 10.26.0
  15. Alta · 7.5 CVE-2025-69262 >= 6.25.0, < 10.27.0 10.27.0
  16. Alta · 7.5 CVE-2023-37478 < 7.33.4, >= 8.0.0, < 8.6.8 7.33.4, 8.6.8
  17. Alta · 8.8 CVE-2022-26183 < 6.15.1 6.15.1

Identifica las vulnerabilidades de tu aplicación

Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.

Conectar tu aplicación
Newsletter DockRay

La seguridad de tus aplicaciones en tu correo

Vulnerabilidades importantes, recomendaciones concretas y consejos prácticos para tus aplicaciones. Elige tus tecnologías y sigue lo que importa para tu proyecto.

  • Un resumen diario de nuevas vulnerabilidades, también las críticas.
  • Avisos sobre actualizaciones importantes.
  • Consejos prácticos sobre seguridad y monitorización de aplicaciones.

Déjalo vacío para recibir avisos de todas las tecnologías.

Suscripción gratuita. Date de baja con un clic en cualquier correo.