GitHub Advisoryadvisory · Maven

GHSA-x4ff-q6h8-v7gw sbt: Source dependency feature (via crafted VCS URL) leads to arbitrary code execution on Windows

MEDIUM Published 2026-03-24 Modified 2026-03-27 Official page ↗
Aliases
CVE-2026-32948
Ecosystem
Maven
Packages
org.scala-sbt:sbt
Severity
Moderate
CVSS vector
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:A/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
Weaknesses
CWE-78
Reviewed
2026-03-24

Affected packages

• Maven org.scala-sbt:sbt: >= 0.9.5, < 1.12.8 → fixed in 1.12.8

Description

Summary On Windows, sbt uses `Process("cmd", "/c", ...)` to run VCS commands (git, hg, svn). The URI fragment (branch, tag, revision) is user-controlled via the build definition and passed to these commands without validation. Because `cmd /c` interprets `&`, `|`, and `;` as command separators, a malicious fragment can execute arbitrary commands. Patched version Technically, sbt 1.12.7 is patched, but it has a bug that makes source dependency non-functional, so update to sbt 1.12.8 or later instead. Details • Resolvers.scala L84–95 — git resolver passes `uri.getFragment()` to `run()` without sanitization • Resolvers.scala L137–145 — `run()` uses `Process("cmd", "/c", ...)` on Windows, so `cmd` interprets `&&` as command separator PoC ```sh build.properties sbt.version=1.12.5 # Tested on those two versions of sbt sbt.version=2.0.0-RC9 ``` ```scala // build.sbt ThisBuild / scalaVersion := "2.12.19" lazy val root = project .in(file(".")) .dependsOn(vulnerable) lazy val vulnerable = RootProject( uri("https://github.com/sbt/io.git#develop%26%26calc.exe") ) ``` Impact Windows users are impacted. An attacker can execute arbitrary Windows commands if they control the dependency URI.

Related

Alias · CVE (1)

  • CVE-2026-32948 sbt is a build tool for Scala, Java, and others. vulnerability

Weakness · CWE (1)

  • CWE-78 Improper Neutralization of Special Elements used in an OS Command weakness

References