Dockerソケットを悪用して特権昇格を行う

Reading time: 6 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

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に昇格します。

note

/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を変更するなど)。

コンテナからの脱出

Curl

このページでは、Dockerフラグを使用して特権を昇格させる方法について説明しました。curlコマンドを使用してこれらの方法を悪用する方法を見つけることができます。

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする