diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..5af91d954 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,22 @@ +## Goal + + +## Changes + + +## Testing + + +## Artifacts & Screenshots + + +## Checklist + +- [ ] PR has a clear, descriptive title +- [ ] Documentation has been updated if applicable +- [ ] No secrets or large temporary files are included in the changes + +--- + + + \ No newline at end of file diff --git a/labs/assets/homepage.jpg b/labs/assets/homepage.jpg new file mode 100644 index 000000000..d51895803 Binary files /dev/null and b/labs/assets/homepage.jpg differ diff --git a/labs/lab12/results/dev-diff.txt b/labs/lab12/results/dev-diff.txt new file mode 100644 index 000000000..158f972e8 --- /dev/null +++ b/labs/lab12/results/dev-diff.txt @@ -0,0 +1,2 @@ +1d0 +< core diff --git a/labs/lab12/results/io-bench.txt b/labs/lab12/results/io-bench.txt new file mode 100644 index 000000000..12105068d --- /dev/null +++ b/labs/lab12/results/io-bench.txt @@ -0,0 +1,4 @@ +=== runc I/O === +104857600 bytes (100.0MB) copied, 0.001523 seconds, 64.1GB/s +=== kata I/O === +104857600 bytes (100.0MB) copied, 0.001851 seconds, 52.8GB/s diff --git a/labs/lab12/results/kata-caps.txt b/labs/lab12/results/kata-caps.txt new file mode 100644 index 000000000..7a6b3daad --- /dev/null +++ b/labs/lab12/results/kata-caps.txt @@ -0,0 +1,5 @@ +CapInh: 0000000000000000 +CapPrm: 00000000a80425fb +CapEff: 00000000a80425fb +CapBnd: 00000000a80425fb +CapAmb: 0000000000000000 diff --git a/labs/lab12/results/kata-devs.txt b/labs/lab12/results/kata-devs.txt new file mode 100644 index 000000000..aa74579ef --- /dev/null +++ b/labs/lab12/results/kata-devs.txt @@ -0,0 +1,14 @@ +fd +full +mqueue +null +ptmx +pts +random +shm +stderr +stdin +stdout +tty +urandom +zero diff --git a/labs/lab12/results/kata-escape-attempt.txt b/labs/lab12/results/kata-escape-attempt.txt new file mode 100644 index 000000000..6f0d66ea0 --- /dev/null +++ b/labs/lab12/results/kata-escape-attempt.txt @@ -0,0 +1,2 @@ +time="2026-07-17T23:37:35+03:00" level=warning msg="cannot set cgroup manager to \"systemd\" for runtime \"io.containerd.kata.v2\"" +time="2026-07-17T23:37:36+03:00" level=fatal msg="failed to create shim task: Creating container device LinuxDevice { path: \"/dev/full\", typ: C, major: 1, minor: 7, file_mode: Some(438), uid: Some(0), gid: Some(0) }\n\nCaused by:\n EEXIST: File exists\n\nStack backtrace:\n 0: \n 1: \n 2: \n 3: \n 4: \n 5: \n 6: \n 7: \n 8: \n 9: \n 10: \n\nStack backtrace:\n 0: \n 1: \n 2: \n 3: \n 4: \n 5: \n 6: \n 7: \n 8: \n 9: \n 10: \n 11: \n 12: \n 13: \n 14: \n 15: \n 16: \n 17: \n 18: \n 19: \n 20: \n 21: \n 22: " diff --git a/labs/lab12/results/kata-kernel.txt b/labs/lab12/results/kata-kernel.txt new file mode 100644 index 000000000..813f040a5 --- /dev/null +++ b/labs/lab12/results/kata-kernel.txt @@ -0,0 +1,4 @@ +Linux 27c5cc82b976 6.18.35 #1 SMP Mon Jun 15 12:55:58 UTC 2026 x86_64 Linux +processor : 0 +vendor_id : AuthenticAMD +cpu family : 25 diff --git a/labs/lab12/results/runc-caps.txt b/labs/lab12/results/runc-caps.txt new file mode 100644 index 000000000..7a6b3daad --- /dev/null +++ b/labs/lab12/results/runc-caps.txt @@ -0,0 +1,5 @@ +CapInh: 0000000000000000 +CapPrm: 00000000a80425fb +CapEff: 00000000a80425fb +CapBnd: 00000000a80425fb +CapAmb: 0000000000000000 diff --git a/labs/lab12/results/runc-devs.txt b/labs/lab12/results/runc-devs.txt new file mode 100644 index 000000000..c42a695d3 --- /dev/null +++ b/labs/lab12/results/runc-devs.txt @@ -0,0 +1,15 @@ +core +fd +full +mqueue +null +ptmx +pts +random +shm +stderr +stdin +stdout +tty +urandom +zero diff --git a/labs/lab12/results/runc-kernel.txt b/labs/lab12/results/runc-kernel.txt new file mode 100644 index 000000000..c16e90756 --- /dev/null +++ b/labs/lab12/results/runc-kernel.txt @@ -0,0 +1,4 @@ +Linux d5fb0c4a2051 6.19.14-arch1-1 #1 SMP PREEMPT_DYNAMIC Thu, 23 Apr 2026 06:57:02 +0000 x86_64 Linux +processor : 0 +vendor_id : AuthenticAMD +cpu family : 25 diff --git a/labs/lab12/results/startup-bench.txt b/labs/lab12/results/startup-bench.txt new file mode 100644 index 000000000..596a6f27f --- /dev/null +++ b/labs/lab12/results/startup-bench.txt @@ -0,0 +1,12 @@ +=== runc === +1: .929344436 s +2: 1.094561365 s +3: .360289024 s +4: .297291464 s +5: .299535952 s +=== kata === +1: 1.054953373 s +2: 1.001437854 s +3: 1.043763453 s +4: 1.004514331 s +5: 1.025672087 s diff --git a/labs/lab12/scripts/configure-containerd-kata.sh b/labs/lab12/scripts/configure-containerd-kata.sh new file mode 100755 index 000000000..3c554b813 --- /dev/null +++ b/labs/lab12/scripts/configure-containerd-kata.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +# configure-containerd-kata.sh — Register Kata as a containerd runtime +set -euo pipefail + +CONFIG="/etc/containerd/config.toml" + +echo "==> Generating default containerd config" +mkdir -p /etc/containerd +containerd config default > "${CONFIG}" + +echo "==> Backing up ${CONFIG} to ${CONFIG}.bak" +cp "${CONFIG}" "${CONFIG}.bak" + +# Check if kata runtime is already configured +if grep -q "runtimes.kata" "${CONFIG}"; then + echo "==> Kata runtime already registered in ${CONFIG}" + exit 0 +fi + +# Append kata runtime block +cat >> "${CONFIG}" << 'TOML' + +[plugins.'io.containerd.grpc.v1.cri'.containerd.runtimes.kata] + runtime_type = 'io.containerd.kata.v2' + [plugins.'io.containerd.grpc.v1.cri'.containerd.runtimes.kata.options] + ConfigPath = "/opt/kata/share/defaults/kata-containers/configuration.toml" +TOML + +echo "==> Kata runtime registered in ${CONFIG}" +echo "==> Verifying:" +grep -A 3 'runtimes.kata' "${CONFIG}" diff --git a/labs/lab12/scripts/install-kata-assets.sh b/labs/lab12/scripts/install-kata-assets.sh new file mode 100755 index 000000000..485c6e8a7 --- /dev/null +++ b/labs/lab12/scripts/install-kata-assets.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# install-kata-assets.sh — Download Kata Containers static assets +set -euo pipefail + +KATA_VERSION="${KATA_VERSION:-3.32.0}" +KATA_PREFIX="/opt/kata" + +echo "==> Installing Kata Containers v${KATA_VERSION} to ${KATA_PREFIX}" + +mkdir -p "${KATA_PREFIX}" + +# Download the kata-static tarball (zstd compressed since 3.x) +KATA_TARBALL="kata-static-${KATA_VERSION}-amd64.tar.zst" +KATA_URL="https://github.com/kata-containers/kata-containers/releases/download/${KATA_VERSION}/${KATA_TARBALL}" + +echo "==> Downloading ${KATA_URL}" +curl -fSL "${KATA_URL}" -o "/tmp/${KATA_TARBALL}" + +echo "==> Extracting to ${KATA_PREFIX}" +# Extract zstd tarball +tar --zstd -xf "/tmp/${KATA_TARBALL}" -C / +rm -f "/tmp/${KATA_TARBALL}" + +# Write version file +echo "${KATA_VERSION}" > "${KATA_PREFIX}/VERSION" + +echo "==> Kata v${KATA_VERSION} installed." +echo "==> VERSION: $(cat ${KATA_PREFIX}/VERSION)" +ls -la "${KATA_PREFIX}/bin/" 2>/dev/null | head -10 || echo "(bin/ may be at a different path)" diff --git a/labs/submission1.md b/labs/submission1.md new file mode 100644 index 000000000..a5c0e279f --- /dev/null +++ b/labs/submission1.md @@ -0,0 +1,52 @@ +# Triage Report — OWASP Juice Shop + +## Scope & Asset + +- Asset: OWASP Juice Shop (local lab instance) +- Image: bkimminich/juice-shop:v19.0.0 +- Release link/date: +- Image digest (optional): sha256:2765a26de7647609099a338d5b7f61085d95903c8703bb70f03fcc4b12f0818d + +## Environment + +- Host OS: Arch Linux (Linux kernel version: 6.16.8) +- Docker: Docker API version: 1.51, Docker client version: 28.4.0 + +## Deployment Details + +- Run command used: `docker run -d --name juice-shop -p 127.0.0.1:3000:3000 bkimminich/juice-shop:v19.0.0` +- Access URL: +- Network exposure: 127.0.0.1 only [x] Yes [ ] No (explain if No) + +## Health Check + +- Page load: +![homepage](assets/homepage.jpg) + +- API check: first 5–10 lines from `curl -s http://127.0.0.1:3000/rest/products | head` + +```html + + + + Error: Unexpected path: /rest/products +