T08 · Insecure Dependencies
- Location
references/setup.md:14- Finding
Mutable Beta Dependency Is Installed Globally with Lifecycle Scripts Enabled
- Content
View full analysis
Vulnerability Details
File Location:
references/setup.md:11-15
Vulnerability Type: Unpinned third-party dependency installation
Risk Level: MediumVulnerable Code
bash The npm beta is suitable for its published tool contract: npm install --global @pascal-app/cli@beta pascal editor --no-openTechnical Analysis
The setup workflow installs
@pascal-app/clithrough the mutable npm distribution tagbeta. Distribution tags can be moved to a different package version after this Skill has been reviewed, so the code ultimately installed is not fixed by the audited repository.The installation command also leaves npm lifecycle scripts enabled. If the package, publisher account, or release process is compromised, lifecycle scripts can execute during installation. The resulting globally available
pascalexecutable is then explicitly invoked.Although the documentation later states which version the tag currently resolves to, that statement does not constrain npm resolution at installation time and does not verify package integrity.
Attack Path
- An attacker compromises the npm publisher account, package release process, or another mechanism capable of modifying the
betadistribution tag. - The attacker publishes a malicious release or redirects
betato a compromised version. - A user follows the documented command, causing npm to resolve the mutable tag at that time.
- Malicious lifecycle scripts can execute during installation with the invoking user's privileges.
- The user subsequently runs
pascal editor --no-open, allowing a replaced CLI to execute again and access resources available to that user.
Impact Assessment
Successful exploitation can provide code execution with the privileges of the user running npm. Depending on that user's environment, the malicious package could access local Pascal project data, user-readable files, environment variables, MCP configur ...[truncated 301 chars]
- An attacker compromises the npm publisher account, package release process, or another mechanism capable of modifying the
- Remediation
View remediation
Remediation Suggestions
- Replace the mutable tag with an exact, reviewed package version:
bash npm install --global --ignore-scripts @pascal-app/cli@1.0.0-beta.1 - Use
--ignore-scriptsif the reviewed CLI does not require installation lifecycle scripts. - Publish and verify a cryptographic integrity value or signed provenance for the exact package artifact.
- Avoid privileged installation. Prefer a user-owned installation prefix or a project-scoped, locked dependency.
- Document upgrades as a separate review process rather than silently following changes to a distribution tag.
- Verify the installed version before execution and fail closed if it differs from the reviewed version.
- Replace the mutable tag with an exact, reviewed package version:
