Linux通用系统高危漏洞(CVE-2024-1086)修复案例

一、漏洞描述

2024年3月28日, Linux kernel权限提升漏洞(CVE-2024-1086)的PoC/EXP在互联网上公开,该漏洞的CVSS评分为7.8,目前漏洞细节已经公开披露,美国网络安全与基础设施安全局(CISA)6月1日也更新了其已知漏洞(KEV)目录,要求联邦机构在 2024 年 6 月 20 日之前打上补丁,修复追踪编号为 CVE-2024-1086 的 Linux 内核权限提升漏洞。CVE-2024-1086 是一个高危 use-after-free 漏洞,于 2024 年 1 月 31 日首次披露,存在于 netfilter: nf_tables 组件中,相关漏洞代码于 2014 年 2 月的一项提交并入。攻击者可利用该漏洞可在本地进行提权操作,最高可获取目标服务器的root管理权限。该漏洞于2024年3月28日被公开披露,并在互联网上出现了相关的概念验证(PoC)和攻击工具。由于该漏洞的公开性,攻击者可能会利用这个漏洞进行恶意攻击,因此建议尽快采取修复措施。

漏洞原理:Linux内核版本v5.14 – v6.6的netfilter 子系统nf_tables组件中存在释放后使用漏洞,由于在nft_verdict_init()函数中,允许正值作为hook判决中的丢弃错误,因此当 “nf_hook_slow ()” 函数在NF_DROP一起发出类似于NF_ACCEPT的丢弃错误时,nf_hook_slow()函数可能会导致双重释放漏洞,本地低权限威胁者可利用该漏洞将权限提升为root。Netfilter 是 Linux 内核提供的一个框架,允许进行各种与网络有关的操作,如数据包过滤、网络地址转换(NAT)和数据包混淆。

影响范围: 该漏洞影响了使用Linux内核版本v5.14 – v6.6 版本(不包括分支修补版本 v5.15.149、v6.1.76和v6.6.15)的大多数Linux系统/内核:

3.15<= Linux kernel < 6.1.76
5.2<= Linux kernel < 6.6.15
6.7<= Linux kernel < 6.7.3
6.8:rc1 = Linux kernel

修复建议:

  • 升级Linux内核版本修复漏洞。Linux 多个稳定版目前已经修复,参考如下:
    v5.4.269 及更高版本;v5.10.210 及更高版本;v6.6.15 及更高版本;v4.19.307 及更高版本;v6.1.76 及更高版本;v5.15.149 及更高版本;v6.7.3 及更高版本
  • 若相关用户暂时无法进行更新,如果业务不需要,可以通过阻止加载受影响的 netfilter (nf_tables) 内核模块来缓解。
  • 如果无法禁用该模块,可在非容器化部署中,对用户命名空间进行限制。

在这里插入图片描述
关联资源:Notselwyn公告、nftables、How do I prevent a kernel module from loading automatically?、How to modify the kernel command-line in Red Hat Enterprise Linux 9、内核官网、openeuler安全中心、统信公告、麒麟公告、龙蜥公告及修复、华为欧拉、src-openEuler、nvd.nist

二、复现验证及修复

1、漏洞复现过程(来源Github)

在这里插入图片描述

2、复现脚本

复现脚本exploit可检测内核v5.14 到(including) v6.6版,完成权限提升复现,但不包括v5.15.149>, v6.1.76>, v6.6.15>这些分支,它们已经完成补丁修复;

git clone https://github.com/Notselwyn/CVE-2024-1086 Cloning into 'CVE-2024-1086'...
remote: Enumerating objects: 2196, done.
remote: Counting objects: 100% (169/169), done.
remote: Compressing objects: 100% (88/88), done.
remote: Total 2196 (delta 87), reused 158 (delta 77), pack-reused 2027
Receiving objects: 100% (2196/2196), 2.10 MiB | 4.42 MiB/s, done.
Resolving deltas: 100% (762/762), done.
#安装
cd CVE-2024-1086
make  #报错
musl-gcc -I./include -I./include/linux-lts-6.1.72 -Wall -Wno-deprecated-declarations src/main.c src/env.c src/net.c src/nftnl.c src/file.c -o ./exploit -static ./lib/libnftnl.a ./lib/libmnl.a
make: musl-gcc: No such file or directory
make: *** [Makefile:25: _compile_static] Error 127
#安装
yum install musl-gcc musl-devel -y
CVE-2024-1086/exploit  #完成后会生成二进制文件./exploit  #输出如下
[ygcg@zq-fdfs-25 CVE-2024-1086]$ ./exploit 
[*] creating user namespace (CLONE_NEWUSER)...
[*] creating network namespace (CLONE_NEWNET)...
[*] setting up UID namespace...
[*] configuring localhost in namespace...
[*] setting up nftables...
[+] running normal privesc
[*] waiting for the calm before the storm...
[*] sending double free buffer packet...
[*] spraying 16000 pte's...
[*] checking 16000 sprayed pte's for overlap...
[+] confirmed double alloc PMD/PTE
[+] found possible physical kernel base: 00000006f1600000
[+] verified modprobe_path/usermodehelper_path: 00000006f2e56580 ('/sanitycheck')...
[*] overwriting path with PIDs in range 0->4194304...  
[!] verified modprobe_path address does not work... CONFIG_STATIC_USERMODEHELPER enabled? #执行完就跳出了,并未继续越权成功,可能对于内核:Linux 5.10.0-60.70.0.94.oe2203 并不管用#对于内核版本 > 6.4,还需要检查内核配置 CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y时,用该漏洞不影响
zcat /proc/config.gz|grep CONFIG_INIT_ON_ALLOC  #检查发现输出如下
\# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
#检查LInux是否启用了CONFIG_USER_NS和CONFIG_NF_TABLES
zcat /proc/config.gz|grep CONFIG_USER_NS  #输出如下
CONFIG_USER_NS=y
zcat /proc/config.gz|grep CONFIG_NF_TABLES #输出如下
#=y:表示该功能被编译进内核中,始终可用。
#=m:表示该功能被编译为模块,可以根据需要加载或卸载。
#=n:表示该功能被禁用,不会编译进内核或作为模块。
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_INET=y
CONFIG_NF_TABLES_NETDEV=y
CONFIG_NF_TABLES_IPV4=y
CONFIG_NF_TABLES_ARP=y
CONFIG_NF_TABLES_IPV6=y
CONFIG_NF_TABLES_BRIDGE=m
#启用nf_tables模块
modprobe nf_tables
#永久加载这个模块,可以将其添加到 /etc/modules-load.d/ 目录下的某个文件中:
echo nf_tables | sudo tee /etc/modules-load.d/nf_tables.conf #或写入modules.conf
#查看
lsmod|grep -i nf_tables
nf_tables             274432  25  #其中,274432:这是模块的大小,单位是字节。表示 nf_tables 模块占用了大约 274432 字节的内存空间。25表示有25个其他模块依赖于 nf_tables 模块。该行表示nf_tables 模块已加载
nfnetlink              20480  3 nf_conntrack_netlink,nf_tables
libcrc32c              16384  3 nf_conntrack,nf_nat,nf_tables
#查看模块是否属于LInux启动初始化映像文件系统加载的一部分。一般不是
lsinitrd /boot/initramfs-$(uname -r).img|grep nf_tables.ko

3、现场处理

现场使用的是云能的Euler V22.10 U2版 ,它基于**openEuler 22.03 LTS SP2**版本发布,内核版本:Linux 5.10.0-60.70.0.94.oe2203;现场用poc脚本测试并未越权成功,但是据网络相关经验表明,openEuler 22.03 LTS的内核5.10.0-60.18.0.50.oe2203.x86_64版本是可以越权成功的,案例中内核升级到了5.10.0-60.139.0.166.oe2203.x86_64,比现场版本高;现场内核验证结果如下所示:

在这里插入图片描述

#可用内核版本
yum check-update |grep kernel-*  #或yum check-update kernel,yum list available kernelkernel.x86_64                         5.10.0-136.49.0.127.10.oe2203.bclinux update    
kernel-devel.x86_64                   5.10.0-136.49.0.127.10.oe2203.bclinux update    
kernel-headers.x86_64                 5.10.0-136.49.0.127.10.oe2203.bclinux update    
kernel-tools.x86_64                   5.10.0-136.49.0.127.10.oe2203.bclinux update   
#或
yum list kernel --showduplicates
#查看可用补丁
yum search linux-kernel#非容器化部署中,可以通过将 user.max_user_namespaces 设置为 0 来禁用用户命名空间
echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf
sysctl -w kernel.unprivileged_userns_clone=0  #禁用非特权用户创建命名空间的能力
sysctl -p /etc/sysctl.d/userns.conf
#禁止nf_tables模块
vi /etc/modprobe.d/nf_tables-blacklist.conf  #新增如下内容:
blacklist nf_tables
#验证
insmod nf_tables.ko.xz   #加载/usr/lib/modules/5.10.0-60.70.0.94.oe2203.bclinux.x86_64/kernel/net/netfilter/nf_tables.ko.xz
#卸载已加载的目标模块
modprobe -r module_name
echo "blacklist nf_tables" >> /etc/modprobe.d/nf_tables-blacklist.conf  ##同上,将模块加入blacklist,避免自动再次载入
echo "install nf_tables /bin/false" >> /etc/modprobe.d/nf_tables-blacklist.conf  #这样,当OS下次尝试加载模块时,将执行/bin/false;这将防止模块按需加载
cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.$(date +%m-%d-%H%M%S).bak #备份 initramfs(Initial RAM Filesystem),如果目标模块属于initramfs的一部分,需rebuild initramfs,执行如下
dracut --omit-drivers module_name -f  #重建
#持久化配置
MODNAME="module_name"; echo "omit_dracutmodules+=\" $MODNAME \"" >> /etc/dracut.conf.d/omit-$MODNAME.conf  #不需要的时候,删除该文件即可
grubby --info ALL (To view changes in all available kernels) 

内核升级方式:内核的更换主要有三重方式,第一种是下载源码进行编译;第二种是通过添加内核源,然后使用yum进行安装;第三种是通过下载rpm包,然后通过rpm来进行安装。推荐第三中方式。

#查看内核启动顺序
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg  #启动顺序默认降序排列,从0开始
grub2-set-default 0  #设置最新的内核为默认启动

现场欧拉系统,通过POC测试脚本暂无法确定,官网查看,详情如下:
在这里插入图片描述
在这里插入图片描述
受影响版本:

1.openEuler-20.03-LTS-SP1(4.19.90):受影响
2.openEuler-20.03-LTS-SP3(4.19.90):受影响
3.openEuler-20.03-LTS-SP4(4.19.90):受影响
4.openEuler-22.03-LTS(5.10.0):受影响
5.openEuler-22.03-LTS-SP1(5.10.0):受影响
6.openEuler-22.03-LTS-SP2(5.10.0):受影响
7.openEuler-22.03-LTS-SP3(5.10.0):受影响
8.openEuler-22.03-LTS-Next(5.10.0):受影响
9.master(6.1.0):不受影响

漏洞修复:penEuler-HotPatchSA-2024-1008、官方补丁
在这里插入图片描述
补丁说明:

//net/netfilter/nf_tables_api.c	
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index 0d0b76a5ddfaa9..f586e8b3c6cfac 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -9340,16 +9340,10 @@ static int nft_verdict_init(const struct nft_ctx *ctx, struct nft_data *data,data->verdict.code = ntohl(nla_get_be32(tb[NFTA_VERDICT_CODE]));switch (data->verdict.code) {
-	default:
-		switch (data->verdict.code & NF_VERDICT_MASK) {
-		case NF_ACCEPT:  
-		case NF_DROP:     
-		case NF_QUEUE:    
-			break;
-		default:
-			return -EINVAL;
-		}
-		fallthrough;
+	case NF_ACCEPT:
+	case NF_DROP:
+	case NF_QUEUE:
+		break;case NFT_CONTINUE:case NFT_BREAK:case NFT_RETURN:
@@ -9384,6 +9378,8 @@ static int nft_verdict_init(const struct nft_ctx *ctx, struct nft_data *data,data->verdict.chain = chain;break;
+	default:
+		return -EINVAL;}desc->len = sizeof(data->verdict);

现场处理:

# 新增openEuler-22.03-LTS-SP2 repo源
vi /etc/yum.repos.d/openEuler-22.03-LTS-SP2.repo
[SP2_OS]
name=SP2_OS
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/OS/$basearch/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/OS&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/OS/$basearch/RPM-GPG-KEY-openEuler[SP2_everything]
name=SP2_everything
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/everything/$basearch/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/everything&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/everything/$basearch/RPM-GPG-KEY-openEuler[SP2_EPOL]
name=EPOL
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/EPOL/main/$basearch/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/EPOL/main&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/OS/$basearch/RPM-GPG-KEY-openEuler[SP2_debuginfo]
name=debuginfo
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/debuginfo/$basearch/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/debuginfo&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/debuginfo/$basearch/RPM-GPG-KEY-openEuler[SP2_source]
name=source
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/source/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever&arch=source
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/source/RPM-GPG-KEY-openEuler[SP2_update]
name=SP2_update
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/update/$basearch/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/update&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/OS/$basearch/RPM-GPG-KEY-openEuler[SP2_update-source]
name=SP2_update-source
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/update/source/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/update&arch=source
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/source/RPM-GPG-KEY-openEuler#参考上问yum升级内核到:kernel-5.10.0-153.43.0.121.oe2203sp2.x86_64
yum  --disablerepo=\* --enablerepo=SP2_update list kernel --showduplicate|grep 5.10.0-153.43.0.121  #输出
kernel.x86_64            5.10.0-153.43.0.121.oe2203sp2                SP2_update
#升级
yum  --disablerepo=\* --enablerepo=SP2_update  --nogpgcheck update kernel-5.10.0-153.43.0.121.oe2203sp2.x86_64
#验证
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg  #输出如下
BigCloud Enterprise Linux (5.10.0-153.43.0.121.oe2203sp2.x86_64) 22.10 LTS
BigCloud Enterprise Linux (5.10.0-60.70.0.94.oe2203.bclinux.x86_64) 22.10 LTS
#设置第一个为默认,实际不设置也是优先第一个
grub2-set-default 0grub2-editenv list  #输出,这里也证明默认的启动一变成新的内核版本,与cat /etc/default/grub的GRUB_DEFAULT对应
saved_entry=BigCloud Enterprise Linux (5.10.0-153.43.0.121.oe2203sp2.x86_64) 22.10 LTS
boot_success=0
#备份旧镜像,之后就会找到新镜像来启动
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak  #备份呢当前启动镜像
reboot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试:MyBatisDemo

MyBatis Demo 先创建一个 Maven 项目&#xff0c;名称为 MyBatis01。 之后创建并连接 MySQL 数据库&#xff0c;然后执行 sql 脚本&#xff1a; CREATE DATABASE mybatis;USE mybatis;DROP TABLE IF EXISTS user;CREATE TABLE user ( id int(20) NOT NULL, name varchar(30)…

ABB机器人控制柜各模块指示灯状态说明

ABB机器人控制柜各模块指示灯状态说明 主计算机模块位于控制柜的正前方,负责机器人的各种运算处理,安全模块主要负责安全相关的信号处理,驱动单元模块用于接收上位机指令,驱动机器人运动,轴计算机模块用于接收主计算机的运动指令和串

入门JavaWeb之 Response 验证码和重定向

Response 写验证码&#xff1a; package com.demo.response;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse…

浏览器页面打不开(网络连接正常的情况下)

目录 一、代理被打开 二、DNS被篡改 三、网络配置出现问题 四、浏览器配置问题 一、代理被打开 1. 右击Wifi图标 2.点击“打开网络和internet设置” 3. 点击代理&#xff0c;把该窗口所有的东西都关闭&#xff0c;尤其是代理服务器 二、DNS被篡改 如果第一个方法不行&am…

浅谈逻辑控制器之仅一次控制器

浅谈逻辑控制器之仅一次控制器 “仅一次控制器”(Once Only Controller) 是一个非常实用的组件&#xff0c;它允许用户控制测试计划中的某些操作仅执行一次&#xff0c;无论其所在的线程组或父级控制器设置了多少次循环。本指南将详细介绍“仅一次控制器”的功能、使用场景及配…

HarmonyOS ArkUi Tabs+TabContent+List实现tab吸顶功能

Demo效果 Entry Component struct StickyNestedScroll {State message: string Hello WorldState arr: number[] []scroller new Scroller()StyleslistCard() {.backgroundColor(Color.White).height(72).width("100%").borderRadius(12)}build() {Scroll(this.sc…

医药研发项目管理系统:适合CRO/CDMO企业使用的项目管理系统有哪些?

近日&#xff0c;北京民康百草医药科技有限公司&#xff08;以下简称“民康百草”&#xff09;与北京瑞杰智能科技有限公司&#xff08;以下简称“瑞杰科技”&#xff09;宣布达成战略合作&#xff0c;双方将共同打造一套符合民康百草企业特色的研发项目管理系统。该系统将基于…

postGreSQL关系数据库介绍

什么是postGreSQL关系数据库&#xff1f; PostgreSQL 是一个强大的、开源的对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;。它基于POSTQUEL查询语言的继承&#xff0c;提供了对SQL标准的广泛支持&#xff0c;并扩展了许多高级功能&#xff0c;如事务处理、多版本并…

使用 Webmin 中模块注意事项

一、 Docker中Webmin忘记密码解决方法 Webmin忘记Web登陆时候的密码&#xff0c;无法登陆&#xff0c;可以通过changepass.pl 文件修改密码来进行解决。但在 Docker 中这一方法很难&#xff0c;因为不知道changepass.pl 在那里&#xff1f; 我是通过如下方法来解决的&#xff…

JAVA医院绩效考核系统源码:优化绩效考核的必要性 系统技术架构:java+springboot、mybaits +avue +MySQL

JAVA医院绩效考核系统源码&#xff1a;优化绩效考核的必要性 系统技术架构&#xff1a;javaspringboot、mybaits avue MySQL 医院绩效考核系统&#xff0c;建立以医院发展目标为导向&#xff0c;以医务人员劳动价值、工作量为评价基础&#xff0c;统筹效率、质量、成本的绩效管…

mysql窗口函数选择每个窗口的第一条数据

需求 假设我们有一个名为sales的表&#xff0c;我们想要按product分组&#xff0c;并为每个产品选择销售额最高的那一天 sales表 首先给每个产品按照销售量进行排名 SELECT product,sale_date,sales_amount,ROW_NUMBER() OVER (PARTITION BY product ORDER BY sales_amount …

AI在落地企业应用时的“数据幻觉”缘何这么难解决一谈LORA微调与数据质量处理之争

开篇 近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;越来越多的企业开始将AI落地应用于业务中。然而&#xff0c;不可忽视的是&#xff0c;企业在落地LLM RAG系统时&#xff0c;常常面临一个令人头痛的问题——数据幻觉。 就像透过雾霭的眼睛,看到了一片迷人的景…

火山引擎ByteHouse:新一代云数仓必不可少的五大核心能力

从数据库领域的发展历程来看&#xff0c;分析型数据库已有 40 多年的发展历史&#xff0c;与数据库基本同时代。从OLTP 和 OLAP 的分支来看&#xff0c;分析型数据库支持了海量数据规模下的聚合性分析。尤其是随着移动互联网甚至 AI 等领域的发展&#xff0c;用户画像行为分析的…

NGINX配置web文件服务

一、需求描述 系统需要提供文件&#xff08;pdf、图片&#xff09;等上传后支持预览功能。 二、实现方式 2.1 文件权限配置 chmod arwx -R public/chmod 是更改文件权限的命令。-R 是递归选项&#xff0c;表示更改目录及其所有子目录和文件的权限。arwx 是权限设置&#xf…

阿里巴巴找黄金宝箱(IV)

系列文章目录 本人最近再练习算法&#xff0c;所以会发布自己的解题思路&#xff0c;希望大家多指教 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、java代码五、测试用例 前言 一、题目描述 贫如洗的椎夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现…

一款专为网页开发者设计的高效工具,它简化了响应式网站的开发流程

大家好&#xff0c;今天给大家分享的是一款专为web开发人员和测试人员设计的工具&#xff0c;它通过改进的web浏览器功能&#xff0c;帮助用户进行响应式web开发和兼容性测试。 主要功能 所有设备上的镜像用户交互&#xff1a;允许开发人员在单一设备上进行操作&#xff0c;实时…

Python高精度浮点运算库之mpmath使用详解

概要 在科学计算和工程应用中,精确的数学计算至关重要。Python 作为一种灵活而强大的编程语言,提供了多种数学库,其中 mpmath 库因其高精度浮点运算和丰富的数学函数支持而备受关注。mpmath 库不仅适用于基本的高精度计算,还支持复数运算、矩阵运算和特殊函数计算,广泛应…

使用微信开发者工具创建运行项目全流程

小程序基础知识 1. 认识什么是小程序 什么是微信小程序 微信小程序是一种运行在微信内部的 轻量级 应用程序。 在使用小程序时 不需要下载安装&#xff0c;用户 扫一扫 或 搜一下 即可打开应用。它也体现了 “用完即走” 的理念&#xff0c;用户不用关心安装太多应用的问题…

SyntaxError: Unexpected token ‘<‘ (at chunk-vendors.fb93d34e.js:1:1)打包后页面白屏vue

本地运行一切正常&#xff0c;打包到线上&#xff0c;页面一篇空白。我确定输入路径正确。。。 控制台报错&#xff0c;我就开始百度&#xff0c;有的说清空缓存就行了&#xff0c;但我清空了还是这样。。。 然后我就去排查原因。看到页面请求js&#xff0c;但是请求的好像有点…

技术市集 | 如何通过WSL 2在Windows上挂载Linux磁盘?

你是否常常苦恼&#xff0c;为了传输或者共享不同系统的文件需要频繁地在 Windows 和 Linux 系统之间切换&#xff0c;既耽误工作效率&#xff0c;也容易出错。 那么有没有一种办法&#xff0c;能够让你在Windows系统中像访问本地硬盘一样来操作Linux系统中的文件呢&#xff1…