T08 · Insecure Dependencies
Error
- Location
- SKILL.md:81
- Finding
- Mutable and Unverified Container Images Create a Supply-Chain Risk## Vulnerability Details **File Location**: `SKILL.md:81-86`, `SKILL.md:99-107`, `SKILL.md:121-134`, `SKILL.md:135-171` **Vulnerability Type**: Unpinned and partly unofficial container dependencies **Risk Level**: High ### Vulnerable Code ```bash docker run -d \ --name grass-node \ --restart unless-stopped \ -e GRASS_USER=your@email.com \ -e GRASS_PASS=yourpassword \ mrcolorrain/grass:latest ``` ```bash docker run -d \ --name mysterium-node \ --restart unless-stopped \ --cap-add NET_ADMIN \ -p 4449:4449 \ -v ~/.mysterium:/root/.mysterium \ mysteriumnetwork/myst:latest \ service --agreed-terms-and-conditions ``` ```bash docker run -d \ --name storj-node \ --restart unless-stopped \ -p 28967:28967 \ -p 14002:14002 \ -e WALLET="0xYOUR_ETH_WALLET" \ -e EMAIL="your@email.com" \ -e ADDRESS="YOUR_PUBLIC_IP:28967" \ -e STORAGE="500GB" \ -v /path/to/storj/data:/app/identity \ -v /path/to/storj/storage:/app/config \ storjlabs/storagenode:latest ``` ```yaml services: grass: image: mrcolorrain/grass:latest container_name: grass-node restart: unless-stopped environment: - GRASS_USER=${GRASS_EMAIL} - GRASS_PASS=${GRASS_PASSWORD} mysterium: image: mysteriumnetwork/myst:latest container_name: mysterium-node restart: unless-stopped cap_add: - NET_ADMIN ports: - "4449:4449" volumes: - mysterium_data:/root/.mysterium command: service --agreed-terms-and-conditions honeygain: image: honeygain/honeygain:latest container_name: honeygain-node restart: unless-stopped environment: - HONEYGAIN_EMAIL=${HONEYGAIN_EMAIL} - HONEYGAIN_PASS=${HONEYGAIN_PASSWORD} - HONEYGAIN_DEVICE=homelab-01 ``` ### Technical Analysis All documented container images use the mutable `latest` tag rather than i ...[truncated 2294 chars]
- Remediation
- ## Remediation Suggestions 1. Replace every `latest` reference with a reviewed version and immutable SHA-256 digest, for example: ```yaml image: vendor/image:reviewed-version@sha256:EXPECTED_DIGEST ``` 2. Confirm each image against the platform vendor's official documentation and registry namespace. 3. Do not recommend the personal-namespace Grass image until its source repository, Dockerfile, build pipeline, ownership, and resulting digest have been independently verified. 4. Verify image signatures with a mechanism such as Sigstore Cosign and enforce signature policies in deployment tooling. 5. Review image SBOMs and scan pinned images for known vulnerabilities before deployment. 6. Configure controlled update procedures rather than automatically adopting newly published images. 7. Drop Linux capabilities by default and retain `NET_ADMIN` only where documented as strictly necessary. 8. Run containers as non-root where supported and apply read-only filesystems, seccomp, AppArmor or SELinux policies, resource limits, and isolated Docker networks.
