Webmin 小于等于 1.920 – Unauthenticated RCE

  • 发表于
  • Vulndb

EDB-ID: 47230

CVE-2019-15107

这个漏洞是由一名不知名的黑客秘密种植的,他成功地在其构建基础架构中的某个时刻成功注入了一个后门,令人惊讶地持续存在于各种版本的Webmin(1.882到1.921)中并最终被隐藏了一年多。开发人员确认官方Webmin下载仅由项目的SourceForge存储库中的后端软件包替换,而不是Webmin的Github存储库。

Webmin <= 1.920 - Unauthenticated RCE

在webmin中,必须允许漏洞利用漏洞的“用户密码更改”。这是唯一的条件。许多webmin管理器都支持此功能。它们允许用户使用旧密码设置新密码。让我们仔细看看这个。Webmin 1.890在默认配置中容易受到攻击,而其他受影响的版本则需要启用“用户密码更改”选项。在研究Webmin应用程序时,我注意到了一些有趣的“.cgi”文件。其中一个是“password_change.cgi”

Webmin 小于等于 1.920 - Unauthenticated RCE

此文件中的参数只有一个要求,即“miniserv.conf”配置文件中的“passwd_mode”值设置为“2”。

Webmin 小于等于 1.920 - Unauthenticated RCE

那么管理员如何激活此配置?让我们检查…在“Webmin> Webmin配置>身份验证”部分中,应检查“使用过期密码提示用户输入新密码”。这意味着“miniserv.conf”中“password_change”的值为“2”。

Webmin 小于等于 1.920 - Unauthenticated RCE

在此配置之后,用户可以通过验证其旧密码来更改其过期密码。那么漏洞到底在哪里?让我们回到“password_change.cgi”。

Webmin 小于等于 1.920 - Unauthenticated RCE

“password_change.cgi”将旧密码发送到“acl / acl-lib.pl”中的“encrypt_password”函数该函数调用另一个函数“unix_crypt”。在另一部分中,再次为“验证旧密码”调用相同的函数“unix_crypt”。

Webmin 小于等于 1.920 - Unauthenticated RCE

此时,我们将在验证旧密码期间通过读取影子文件来使用“竖线(|)”。让我们通过使用burp套件发送请求来查看此内容。

Webmin 小于等于 1.920 - Unauthenticated RCE

我们发送了一个带有普通“POST”数据的请求,并自然给出了一个错误“无法更改密码:当前密码不正确”。该漏洞完全包含在“旧”参数中。用户名,旧密码或其他信息是否正确无关紧要。文件“password_change.cgi”将检查服务器上“old”参数中的信息。它甚至不会检查用户名是否正确。我们现在将使用“竖线(|)”并尝试在服务器上运行不同的命令。

Webmin 小于等于 1.920 - Unauthenticated RCE

如您所见,服务器执行命令“ifconfig”并显示输出。现在让我们将恶意负载发送到服务器并接收shell会话。我将使用“netcat”有效载荷进行证明。因为我知道服务器上有netcat。

Webmin 小于等于 1.920 - Unauthenticated RCE
Webmin 小于等于 1.920 - Unauthenticated RCE

正如你所看到的那样收到了shell。当我们运行命令“pwd”时,我们可以看到恶意有效负载在“acl”文件夹中执行。因为这里调用了这个函数。

Webmin 小于等于 1.920 - Unauthenticated RCE

原文:via