Summary
A high-severity OS command injection vulnerability in pbi-cli can cause attacker-controlled project paths to be interpreted as command-line syntax when projects are reopened.
If a victim opens a Power BI project from a specially prepared local path, commands may execute with the victim's operating-system privileges during report writing or reloading.
A high-severity OS command injection vulnerability in pbi-cli can cause attacker-controlled project paths to be interpreted as command-line syntax when projects are reopened.
If a victim opens a Power BI project from a specially prepared local path, commands may execute with the victim's operating-system privileges during report writing or reloading.
Affected context
The vulnerability occurs in the desktop synchronization workflow that reopens Power BI projects through cmd /c start. It affects environments where project paths can be influenced by an attacker and are passed to the command interpreter without reliable quoting or argument isolation. Exploitation generally depends on a victim opening a project from a prepared local location.
The vulnerability occurs in the desktop synchronization workflow that reopens Power BI projects through cmd /c start. It affects environments where project paths can be influenced by an attacker and are passed to the command interpreter without reliable quoting or argument isolation. Exploitation generally depends on a victim opening a project from a prepared local location.
Exploit preconditions
- Attack surface: Local desktop project-opening and synchronization workflow
- Required access: Ability to provide or influence a Power BI project path and persuade a victim to open it
- Trigger point: Reopening a project during report writing or reload operations
- Why exploitation is possible: An unquoted path is passed to
cmd /c start, allowing command-interpreted path characters to alter execution behavior
- Attack surface: Local desktop project-opening and synchronization workflow
- Required access: Ability to provide or influence a Power BI project path and persuade a victim to open it
- Trigger point: Reopening a project during report writing or reload operations
- Why exploitation is possible: An unquoted path is passed to
cmd /c start, allowing command-interpreted path characters to alter execution behavior
Why this happens
The underlying bug is an OS command injection caused by placing an untrusted filesystem path into a command-interpreter invocation without robust quoting or argument separation.
Special characters in the path can be interpreted as command syntax rather than literal filename content. This maps to CWE-78: Improper Neutralization of Special Elements used in an OS Command, because externally influenced data reaches an operating-system command without sufficient neutralization.
The underlying bug is an OS command injection caused by placing an untrusted filesystem path into a command-interpreter invocation without robust quoting or argument separation.
Special characters in the path can be interpreted as command syntax rather than literal filename content. This maps to CWE-78: Improper Neutralization of Special Elements used in an OS Command, because externally influenced data reaches an operating-system command without sufficient neutralization.
Potential impact
- Arbitrary commands may execute with the victim's privileges
- Local files and project data could be read, modified, or deleted
- Credentials, tokens, or other user-accessible secrets could be exposed
- The compromised workstation could be used for persistence or lateral movement
- Reports or project content could be altered or corrupted
- Arbitrary commands may execute with the victim's privileges
- Local files and project data could be read, modified, or deleted
- Credentials, tokens, or other user-accessible secrets could be exposed
- The compromised workstation could be used for persistence or lateral movement
- Reports or project content could be altered or corrupted
General mitigation guidance
Mitigation generally focuses on avoiding command interpreters for routine process launching and treating project paths as untrusted data.
Common defensive patterns include:
- Use direct process-launch APIs that pass executable names and arguments separately
- Apply strict path validation and canonicalization before opening projects
- Preserve paths as data rather than concatenating them into shell command strings
- Restrict project-opening workflows to trusted directories and controlled file sources
- Run desktop components with least privilege and avoid unnecessary access to sensitive resources
- Add security tests covering paths with spaces, metacharacters, and unexpected separators
Mitigation generally focuses on avoiding command interpreters for routine process launching and treating project paths as untrusted data.
Common defensive patterns include:
- Use direct process-launch APIs that pass executable names and arguments separately
- Apply strict path validation and canonicalization before opening projects
- Preserve paths as data rather than concatenating them into shell command strings
- Restrict project-opening workflows to trusted directories and controlled file sources
- Run desktop components with least privilege and avoid unnecessary access to sensitive resources
- Add security tests covering paths with spaces, metacharacters, and unexpected separators
How teams detect issues like this
Detection can include static analysis for command-interpreter calls that concatenate or interpolate filesystem paths, especially uses of cmd /c, shell-enabled process APIs, or string-built command lines.
Code review should flag unquoted path variables, implicit shell execution, and project-opening logic that accepts attacker-influenced locations. CI policies can require argument-separated process APIs, validated path handling, and regression tests for command-injection metacharacters. Automated code-scanning and dependency-review tools may help identify related patterns.
Detection can include static analysis for command-interpreter calls that concatenate or interpolate filesystem paths, especially uses of cmd /c, shell-enabled process APIs, or string-built command lines.
Code review should flag unquoted path variables, implicit shell execution, and project-opening logic that accepts attacker-influenced locations. CI policies can require argument-separated process APIs, validated path handling, and regression tests for command-injection metacharacters. Automated code-scanning and dependency-review tools may help identify related patterns.

