registry  /  rpi-deploy  /  0.12.0

rpi-deploy@0.12.0

Deployment tool for Docker Compose projects on Raspberry Pi. Builds the Rust CLI from source on install.

Static Scan Results

scanned 2h ago · by rust-scanner

Static analysis flagged 14 finding(s) at 72.0% confidence. This version is warn-only unless an AI or security-team review confirms malicious behavior.

Static reason
One or more suspicious static signals were detected.

Decision evidence

public snapshot
Behavioral surface
Source
ChildProcessCryptoEnvironmentVarsFilesystemNetwork
Supply chain
HighEntropyStringsUrlStrings
ManifestNo manifest risk signals triggered.
scanned 3 file(s), 10.4 KB of source, external domains: github.com, rustup.rs, sh.rustup.rs, win.rustup.rs

Source & flagged code

6 flagged · loading source
package.jsonView file
scripts.postinstall = node scripts/postinstall.js
High
Install Time Lifecycle Scripts

Package defines install-time lifecycle scripts.

package.jsonView on unpkg
scripts.postinstall = node scripts/postinstall.js
Medium
Ambiguous Install Lifecycle Script

Install-time lifecycle script is not statically allowlisted and needs review.

package.jsonView on unpkg
bin/rpi.jsView file
5L6: const { spawnSync } = require('node:child_process'); L7: const fs = require('node:fs');
High
Child Process

Package source references child process execution.

bin/rpi.jsView on unpkg · L5
scripts/postinstall.jsView file
8L9: const { spawnSync } = require('node:child_process'); L10: const fs = require('node:fs'); ... L13: L14: const pkgDir = path.resolve(__dirname, '..'); L15: const exe = process.platform === 'win32' ? '.exe' : ''; L16: const cargoBinDir = path.join(os.homedir(), '.cargo', 'bin'); ... L52: async function fetchTo(url, dest) { L53: const res = await fetch(url, { redirect: 'follow' }); L54: if (!res.ok) throw new Error(`download ${url}: HTTP ${res.status}`); L55: fs.writeFileSync(dest, Buffer.from(await res.arrayBuffer())); L56: }
High
Sandbox Evasion Gated Capability

Source gates dangerous network, credential, or execution behavior behind CI, host, platform, time, or geo fingerprint checks.

scripts/postinstall.jsView on unpkg · L8
8L9: const { spawnSync } = require('node:child_process'); L10: const fs = require('node:fs'); ... L13: L14: const pkgDir = path.resolve(__dirname, '..'); L15: const exe = process.platform === 'win32' ? '.exe' : ''; L16: const cargoBinDir = path.join(os.homedir(), '.cargo', 'bin'); ... L52: async function fetchTo(url, dest) { L53: const res = await fetch(url, { redirect: 'follow' }); L54: if (!res.ok) throw new Error(`download ${url}: HTTP ${res.status}`); L55: fs.writeFileSync(dest, Buffer.from(await res.arrayBuffer())); L56: }
High
Install Named Payload File

Install-named source file stages remote content through filesystem writes and execution.

scripts/postinstall.jsView on unpkg · L8
152fs.writeFileSync(tmp, Buffer.from(await res.arrayBuffer())); L153: const r = spawnSync(tmp, ['-y'], { stdio: 'inherit' }); L154: if (r.status !== 0) fail('rustup-init failed'); ... L156: if (!which('curl')) { L157: fail('curl is required to install rustup; install curl, then rerun: npm install -g rpi-deploy'); L158: }
High
Runtime Package Install

Package source invokes a package manager install command at runtime.

scripts/postinstall.jsView on unpkg · L152

Findings

5 High4 Medium5 Low
HighInstall Time Lifecycle Scriptspackage.json
HighChild Processbin/rpi.js
HighSandbox Evasion Gated Capabilityscripts/postinstall.js
HighInstall Named Payload Filescripts/postinstall.js
HighRuntime Package Installscripts/postinstall.js
MediumAmbiguous Install Lifecycle Scriptpackage.json
MediumNetwork
MediumEnvironment Vars
MediumStructural Risk Force Deep Review
LowNon Install Lifecycle Scripts
LowScripts Present
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings