T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:95- Finding
Unverified Remote Docker Installation Script Executed Directly by a Privileged Shell
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This self-hosting guide is mostly coherent, but it includes high-impact infrastructure commands that deserve review before an agent follows them.
Install only if you want an agent to provide self-hosting and homelab administration guidance. Before running any generated commands, review them manually, avoid curl-to-shell installers, prefer HTTPS and signed repositories, preview package upgrades, pin container images, and be especially careful with Watchtower or any container that receives Docker socket access.
SKILL.md:95Unverified Remote Docker Installation Script Executed Directly by a Privileged Shell
SKILL.md:87System Package Repository Configured over Plaintext HTTP
curl ... | sh is particularly dangerous because it combines network retrieval and immediate shell execution, eliminating any review or verification step. If the remote endpoint, transport, DNS, or upstream supply chain is compromised, arbitrary commands run with the privileges of the user executing the command, which in this setup is likely root inside a container or host environment.
# Create CT: 2 cores, 2GB RAM, 32GB disk, bridge vmbr0
# Inside CT: install Docker
apt install -y curl
curl -fsSL https://get.docker.com | sh
# 3. Enable IOMMU for GPU passthrough (if needed)
# Edit /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
/opt/stacks/ # or ~/docker/
├── traefik/
│ ├── docker-compose.yml
│ ├── .env
│ ├── config/
│ │ └── traefik.yml
│ └── data/
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
/opt/stacks/ # or ~/docker/
├── traefik/
│ ├── docker-compose.yml
│ ├── .env
│ ├── config/
│ │ └── traefik.yml
│ └── data/
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
/opt/stacks/ # or ~/docker/
├── traefik/
│ ├── docker-compose.yml
│ ├── .env
│ ├── config/
│ │ └── traefik.yml
│ └── data/
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
/opt/stacks/ # or ~/docker/
├── traefik/
│ ├── docker-compose.yml
│ ├── .env
│ ├── config/
│ │ └── traefik.yml
│ └── data/
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
/opt/stacks/ # or ~/docker/
├── traefik/
│ ├── docker-compose.yml
│ ├── .env
│ ├── config/
│ │ └── traefik.yml
│ └── data/
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
/opt/stacks/ # or ~/docker/
├── traefik/
│ ├── docker-compose.yml
│ ├── .env
│ ├── config/
│ │ └── traefik.yml
│ └── data/
Mounting /var/run/docker.sock into a container gives that container effective control over the Docker daemon, which typically equates to root-level control of the host. In this skill, the socket is given to Watchtower for convenience, but if that container or its supply chain is compromised an attacker can start privileged containers, mount the host filesystem, or execute arbitrary code on the server.
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_SCHEDULE=0 0 4 * * MON # Monday 4 AM
- WATCHTOWER_CLEANUP=true
The manifest description defines an expansive scope covering many common infrastructure and backup activities, making accidental invocation more likely. In an agent ecosystem, ambiguous activation can route sensitive system-administration conversations into a skill that contains privileged commands and deployment steps the user may not have intended to invoke.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
│ ├── config/
│ │ └── traefik.yml
│ └── data/
│ ├── acme.json # chmod 600
│ └── dynamic/
├── monitoring/
│ ├── docker-compose.yml
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
log "Backup complete. Total size: $BACKUP_SIZE"
### Backup Schedule
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
# 2. Install fail2ban
apt install fail2ban -y
systemctl enable fail2ban
# 3. Automatic security updates
apt install unattended-upgrades -y
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
dpkg-reconfigure -plow unattended-upgrades
systemctl list-unit-files --state=enabled
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
├── Is the port exposed? (docker port <name>) → No → Check compose ports/networks
├── Is Traefik routing? (Check Traefik dashboard) → No → Check labels, network
├── Is DNS resolving? (dig app.example.com) → No → Check DNS provider
└── SSL error? → Check acme.json permissions (chmod 600), cert resolver logs
### Docker Debug Commands
These configuration examples impose a specific language and locale in natural-language-facing settings, which can conflict with organizational language/locale choice policies when presented as defaults in a skill. The file does not indicate that these are merely placeholders to be replaced based on user preference or region.
The trigger phrases are very broad and overlap with common administrator requests, so the skill may activate in many contexts where the user did not explicitly ask for this skill. Over-broad activation increases the chance of unrequested operational guidance being injected into unrelated workflows, which is a prompt-scope security and safety issue for agent systems.
Fetching and executing a remote installation script from get.docker.com creates a supply-chain risk because the script is not reviewed, pinned, or integrity-verified before execution. In a self-hosting skill aimed at production-grade reliability, this is more dangerous because users may run it as root on fresh infrastructure, making host compromise or unintended configuration changes high impact.
# Download template: Datacenter → Storage → CT Templates → Download → debian-12
# Create CT: 2 cores, 2GB RAM, 32GB disk, bridge vmbr0
# Inside CT: install Docker
apt install -y curl
curl -fsSL https://get.docker.com | sh
# 3. Enable IOMMU for GPU passthrough (if needed)
No suspicious patterns detected.