T03 · Remote Payload Retrieval and Execution
- Location
app/installer.sh:34- Finding
Unpinned Remote Payload Installation with Persistent System Services
- Content
View full analysis
/dev/null; then wget -q https://github.com/fumabot16-max/project-bill/archive/refs/heads/master.zip -O master.zip elif command -v curl &> /dev/null; then curl -fsSL https://github.com/fumabot16-max/project-bill/archive/refs/heads/master.zip -o master.zip else echo "❌ Error: wget or curl required" exit 1 fi # 3. Extract echo "📦 Extracting..." unzip -q master.zip mv project-bill-master/* . mv project-bill-master/.* . 2>/dev/null || true rm -rf project-bill-master master.zip # 4. Install dependencies echo "📦 Installing dependencies..." npm install --silent ``` ```bash if command -v systemctl &> /dev/null; then # Linux with systemd sudo cp systemd/*.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable ai-bill ai-bill-collector sudo systemctl start ai-bill ai-bill-collector ``` The installer also explicitly promotes execution through a shell pipeline: ```bash # Usage: curl -fsSL [URL] | bash ``` ### Technical Analysis The installer downloads the mutable `master` branch of a personal GitHub repository without pinning a commit, checking a cryptographic digest, or verifying a signature. The downloaded archive is extracted into the Skill directory and followed by `npm install`, which can execute package lifecycle scripts contained in the remotely supplied package. The same remotely supplied repository is expected to contain systemd unit files. Those files are copied with `sudo` into `/etc/systemd/system`, enabled at startup, and started. This creates a direct path from ...[truncated 1757 chars]- Remediation
View remediation
