Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add ShieldNet-360/secure-vibe --skill container-securitygit clone --depth 1 https://github.com/ShieldNet-360/secure-vibeWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/shieldnet-360/secure-vibe/container-security)<a href="https://agentmods.dev/skills/shieldnet-360/secure-vibe/container-security"><img src="https://agentmods.dev/badge/skills/shieldnet-360/secure-vibe/container-security/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/shieldnet-360/secure-vibe/container-security"><img src="https://agentmods.dev/badge/skills/shieldnet-360/secure-vibe/container-security.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00046 | $0.03659 |
| Opus 5.5 | $0.00018 | $0.01464 |
| Sonnet 5.5 | $0.00009 | $0.00732 |
| Haiku 4.5 | $0.00005 | $0.00366 |
Grade C, and why
container-security scanned grade C with 3 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Downloads and executes remote codemediumSupply chain
curl | sh runs whatever the server returns today, which is not necessarily what it returned when this was reviewed.
- Run `curl … | sh` or `wget -O- … | sh` in a `RUN` — piping an unverified Downgraded: this mod is about security review, or the phrase is quoted, so it is likely naming the pattern rather than instructing it.
Recursive force deletemediumDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
apt-get install -y --no-install-recommends pkg=1.2.3 && rm -rf Downgraded: this mod is about security review, or the phrase is quoted, so it is likely naming the pattern rather than instructing it.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
- Run `curl … | sh` or `wget -O- … | sh` in a `RUN` — piping an unverified How it starts
The opening of the file, as written. The whole thing — 226 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Container Security
Rules (for AI agents)
ALWAYS
- Use multi-stage builds: separate builder/test stages from the final runtime
image so build toolchains and source aren't shipped. The last stage should be a
minimal base —
gcr.io/distroless/<variant>,scratch, or a versioned-slim/-alpinevariant — pinned by SHA256 digest, not just tag. Two bases have nothing to pin:scratch, and a reference to an earlier stage in the same file (FROM base), which is pinned on that stage's ownFROMline. - Run as a non-root user: set
USERexplicitly on the final stage, as a number not a name. Omitting it leaves the container running as root. K8srunAsNonRootrejects UID 0 and cannot resolve a username, soUSER appuserfails at startup with "image has non-numeric user"; any non-zero UID passes, and 10000+ by convention also avoids colliding with host accounts. - Use
npm ci(and equivalentspnpm install --frozen-lockfile,yarn install --frozen-lockfile) in container builds, notnpm install.npm installmutates the lockfile and resolves versions per-build, producing non-deterministic images that drift from the lockfile. - Add a
.dockerignoreexcluding.git,node_modules,.env,*.pem,*.key,target/,.terraform/,dist/,coverage/. - Build with BuildKit (default since Docker Engine 23;
DOCKER_BUILDKIT=1on older engines) soRUN --mount=type=secret,id=<name>is available for build-time credentials.# syntax=docker/dockerfile:1selects the frontend and does not enable BuildKit by itself. - Emit an SBOM (
docker buildx --sbom=true/syft) and attach it to the image so downstream scanners can audit the dependency set. - Pin apt packages and clean lists in the same layer:
apt-get update && apt-get install -y --no-install-recommends pkg=1.2.3 && rm -rf /var/lib/apt/lists/*. Theupdatemust be in that sameRUN— without it there are no package lists; in an earlier layer it goes stale behind the build cache. - Set explicit
HEALTHCHECKfor long-running services, and separately setlivenessProbe/readinessProbe/startupProbein K8s. Kubernetes never runs the image'sHEALTHCHECK— probes are the only mechanism there, so neither one covers the other. - Set resource
requestsandlimitson every container (CPU and memory). Without a memory limit, one container can exhaust the node and take down every pod scheduled beside it — the limit is what bounds a runaway's blast radius to its own container. - Harden at the container-level
securityContext(spec.containers[].securityContext):capabilities.drop: [ALL]then add back only what's needed,readOnlyRootFilesystem: true,allowPrivilegeEscalation: false. These three exist only at container level — under the pod'sspec.securityContextthey are silently ignored while the manifest still applies, so the control vanishes with nothing to show for it. UseemptyDirfor paths that must stay writable. - Apply a seccomp profile (
seccompProfile.type: RuntimeDefaultat minimum) and AppArmor / SELinux where available. This one — likerunAsNonRootandrunAsUser— may be set on the pod and inherited by its containers. - Scan every image in CI (Trivy, Grype, Snyk, or your registry's scanner) and triage findings on severity, reachability and fix availability together. Fail the build on fixable CRITICAL / HIGH findings; a material vulnerability with no published fix needs mitigation or a recorded risk acceptance, not an automatic pass — "unfixable" is remediation information, not a reason it stopped mattering.
- Set
automountServiceAccountToken: falseon every workload that does not call the Kubernetes API. The default mounts a real ServiceAccount token into the container, so an RCE in an app that never needed cluster access still hands the attacker one. - For multi-tenant workloads (per-user/per-customer sessions on shared
infra), isolate tenants at the kernel boundary: a separate VM — or
gVisor / Kata — per tenant, never just separate containers on one shared
daemon. Drop
privileged, enable user namespaces, and give each tenant its own network. A privileged container on a shared host escapes to the host trivially, so on shared infra that is full compromise of every co-tenant. - Expose container orchestration to clients only through a scoped, authenticated broker API that performs the few operations a client may request (start/stop my session). The client must never hold direct daemon or cluster access.
- Consult
iam-best-practicesfor cluster RBAC and the identity a workload runs as, andsupply-chain-securityfor base-image provenance. This skill owns the container's own configuration, not what it inherits.
What ships with it
4 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 226 lines · 46 tokens per session scan C 41103e18e32f
container-security is a skill published in the GitHub repository ShieldNet-360/secure-vibe (22 stars, last pushed 2mo ago), licensed MIT. It adds 46 tokens to every session and 3,659 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it C with 3 findings (downloads and executes remote code, recursive force delete, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
offensive-container-escape
Container escape and breakout techniques targeting Docker, containerd, and Podman runtimes. Covers privileged container breakout via host filesystem mount and nsenter, Docker socket abuse through /var/run/docker.sock, Linux capability exploitation including CAPSYSADMIN, CAPSYSPTRACE, and CAPNETADMIN, cgroup v1…
agents-v2-py
Build container-based Foundry Agents with Azure AI Projects SDK (ImageBasedHostedAgentDefinition). Use when creating hosted agents with custom container images in Azure AI Foundry.
docker-container-expert
Expert guide for production Docker containerization, multi-stage BuildKit builds, rootless execution, distroless runtimes, container security hardening, and Docker Compose v2 topology / Panduan ahli kontainerisasi Docker produksi, multi-stage BuildKit, rootless, distroless, dan Docker Compose v2.
kubernetes-gitops-platform-expert
Expert guide for Production Kubernetes & GitOps Platform Engineering (ArgoCD ApplicationSets, Cilium eBPF NetworkPolicies, KEDA Autoscaling, Gateway API, and Pod Security Standards) / Panduan ahli rekayasa platform Kubernetes & GitOps produksi dengan ArgoCD, Cilium eBPF, dan KEDA.
ci-cd-devops-architect
Expert guide for continuous integration, deployment pipelines, Docker, Kubernetes, and Infrastructure as Code (IaC) / Panduan ahli untuk CI/CD dan infrastruktur.
datarobot-workload-api
Use when the user wants to create, configure, scale, debug, observe, or roll out container workloads on DataRobot's Workload API. Triggers: deploy a container as a managed service; list/start/stop workloads; change replica counts or autoscaling; pick CPU/GPU compute bundles; inject DataRobot credentials as env vars…