Abusing Docker Socket for Privilege Escalation
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)
Dockerソケットにアクセスできる場合があり、それを使用して特権を昇格させたい場合があります。いくつかのアクションは非常に疑わしい可能性があるため、避けたい場合があります。ここでは、特権を昇格させるのに役立つさまざまなフラグを見つけることができます。
ルートとして実行されているコンテナ内でファイルシステムの異なる部分をマウントし、それにアクセスできます。 マウントを悪用してコンテナ内で特権を昇格させることもできます。
-v /:/host
-> ホストのファイルシステムをコンテナにマウントし、ホストのファイルシステムを読み取ることができます。
ホストにいるように感じたいが、コンテナにいる場合は、次のフラグを使用して他の防御メカニズムを無効にできます:
--privileged
--cap-add=ALL
--security-opt apparmor=unconfined
--security-opt seccomp=unconfined
-security-opt label:disable
--pid=host
--userns=host
--uts=host
--cgroupns=host
**--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined
** -> これは前の方法に似ていますが、ここではデバイスディスクをマウントしています。次に、コンテナ内でmount /dev/sda1 /mnt
を実行すると、/mntでホストのファイルシステムにアクセスできます。
ホストでfdisk -l
を実行して、マウントする</dev/sda1>
デバイスを見つけます。
-v /tmp:/host
-> 何らかの理由でホストから特定のディレクトリのみをマウントでき、ホスト内にアクセスできる場合は、それをマウントし、マウントされたディレクトリにsuidを持つ**/bin/bash
**を作成して、ホストから実行してrootに昇格できます。
おそらく/tmp
フォルダをマウントできないかもしれませんが、異なる書き込み可能なフォルダをマウントできる場合があります。書き込み可能なディレクトリを見つけるには、find / -writable -type d 2>/dev/null
を使用します。
Linuxマシンのすべてのディレクトリがsuidビットをサポートするわけではありません! suidビットをサポートするディレクトリを確認するには、mount | grep -v "nosuid"
を実行します。たとえば、通常/dev/shm
、/run
、/proc
、/sys/fs/cgroup
、および/var/lib/lxcfs
はsuidビットをサポートしていません。
また、/etc
や設定ファイルを含む他のフォルダをマウントできる場合、コンテナ内でrootとしてそれらを変更し、ホストで悪用して特権を昇格させることができます(たとえば、/etc/shadow
を変更する)。
--privileged
-> このフラグを使用すると、コンテナからのすべての隔離を削除します。特権コンテナからrootとして脱出するための技術を確認してください。特権コンテナからの脱出。
--cap-add=<CAPABILITY/ALL> [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]
-> 能力を悪用して昇格するために、その能力をコンテナに付与し、エクスプロイトが機能するのを妨げる可能性のある他の保護方法を無効にします。
このページでは、dockerフラグを使用して特権を昇格させる方法について説明しました。curlコマンドを使用してこれらの方法を悪用する方法を見つけることができます。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)