背景
由于项目使用的是nacos1.1.4,其依赖的fastjson的版本为1.2.58,包含了AVD-2022-1243027
和AVD-2022-1243027
的 fastjson <= 1.2.80 反序列化任意代码执行漏洞。故需要将fastjson的版本升级到1.2.83
解决思路
简单来说:就是替换其依赖的jar包。
但是通过解压缩工具替换jar包后,报如下的错,是说替换fastjson的jar的时候被压缩了,导致无法正常读取
Exception in thread "main" java.lang.IllegalStateException: Failed to get nested archive for entry BOOT-INF/lib/fastjson-1.2.83.jar
at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:108)
at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:86)
at org.springframework.boot.loader.PropertiesLauncher.addNestedEntries(PropertiesLauncher.java:556)
at org.springframework.boot.loader.PropertiesLauncher.getClassPathArchives(PropertiesLauncher.java:458)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:49)
at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:593)
Caused by: java.io.IOException: Unable to open nested jar file 'BOOT-INF/lib/fastjson-1.2.83.jar'
at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:256)
at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:241)
at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:103)
... 5 more
Caused by: java.lang.IllegalStateException: Unable to open nested entry 'BOOT-INF/lib/fastjson-1.2.83.jar'. It has been compressed and nested jar files must be stored without compression. Please check the mechanism used to create your executable jar file
at org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry(JarFile.java:284)
at org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry(JarFile.java:264)
at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:252)
... 7 morecat /usr/local/nacos/logs/start.out
故上述方式不可行。
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
故使用jdk自带jar命令解压缩,在重新打jar的方式,最终是可行的。命令如下:
解压:jar -xvf nacos-server.jar
解压后,如下图:
然后在\BOOT-INF\lib路径下,将旧版本的fastjson替换成fastjson-1.2.83.jar
压缩:jar -cfM0 nacos.jar ./BOOT-INF ./META-INF ./org
压缩后在目录下会生成一个新的nacos.jar的包,替换后,启动成功。
问题
① 如果在解压时,有如下异常,请以管理员身份运行cmd
C:\Program Files\Java\jdk1.8.0_331\bin>jar -xvf .\nacos-server.jar
java.io.IOException: META-INF: 无法创建目录
at sun.tools.jar.Main.extractFile(Main.java:1050)
at sun.tools.jar.Main.extract(Main.java:981)
at sun.tools.jar.Main.run(Main.java:311)
at sun.tools.jar.Main.main(Main.java:1288)
② 1.1.4的nacos不支持fastjson2.0,会报一堆错,故只升级到了1.2.83,其他jar在替换时,也可能遇到兼容性问题,此处需要注意。
END
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)