XStream 的安全框架未初始化,XStream 可能存在漏洞

Security framework of XStream not initialized, XStream is probably vulnerable

Security framework of XStream not initialized, XStream is probably vulnerable

我在使用 XStream (1.4.10)

时一直收到红色的控制台错误

我尝试了以下方法:

XStream.setupDefaultSecurity(xs);

xs.addPermission(AnyTypePermission.ANY); xs.addPermission(NoTypePermission.NONE);

none 其中去掉了。

我不需要任何花哨的安全设置,我只想让那个警告静音。也许还准备 1.5.x

的代码

我有相同的 "problem" 并通过允许相关类型解决了它:

Class<?>[] classes = new Class[] { ABC.class, XYZ.class };
XStream xStream = new XStream();
XStream.setupDefaultSecurity(xStream);
xStream.allowTypes(classes);

也许这对您的情况也有帮助。

祝你好运!

在处理安全问题时,我不会掉以轻心。首先,人们会了解问题的严重性,这里是 good write up or another one.

然后了解人们如何推荐解决方案。好的起点是 xstream 网站本身。 xstream security page.

上有一个示例,您可以将其用作起点

这是我的设置,基本上允许您的大部分代码。

XStream xstream = new XStream();
// clear out existing permissions and set own ones
xstream.addPermission(NoTypePermission.NONE);
// allow some basics
xstream.addPermission(NullPermission.NULL);
xstream.addPermission(PrimitiveTypePermission.PRIMITIVES);
xstream.allowTypeHierarchy(Collection.class);
// allow any type from the same package
xstream.allowTypesByWildcard(new String[] {
    "com.your.package.**"
});

然而,在深入研究他们的源代码之后,这是我的看法:

XStream.setupDefaultSecurity(this); // to be removed after 1.5
xstream.allowTypesByWildcard(new String[] {
    "com.your.package.**"
});

所以基本上,升级到 1.5 后您只需要一行。

请注意,您可能需要更多的通配符来适应您的应用反序列化场景。这不是一个放之四海而皆准的答案,而是一个很好的起点恕我直言。

它也可以通过为允许的 类:

指定一个包罗万象的模式来工作
xstream.allowTypesByRegExp(new String[] { ".*" });

对于遇到此问题的任何人,这可能是由于 CVE-2021-21351

XStream早期版本存在RCE漏洞。您应该立即升级到 1.46.1 或更高版本。