验证CVE-2024-7928问题是否存在可以使用如下方法:
https://域名/index/ajax/lang?lang=..//..//目录名/文件名(不带后缀)
目录名是该项目的一个目录,这里目录位置为nginx设置站点目录为基准,网上两层目录。
文件名是目录下的项目文件,通常是包含项目参数初始化的文件。
假定目录名为application,文件名为database.php,那么验证链接为:
https://域名/index/ajax/lang?lang=..//..//application/database
在浏览器中验证效果如下:
该漏洞源于FastAdmin 1.3.3.20220121版本,该漏洞影响了文件/index/ajax/lang的一些未知功能。通过操作参数lang可以导致路径遍历。针对此漏洞,可参考FastAdmin修复建议,对代码进行修改。(官网地址:https://www.fastadmin.net/news/94.html)
官方提供了两种修复方法,一种是关闭多语言功能,一种是手动修改代码进行修复。
第一种修复方法;
修改application/config.php大概第45行的lang_switch_on的对应值修改为false即可。
打开application/common/behavior/Common.php,添加以下代码
public function appInit()
{
$allowLangList = Config::get('allow_lang_list') ?? ['zh-cn', 'en'];
\think\Lang::setAllowLangList($allowLangList);
}
然后打开application/tags.php,在app_init对应的数组中添加以下代码
'app\\common\\behavior\\Common',
fastadmin另有安全提示如下:
建议启用application/config.php中的cookie配置中的httponly设置为true,如果是https,建议secure也配置为true。
FastAdmin目录安全配置,如下:
生产环境首先全部设置为555权限,
runtime目录设置为755权限
public/uploads目录设置为755权限并禁用PHP脚本执行
禁用后台admin模块,启用独立的后台登录入口,最新版已经默认禁用 admin 模块。
新增网站配置时务必绑定public目录,同时启用open_basedir限制只允许FastAdmin的根目录,例如:fastcgi_param PHP_VALUE "open_basedir=/var/www/fastadmin/:/tmp/:/proc/";
修改php.ini,禁用不安全的函数,配置如disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru