This commit is contained in:
Eli Peter 2026-06-05 10:16:30 -05:00 committed by GitHub
parent 55247b7fcd
commit 991c84a1eb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
1464 changed files with 225448 additions and 1985 deletions

View file

@ -0,0 +1,39 @@
// Phase 03 (Track J.1) Java deserialize benign fixture.
//
// Same shape as the vuln fixture but wraps `ObjectInputStream` in a
// subclass whose `resolveClass` only accepts a tiny allowlist. A
// gadget chain never resolves so no Deserialize probe fires.
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InvalidClassException;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class Benign {
static final Set<String> ALLOWED =
new HashSet<>(Arrays.asList("java.lang.Integer", "java.lang.String"));
static class RestrictedObjectInputStream extends ObjectInputStream {
RestrictedObjectInputStream(ByteArrayInputStream s) throws IOException {
super(s);
}
@Override
protected Class<?> resolveClass(ObjectStreamClass desc)
throws IOException, ClassNotFoundException {
if (!ALLOWED.contains(desc.getName())) {
throw new InvalidClassException("blocked: " + desc.getName());
}
return super.resolveClass(desc);
}
}
public static Object run(byte[] payload) throws Exception {
ByteArrayInputStream bis = new ByteArrayInputStream(payload);
try (RestrictedObjectInputStream ois = new RestrictedObjectInputStream(bis)) {
return ois.readObject();
}
}
}