CVE-2026-110649
9.8CriticalPublished 14 Oct 2026 · NVD status: Deferred · AI triage by gemini-3.8-flash
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
- Impact
- Full C/I/A compromise
- Weakness
- CWE-78
Impact
Remote unauthenticated attackers can execute arbitrary OS commands with Node.js process privileges. They just need to provide a crafted media filename containing shell substitution syntax.
Root cause
Media file paths are concatenated directly into shell executions for ffmpeg, ffprobe, gifsicle, or convert without sanitization.
Affected systems
Stills before 25.24.2
CVSS v3.1 · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Fix & remediation
Upgrade Stills to version 25.24.2 or higher. As an interim workaround, sanitize incoming filenames to strip or reject characters like '$', '`', and parenthesis before passing them to the application.
$ npm install stills@^25.24.2AI-suggested. Run it in staging first and check it against the vendor advisory. Why?
NVD description
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.
References
- https://github.com/shahkashani/stills/blob/66d5def1265b817d84524473a2813e4781dcbd80/lib/content/video.js#L58-L60
- https://github.com/shahkashani/stills/blob/66d5def1265b817d84524473a2813e4781dcbd80/lib/stills/frames.js#L106-L108
- https://github.com/shahkashani/stills/commit/51ba953983ba99915331607bf8530e6089952253
- https://github.com/shahkashani/stills/commit/5694b3b0dcd2da342f4f0497244129d4c9eb73bc
- https://github.com/shahkashani/stills/pull/29
- https://github.com/shahkashani/stills/pull/30
- https://www.vulncheck.com/advisories/stills-before-25.24.2-os-command-injection-via-media-file-names