SnakeYAML 是一个将 YAML 文件与 Java 对象相互转换的开源代码库。由于GeoScene Portal 4.1使用的opensearch版本较低,这个版本的opensearch使用了多个snakeyaml-1.31.jar,导致了该漏洞。如果直接升级snakeyaml.jar会导致GeoScene Portal无法启动问题,通过升级OpenSearch到2.19.3可以解决该漏洞。
该文档已过期,把 OpenSearch到2.19.3虽然能解决该漏洞。但是,无法解决Netty安全漏洞。最新文档请参考GeoScene Portal 4.1 Netty安全漏洞解决方案。
GeoScene Portal版本:4.1
SnakeYAML 反序列化漏洞(CVE-2022-1471)
SnakeYAML 是一个将 YAML 文件与 Java 对象相互转换的开源代码库。SnakeYAML 存在安全漏洞,该漏洞源于其Constructor()类由于没有对反序列化的类型进行限制,导致攻击者提供恶意yaml内容可以实现远程代码执行。
D:\GeoScene\Portal\framework\runtime\ds\framework\runtime\opensearch\lib\snakeyaml-1.31.jar
D:\GeoScene\Portal\framework\webapps\arcgis#portaladmin\WEB-INF\lib\snakeyaml-1.31.jar
D:\GeoScene\Portal\framework\webapps\arcgis#sharing\WEB-INF\lib\snakeyaml-1.33.jar
D:\GeoScene\Portal\framework\webapps\geoscene\WEB-INF\lib\snakeyaml-1.33.jar
snakeyaml-1.31.jar是OpenSearch的一部分,升级OpenSearch到2.19.3即可。
OpenSearch下载地址:https://opensearch.org/artifacts/by-version/#release-2-19-3
1、停止GeoScene Portal服务。
2、下载后解压到C:\GeoScene\Portal\framework\runtime\ds\framework\runtime\,替换掉原来的opensearch。(修复第一个位置的漏洞)
3、opensearch自带snakeyaml-2.1.jar,把第2、3、4个位置的snakeyaml-1.xx.jar替换为snakeyaml-2.1.jar。
4、启动GeoScene Portal服务。(启动时间可能比较长,要有耐心)
如果你升级OpenSearch到2.19.3后,GeoScene Portal无法启动,可以查看以下日志文件。我们将在常见问题中,对每种错误进行解释。
D:\GeoScene\Portal\framework\runtime\ds\usr\logs\WINGEOS.GISONLINE.CN\opensearchlog\out.txt1、第一个位置直接升级为snakeyaml-2.x.jar会报这个错误:
"warning: no-jdk distributions that do not bundle a JDK are deprecated and will be removed in a future release"
warning: no-jdk distributions that do not bundle a JDK are deprecated and wil be removed in a future release
'Exception in thread "main" java.lang.NosuchMethodError: void org,yamlsnakeyaml,parser.Parserlmp.<init>(org.yaml.snakeyaml.reader.streamReader
at com.fasterxml.jackson.dataformat.yaml.YAMLParser.<init>(YAMLParser.java:178).yaml.YAMLFactory. 解决方案:不要直接替换snakeyaml-1.x.jar为snakeyaml-2.x.jar,改为升级升级OpenSearch到2.19.3。
2、OpenSearch升级到3.1.0报这个错误:
OpenSearch requires Java 21; your Java version from [D:\GeoScene\Portal\framework\runtime\jre] does not meet this requirement解决方案:OpenSearch 3.x所需JDK版本比较高,改为升级到 OpenSearch到2.19.3。
3、'opensearch' 不是内部或外部命令,也不是可运行的程序或批处理文件。
注意要下载OpenSearch v2.19.3进行替换,而不是OpenSearch Dashboard v2.19.3。