Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft malicious datapackage.json with shell metacharacters in resource path
-
DeliveryDeliver package to victim (share/publish/repo)
-
ExploitVictim runs 'frictionless explore' on untrusted package
-
ExecutionMetacharacters passed to os.system via shell
-
ImpactArbitrary commands execute in victim's security context
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 the victim to run the |
| Impact | This is a genuine, actionable priority within its deployment niche, though tempered by a required-user-interaction gate. The CVSS 4.0 vector (8.6) shows AV:N/AC:L/PR:N with full VC:H/VI:H/VA:H impact - arbitrary command execution in the victim's security context - but critically carries UI:A (Active user interaction required): a victim must actually run |
| Exploit ScenarioDerived | An attacker publishes or shares a malicious Data Package whose datapackage.json embeds shell metacharacters (e.g., a resource path like |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 23, 2026
OS command injection in the frictionless-py framework through 5.20.0rc1 lets unauthenticated remote attackers execute arbitrary operating system commands in the victim's security context when the victim runs the frictionless explore console command against an attacker-supplied Data Package. The flaw is reachable because resource path values from an untrusted datapackage.json are concatenated unsanitized into a shell invocation (vd {paths} via os.system), so shell metacharacters placed in a path are interpreted by the shell rather than treated as a filename. Exploitation requires victim interaction (CVSS UI:A) - the user must deliberately explore the malicious package - and publicly available exploit code exists, including a proof-of-concept repository; there is no data provided indicating confirmed active exploitation, and the assessed CVSS:3.1 vector is AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H (vendor CVSS:4.0 8.6, PR:N/UI:A), so impact is high on confidentiality, integrity and availability of the user's environment but gate-controlled by the social-engineering step.
RemediationAI
Vendor fix: upstream PR/commit available (https://github.com/frictionlessdata/frictionless-py/pull/1820), which replaces the shell-based os.system(f"vd {paths}") call with subprocess.run(["vd", *paths], check=False); the released patched version is not independently confirmed from the supplied data, so update to the first frictionless-py release that includes this change (anything strictly newer than 5.20.0rc1) and, until then, backport the one-line subprocess change locally or vendor-patch the installed package. Compensating controls, with trade-offs: never run frictionless explore against a Data Package from an untrusted or third-party source - inspect datapackage.json and reject or rename any resource path containing characters such as ;, &, |, backticks, $, newlines or quotes, though this is a manual, error-prone gate that a supply-chain update can bypass; run the command in a disposable container, VM or low-privilege account with no credentials, network access or writable sensitive mounts, which limits post-exploitation reach but does not fix the injection; and if VisiData is unnecessary, remove the vd binary or invoke the CLI without the explore subcommand so the vulnerable path is unreachable, at the cost of losing that visualization feature. Operators should also treat any pipeline that auto-fetches and explores third-party Data Packages as a supply-chain delivery vector and add descriptor-path validation ahead of automation. Advisory: https://www.vulncheck.com/advisories/frictionless-os-command-injection-via-explore-console-command; exploit context: https://github.com/SaiTeja-Erukude/CVE-2026-93349-frictionless-command-injection.
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
frictionless-py is a Python data-validation and Data Package framework; its command line interface includes an explore subcommand that shells out to the VisiData interactive viewer (vd) to display tabular resources referenced by a Data Package descriptor. The root cause is CWE-78 (Improper Neutralization of Special Elements used in an OS Command): the explore implementation collected resource paths and executed os.system(f"vd {' '.join(paths)}"), passing attacker-influenceable strings through a shell. Any shell metacharacter (e.g. ;, &&, |, backticks, $()) embedded in a resource path inside datapackage.json is therefore reinterpreted as command syntax when the descriptor is explored. The vulnerability class is injected-command execution in the invoking user's process, and there is no authentication or privilege prerequisite in the vector (PR:N); the only barrier is the user interaction of exploring an untrusted package (UI:A) and the availability of the vd executable, which is installed with VisiData. The upstream remedy in pull request #1820 replaces os.system with subprocess.run(["vd", *paths], check=False), which removes the shell entirely so metacharacters remain literal argument data; the accompanying test asserts that a path such as table;echo injected.csv is handed to vd as a single argument.
Know when Frictionless Py 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:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Package is delivered over the network (AV:N) and needs no privileges (PR:N), but the victim must run explore on it (UI:R); command execution yields full C/I/A impact within the user's context (S:U).
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Frictionless through 5.20.0rc1 contains an OS command injection vulnerability in the explore console command that allows an attacker who supplies a crafted Data Package descriptor to execute arbitrary operating system commands as the user who explores it. Attackers can place shell metacharacters in resource path values within a datapackage.json descriptor, which are passed unsanitized to os.system through a shell, causing arbitrary command execution in the victim's security context when they run the explore command against the untrusted package.
Technical POC Analysis
CWE-78 (OS command injection), with CWE-20 (improper input validation) also assigned by the reporter.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Latest POC
1 public PoC link from github
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
The frictionless-py data validation framework (all versions through 5.20.0rc1) contains a high-severity command injection flaw, CVE-2026-93349, that lets an attacker execute arbitrary operating system commands on any machine where a user opens an untrusted Data Package with the frictionless explore command. Because the code is widely embedded in data-engineering pipelines, CI/CD jobs, and analyst workstations, a single malicious datapackage.json obtained from a third party can compromise the credentials, data, and integrity of that user's environment. No vendor patch is available and publicly available exploit code exists, making this an active supply-chain exposure that requires immediate operational restrictions.
No vendor-released patch identified at time of analysis. Interim mitigations: prohibit running frictionless explore against externally sourced Data Packages; block or quarantine untrusted datapackage.json files at the network and repository boundary; execute any required processing in a disposable, least-privilege sandbox (container/VM with no host mounts, no stored credentials, restricted egress); remove frictionless-py from build agents and pipelines that do not require it; validate or rewrite resource path values so they cannot contain shell metacharacters before use; deploy application allowlisting and host-based monitoring to alert on shell or vd process execution spawned by Python; and audit logs for prior exploitation attempts.
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-85420
GHSA-4jpg-jrw7-h58p
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB