Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply media file with crafted name
-
DeliveryApplication passes path to Stills
-
ExploitStills builds quoted shell command
-
Executionffmpeg/ffprobe/convert executes $(...)
-
ImpactArbitrary commands run as Node.js process
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK
2 techniques across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires that the application embedding Stills pass an attacker-influenced media file name or path into the library's processing routines (e.g. lib/content/video.js and lib/content/utils.js, which shelled out to ffmpeg/ffprobe), and that ffmpeg, ffprobe, gifsicle, or convert be invoked on that path. The exact trigger is a filename containing shell command-substitution syntax ($(...) or backticks); double-quoting in the pre-25.24.2 code did not neutralize it. Limiting factors: exploitation is only remote/unauthenticated if the consuming application exposes filename control to untrusted users - in deployments where file names are operator- or system-generated, an external attacker cannot reach the sink, so realistic risk is substantially lower than the raw score suggests. |
| Impact | The provided CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H = 9.3) describes an unauthenticated, low-complexity attack yielding full command execution, and the source-code evidence from the vendor's own patch (PRs #29/#30) confirms the root cause: filenames were interpolated into double-quoted shell strings passed to ffmpeg/ffprobe/gifsicle/convert, where $(...) and backticks still trigger command substitution. However, the 'network/unauthenticated' framing is optimistic for a Node.js media-processing LIBRARY: real exploitability hinges entirely on whether the CONSUMING application lets an attacker control media file names/paths - a signal the CVE data does not establish. No EPSS score, no CISA KEV listing, and no public PoC are present in the input, so this is a high-CVSS issue with no evidence of real-world exploitation at time of analysis. Net: a genuine, easily-triggered RCE primitive where the file path is attacker-influenced, but the raw 9.3 overstates risk for the common case where filenames are operator- or application-controlled rather than externally supplied. |
| Exploit ScenarioDerived | An application built on the Stills library accepts or derives media file names from untrusted input and asks Stills to process them. An attacker supplies a file named something like |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
OS command injection in Stills (shahkashani/stills), a Node.js media-processing library, before version 25.24.2 allows crafted media file names containing shell command-substitution syntax such as $(...) or backticks to be executed as operating system commands with the privileges of the Node.js process. The flaw is reachable whenever the library shells out to ffmpeg, ffprobe, gifsicle, or convert on an attacker-influenced path, and the CVSS 4.0 vector (9.3) describes an unauthenticated, low-complexity network attack (PR:N/UI:N) yielding high confidentiality, integrity, and availability impact; our independent assessment scores it CVSS:3.1 8.8/9.8-class (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) but cautions that real-world risk is materially lower in deployments where media file names are operator- or system-generated rather than user-supplied. No public exploit code or confirmed active exploitation was identified at time of analysis, and a vendor patch (25.24.2, via PRs #29/#30 and associated commits) is available.
RemediationAI
Upgrade to Stills 25.24.2 or later, which is the vendor-released fix; the patch is delivered through pull requests https://github.com/shahkashani/stills/pull/29 and https://github.com/shahkashani/stills/pull/30 (commits 5694b3b0dcd2da342f4f0497244129d4c9eb73bc and 51ba953983ba99915331607bf8530e6089952253) and replaces shell-string interpolation with shell-free execFileSync argument arrays so filenames are never evaluated as shell syntax. If immediate upgrade is not possible, the most effective compensating control is to prevent untrusted control of media filenames: have the consuming application rename or assign its own generated identifiers to uploaded media before passing paths into Stills, since double-quoting alone does not neutralize $(...) or backticks - the trade-off is added storage/renaming logic and loss of original filename metadata. As a secondary layer, migrate the vulnerable call sites to child_process.execFile/execFileSync locally and disable or sandbox any use of the shelljs-based exec path; containers or seccomp/AppArmor confinement that deny shell spawns and limit outbound network access reduce post-exploitation impact but do not remove the injection sink and may break legitimate ffmpeg/gifsicle invocation patterns. Consult the VulnCheck advisory (https://www.vulncheck.com/advisories/stills-before-25.24.2-os-command-injection-via-media-file-names) for vendor guidance.
Affected VersionsENISA
Affected Packages
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 root cause is CWE-78 (Improper Neutralization of Special Elements used in an OS Command), arising from Node.js code that built shell command strings by interpolating a media file path directly into a double-quoted argument, e.g. ffprobe -v error -show_entries format=duration ... "${file}" in lib/content/utils.js and ffmpeg -i "${input}" -ss ... -c copy -y "${file}" in lib/content/video.js, executed through a shell (shelljs / child_process exec). Double quotes prevent word-splitting but do not suppress command substitution, so a filename containing $(...) or ... is evaluated by the shell before ffmpeg/ffprobe/gifsicle/convert ever sees it. The affected package is identified by CPE cpe:2.3:a:shahkashani:stills:*:*:*:*:*:*:*:* (Stills, all versions prior to 25.24.2). The vendor fix in PRs #29/#30 replaces shell-based invocation with argument-array invocation using child_process.execFileSync (a shell-free API where each argument is passed literally), covering lib/content/utils.js, lib/content/video.js, lib/utils/exec-cmd.js, and lib/utils/get-image-info.js, so a filename can no longer be interpreted as shell syntax. Because the sink lives inside a library rather than an end-user application, exploitability is contingent on the consuming application exposing media filename control to untrusted input.
Know when Stills 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Command execution with full C/I/A at Node.js process privilege and S:U; AV:N/PR:N retained per input but genuinely depends on the host app exposing attacker-controlled filenames.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Stills before 25.24.2 contains an OS command injection vulnerability that allows attackers to execute shell commands by supplying crafted media file paths. Attackers can name a media file with $(...) or backticks to execute operating system commands with Node.js process privileges when ffmpeg, ffprobe, gifsicle, or convert runs.
Executive ViewAI
A critical command-injection flaw in the Stills media-processing library (shahkashani/stills) lets an unauthenticated attacker execute operating-system commands with the full privileges of the Node.js process that loads it, affecting any service that hands attacker-influenced media file names to the library. For leadership, the concern is not a media glitch but potential full compromise of the application host - data theft, tampering, and outage - wherever this library sits in a customer-facing or internet-reachable path. Exposure is materially lower for teams whose media file names are internally generated rather than supplied by users, so prioritization should follow that distinction.
Apply vendor patch.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
EUVD-2026-101277
GHSA-53p6-95m7-9c4h
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB