From 511a52f760e751824b66971546669b2bdcc8ade4 Mon Sep 17 00:00:00 2001
From: "pixeebot[bot]" <104101892+pixeebot[bot]@users.noreply.github.com>
Date: Thu, 31 Oct 2024 03:05:38 +0000
Subject: [PATCH] Introduced protections against deserialization attacks
---
pom.xml | 7 +++++++
serialized-entity/pom.xml | 4 ++++
.../com/iluwatar/serializedentity/CountrySchemaSql.java | 2 ++
.../java/com/iluwatar/serializedentity/CountryTest.java | 2 ++
tolerant-reader/pom.xml | 4 ++++
.../com/iluwatar/tolerantreader/RainbowFishSerializer.java | 2 ++
6 files changed, 21 insertions(+)
diff --git a/pom.xml b/pom.xml
index 10348ef0466a..82e2a5b5638a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,6 +54,7 @@
iluwatar_java-design-patterns
${project.artifactId}
Java Design Patterns
+ 1.2.0
abstract-factory
@@ -248,6 +249,12 @@
${system-lambda.version}
test
+
+ io.github.pixee
+ java-security-toolkit
+
+ ${versions.java-security-toolkit}
+
diff --git a/serialized-entity/pom.xml b/serialized-entity/pom.xml
index 754089acf182..1a8a7c9ba1f3 100644
--- a/serialized-entity/pom.xml
+++ b/serialized-entity/pom.xml
@@ -22,6 +22,10 @@
com.h2database
h2
+
+ io.github.pixee
+ java-security-toolkit
+
diff --git a/serialized-entity/src/main/java/com/iluwatar/serializedentity/CountrySchemaSql.java b/serialized-entity/src/main/java/com/iluwatar/serializedentity/CountrySchemaSql.java
index 971f875c6b81..026ca10869aa 100644
--- a/serialized-entity/src/main/java/com/iluwatar/serializedentity/CountrySchemaSql.java
+++ b/serialized-entity/src/main/java/com/iluwatar/serializedentity/CountrySchemaSql.java
@@ -24,6 +24,7 @@
*/
package com.iluwatar.serializedentity;
+import io.github.pixee.security.ObjectInputFilters;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -109,6 +110,7 @@ public int selectCountry() throws IOException, ClassNotFoundException {
Blob countryBlob = rs.getBlob("country");
ByteArrayInputStream baos = new ByteArrayInputStream(countryBlob.getBytes(1, (int) countryBlob.length()));
ObjectInputStream ois = new ObjectInputStream(baos);
+ ObjectInputFilters.enableObjectFilterIfUnprotected(ois);
country = (Country) ois.readObject();
LOGGER.info("Country: " + country);
}
diff --git a/serialized-entity/src/test/java/com/iluwatar/serializedentity/CountryTest.java b/serialized-entity/src/test/java/com/iluwatar/serializedentity/CountryTest.java
index 556aba1735ea..2890dc1c20e3 100644
--- a/serialized-entity/src/test/java/com/iluwatar/serializedentity/CountryTest.java
+++ b/serialized-entity/src/test/java/com/iluwatar/serializedentity/CountryTest.java
@@ -23,6 +23,7 @@
* THE SOFTWARE.
*/
package com.iluwatar.serializedentity;
+import io.github.pixee.security.ObjectInputFilters;
import org.junit.jupiter.api.Test;
import java.io.*;
@@ -85,6 +86,7 @@ void testSerializable(){
// De-serialize Country
try {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("output.txt"));
+ ObjectInputFilters.enableObjectFilterIfUnprotected(objectInputStream);
Country country = (Country) objectInputStream.readObject();
objectInputStream.close();
System.out.println(country);
diff --git a/tolerant-reader/pom.xml b/tolerant-reader/pom.xml
index c6716bb845cd..650fc22864a4 100644
--- a/tolerant-reader/pom.xml
+++ b/tolerant-reader/pom.xml
@@ -39,6 +39,10 @@
junit-jupiter-engine
test
+
+ io.github.pixee
+ java-security-toolkit
+
diff --git a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java
index 62410bde22f6..de257f9b3a0e 100644
--- a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java
+++ b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java
@@ -24,6 +24,7 @@
*/
package com.iluwatar.tolerantreader;
+import io.github.pixee.security.ObjectInputFilters;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -90,6 +91,7 @@ public static RainbowFish readV1(String filename) throws IOException, ClassNotFo
try (var fileIn = new FileInputStream(filename);
var objIn = new ObjectInputStream(fileIn)) {
+ ObjectInputFilters.enableObjectFilterIfUnprotected(objIn);
map = (Map) objIn.readObject();
}