T03 · Remote Payload Retrieval and Execution
- Location
README.md:15- Finding
Mutable Remote Installer Downloads and Executes a Privileged External CLI
- Content
View full analysis
Vulnerability Details
File Location:
README.md:15-25; related binary installation configuration atSKILL.md:8-24
Vulnerability Type: Remote payload retrieval and execution
Risk Level: MediumVulnerable Code
powershell # Step 1: Download the installation script locally $scriptPath = "$env:TEMP\install_dws.ps1" Invoke-WebRequest -Uri "https://raw.githubusercontent.com/DingTalk-Real-AI/dingtalk-workspace-cli/main/scripts/install.ps1" -OutFile $scriptPath -UseBasicParsing # Step 2: Open and inspect it notepad $scriptPath # Step 3: Execute it after deciding that it is trustworthy & $scriptPathThe Skill also declares a precompiled executable as a required dependency:
yaml requires: bins: - dws env: - DWS_CLIENT_ID - DWS_CLIENT_SECRET - DWS_CONFIG_DIR - DWS_SERVERS_URL install: - kind: url url: https://github.com/DingTalk-Real-AI/dingtalk-workspace-cli/releases/download/v1.0.8/dws-windows-amd64.zip bins: - dws.exe verify: sha256: 7dc4e568b1386423784e6baf17fe675c11eb6c075bd887dcb0ede53cdded85e8Technical Analysis
The documented installation process downloads PowerShell code from the mutable
mainbranch of an external GitHub repository and subsequently executes it. Although the README tells the user to inspect the file first, this is a manual control and does not cryptographically bind execution to the version reviewed during this audit.The installed
dwsexecutable is the central implementation of the Skill and is not included in the audited package. It is expected to receive OAuth state or application credentials and perform operations across contacts, calendars, chat, attendance, reports, approvals, todos, and AI tables. Consequently, compromise of the remote repository, its release account, or its installation script could change the effective payload after this Skill has been reviewed.The ...[truncated 1784 chars]
- Remediation
View remediation
Remediation Suggestions
- Pin the PowerShell installer URL to an immutable Git commit rather than the
mainbranch. - Publish a SHA-256 digest and a cryptographic signature for the installer, and verify both before execution.
- Make verification mandatory and fail closed if the digest or signature does not match.
- Pin every documented download to a specific release artifact; do not direct users to
releases/latestfor security-sensitive installation. - Publish the CLI source, reproducible-build instructions, signed checksums, and provenance attestations so the executable can be independently verified.
- Vendor or include the exact reviewed installer source in the Skill package.
- Request only the DingTalk scopes required for each operation and separate read-only from mutating capabilities where possible.
- Align the Skill version,
_meta.jsonversion, downloaded CLI version, and documentation to prevent ambiguity about which component was reviewed.
- Pin the PowerShell installer URL to an immutable Git commit rather than the
