SerializeUtil.deserialize增加白名单类,避免RCE vulnerability

This commit is contained in:
Looly 2023-03-28 19:09:59 +08:00
parent 636f238dbe
commit 73cf56f3a2
3 changed files with 16 additions and 5 deletions

View File

@ -2,9 +2,10 @@
# 🚀Changelog
-------------------------------------------------------------------------------------------------------------
# 5.8.17.M1 (2023-03-26)
# 5.8.17.M1 (2023-03-28)
### 🐣新特性
* 【core 】 SerializeUtil.deserialize增加白名单类避免RCE vulnerabilityissue#3021@Github
### 🐞Bug修复

View File

@ -588,10 +588,11 @@ public class ObjectUtil {
*
* @param <T> 对象类型
* @param bytes 反序列化的字节码
* @param acceptClasses 白名单的类
* @return 反序列化后的对象
*/
public static <T> T deserialize(byte[] bytes) {
return SerializeUtil.deserialize(bytes);
public static <T> T deserialize(byte[] bytes, Class<?>... acceptClasses) {
return SerializeUtil.deserialize(bytes, acceptClasses);
}
/**

View File

@ -2,9 +2,12 @@ package cn.hutool.core.util;
import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.io.FastByteArrayOutputStream;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.ValidateObjectInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.Serializable;
/**
@ -59,9 +62,15 @@ public class SerializeUtil {
*
* @param <T> 对象类型
* @param bytes 反序列化的字节码
* @param acceptClasses 白名单的类
* @return 反序列化后的对象
*/
public static <T> T deserialize(byte[] bytes) {
return IoUtil.readObj(new ByteArrayInputStream(bytes));
public static <T> T deserialize(byte[] bytes, Class<?>... acceptClasses) {
try {
return IoUtil.readObj(new ValidateObjectInputStream(
new ByteArrayInputStream(bytes), acceptClasses));
} catch (IOException e) {
throw new IORuntimeException(e);
}
}
}