🚀 Submit a Challenge — SecDim AppSec Village CTF at DEF CON 34 and Win a ROG Xbox Ally

Container Security for Developers

4h 52mBeginnerDevSecOpsContainerDocker

Containers ship fast but misconfigure easily. This course teaches developers the security implications of the configuration decisions they make every day -- Dockerfiles, `docker run` flags, and CI pipeline setup -- through real incidents including Azurescape, Leaky Vessels, and the TeamCity supply chain attack. You will learn to harden container images, eliminate credential leakage through image layers, drop privileges to the minimum required, and understand why mounting the Docker socket in CI is equivalent to handing an attacker root on the host. No security background required.

Topics

  1. Introduction

    Lesson5m

    Overview of the course, learning objectives and syllabus

  2. Container Internals and Attack Surface

    Lesson20m

    What containers actually are at the kernel level -- namespaces, cgroups, and the shared host kernel -- and why that shared foundation means a misconfigured container affects every workload on the host.

  3. Vulnerable Images and Supply Chain Risk

    Lesson20m

    How vulnerability scanners read image layers to find known-bad packages, why the XZ Utils backdoor entered through a dependency and not application code, and how multi-stage builds and digest pinning shrink the attack surface.

  4. Pin CI/CD and Root Lab

    Lab30m

    In this lab, you’ll get hands-on experience fixing two common security issues in a simple CI/CD pipeline for a containerised Node.js app. We will look at: (a) unpinned GitHub Actions in your CI workflow and (b) a container that runs as root

  5. Secret Leakage Through Image Layers

    Lesson15m

    Why deleting a secret in a later Dockerfile layer leaves it permanently readable in the layer history, how AI-generated Dockerfiles reproduce this pattern reliably, and how to keep secrets out of the build context entirely.

  6. Privilege Escalation in Container

    Lesson41m

    The three interlocking privilege mechanisms in containers -- root processes, Linux capabilities, and SUID binaries -- how the Leaky Vessels vulnerabilities made each one matter, and how to drop to the minimum privilege a container needs.

  7. Priviledged Lab

    Challenge30m

    Learn how to exploit a privileged container and then securing it

  8. Root Container Lab

    Challenge30m

    Learn how to exploit a container that runs as root and then securing it

  9. Host Takeover via Docker in Docker

    Lesson20m

    Why both common DinD patterns used in CI/CD pipelines -- daemon in a container and socket mount -- provide a direct path to host compromise, and which rootless build tools eliminate the need for either

  10. Syscall Filtering and Kernel Confinement

    Lesson20m

    How seccomp profiles block dangerous syscalls before they reach the kernel, how AppArmor restricts filesystem and network access at the resource level, and why Dirty COW is the clearest example of what namespace isolation alone cannot stop.

  11. Capabilities Lab

    Challenge30m

    Learn how to identify unnecessary capabilities of a container, how to exploit them and how to secure them.

  12. Setuid Lab

    Challenge30m

    Learn how to exploit setuid binaries in a container and how to secure them.