Skip to main content

Spatie Scotty CVE-2026-93534

| EUVDEUVD-2026-83165 MEDIUM
Download of Code Without Integrity Check (CWE-494)
2026-09-18 VulDB GHSA-m88j-9w7j-676j
5.3
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Compromise release asset or gain on-path position
  2. Delivery
    Serve malicious phar in place of legitimate build
  3. Exploit
    Operator runs Scotty self-update
  4. Execution
    SelfUpdater::update installs phar without integrity check
  5. Impact
    Attacker code executes as the tool user

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V15 - Secure Coding and Architecture Code integrity verification
Exploitation Conditions

Requires that the attacker can tamper with the phar delivered to SelfUpdater::update - e.g. compromise of the GitHub release asset/maintainer token, a malicious mirror, or an on-path MITM of the download (the pre-1.4.3 code performs no signature or hash verification). It also requires user interaction (UI:P): an operator must actively invoke Scotty's self-update. Affected versions are Scotty up to and including 1.4.2 (cpe:2.3:a:spatie:scotty); the fix in 1.4.3 adds ed25519 signature verification, so patched installations that ship the signing key are not exploitable. Limiting factors: the delivery channel is normally GitHub over HTTPS, so plain MITM is impractical without breaking TLS, and exploitation is contingent on a maintainer/release-channel compromise plus a user-triggered update.

Impact

This is a supply-chain/self-update integrity flaw (CWE-494) in spatie Scotty's SelfUpdater. The vendor CVSS 4.0 base score is 5.3 (AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:L), treating each impact as Low - but this is arguably conservative: successful substitution of the downloaded phar yields arbitrary code execution when the tool next runs, which is a full integrity/availability/confidentiality compromise of the host running Scotty. The countervailing factor is that exploitation is NOT low-complexity in practice: the attacker must be able to tamper with the download (compromise the GitHub release/maintainer account, or achieve an on-path MITM), so I assess AC:H rather than the vendor's AC:L. Exploitation status: no public exploit identified at time of analysis - there is no EPSS score, no CISA KEV listing, and no POC in the references (VulDB advisory and GitHub issue/commit only). The E:X (Exploit Maturity: Not Defined) in the vector confirms exploitation maturity is unspecified. Net: a legitimate integrity/supply-chain weakness worth patching, but not an emergency - it requires a privileged position in the delivery channel plus a user running the self-update, so it is a moderate, targeted-risk issue rather than a mass-exploitable one. Note the CVSS is a 4.0 vector (no 3.1 provided), and the 'Information Disclosure' tag conflicts with the actual weakness class (code integrity / potential code execution).

Exploit ScenarioDerived

An attacker who compromises the release channel (GitHub release asset, maintainer token) or achieves an on-path position replaces the Scotty phar served to SelfUpdater::update with a malicious build. When an operator runs the self-update command, the unsigned phar is downloaded and installed without verification, and the attacker's code executes with the privileges of the user running Scotty. No public exploit code is currently identified.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 18, 2026

Missing integrity verification in spatie Scotty's self-update handler (SelfUpdater::update in app/Updater/SelfUpdater.php) allows a tampered release artifact to be downloaded and installed as the running application in versions up to and including 1.4.2. Because the updater fetches the phar without validating a signature or hash, an attacker who can substitute the distributed artifact - for example through a compromised GitHub release or maintainer credential, a malicious mirror, or interception of the download - gains execution of arbitrary PHP within the Scotty process once an operator triggers the self-update; CVSS 4.0 lists PR:N (unauthenticated) with UI:P, so user interaction is required but no prior authentication is. No public exploit code has been identified at time of analysis and the issue is not listed in CISA KEV; the vendor-supplied CVSS 4.0 base score is 5.3, while our independent assessment rates it higher under CVSS 3.1 (AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H) because of the high integrity and confidentiality impact of replacing the application binary.

RemediationAI

Apply the vendor-released patch by upgrading to Scotty 1.4.3 or later, which adds ed25519 signature verification of the downloaded phar and its detached .sig; the fix is published at https://github.com/spatie/scotty/releases/tag/1.4.3 and the code change is https://github.com/spatie/scotty/commit/4b4e11bfc98e3a2159bb2b3d9b040293fcc44744. Confirm after upgrading that the running build contains a populated ReleaseSigningKey::PUBLIC_KEY (the commit ships the base64 public key "znfegvaUBGmI3XrzY9HpeSZLkqSy0ipITlxkqfu0NJs="), since signature enforcement is only meaningful when the correct key is embedded; note that releases signed with a mismatched key are deliberately failed by the build script, so a misconfigured key blocks updates rather than silently bypassing verification. If upgrading is not immediately possible, the most effective compensating control is to disable or restrict use of the Scotty self-update command in production and install new versions manually from a trusted source, accepting the operational cost of losing automated upgrades; additionally pin and verify artifact hashes out-of-band before deployment, restrict which operator accounts may invoke the updater (the flaw still requires a user-triggered update), and protect release-channel credentials - scope the GitHub token, enforce MFA, and monitor release assets for unauthorized modification - since exploitation depends on the ability to substitute the distributed phar or intercept its delivery (plain on-path tampering is impractical over HTTPS without breaking TLS). Detailed advisory information is available at https://vuldb.com/vuln/407451 and https://github.com/spatie/scotty/issues/21.

Affected VersionsENISA

Scotty 1.4.0
Scotty 1.4.1
Scotty 1.4.2

Affected Packages

euvd scotty no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw is an instance of CWE-494 (Download of Code Without Integrity Check) in a self-updating PHP CLI application. Scotty ships as a PHAR archive; the SelfUpdater component retrieves a new phar for a requested version and commits it over the current installation, and prior to 1.4.3 it never verified that the downloaded artifact actually came from Spatie. The upstream fix commit 4b4e11bfc98e3a2159bb2b3d9b040293fcc44744 introduces an ed25519 (libsodium) signing pipeline: a ReleaseSigningKey class holds the base64-encoded public key baked into each build, a SignatureVerifier verifies a detached signature over the message formed by SignatureVerifier::signedMessage($version, $pharContents), and the build workflow signs each phar and publishes a companion .sig file (the updater now also fetches "{$downloadUrl}.sig"). The private key is held in the SCOTTY_RELEASE_SIGNING_KEY repository secret, and the signing script refuses to publish a phar that cannot be verified against the embedded public key, so a key mismatch fails the release rather than shipping an uninstallable artifact. The CPE string cpe:2.3:a:spatie:scotty:*:*:*:*:*:*:*:* is a wildcard vendor/product entry for the spatie Scotty package; per the advisory, the affected range is through 1.4.2 and the fixed build is 1.4.3.

Know when Scotty gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulDB) PRIMARY 5.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N
vuln.today AI 7.5 HIGH

Successful phar substitution yields arbitrary code execution (C:H/I:H/A:H); AC:H because it requires compromising the release channel or MITM, UI:R because an operator must run the self-update.

3.1 AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H
4.0 AV:N/AC:H/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
Low
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

A vulnerability was identified in spatie Scotty up to 1.4.2. Affected is the function SelfUpdater::update of the file app/Updater/SelfUpdater.php of the component Self Update Handler. Such manipulation leads to download of code without integrity check. It is possible to launch the attack remotely. Upgrading to version 1.4.3 is able to address this issue. The name of the patch is 4b4e11bfc98e3a2159bb2b3d9b040293fcc44744. It is advisable to upgrade the affected component.

Threat Intelligence Overview

EPSS Score
0.2%
Top 90% exploitable
Prevalence
Low
niche spatie self-updating phar CLI tool, small production footprint
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy