mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-19 15:09:25 +00:00
Updated to latest Paper 1.20.6 branch, unlike Leaf 1.20.4, this upstream update didn't include backport from latest Gale branch, we recommend to use Leaf 1.21.1
49 lines
2.9 KiB
Diff
49 lines
2.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com>
|
|
Date: Sat, 9 Mar 2024 10:54:59 -0500
|
|
Subject: [PATCH] Block log4j rce exploit in chat
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
index 00005518d555aef1940919a9b7894adca04b4fea..f41c6154c134fd6354b25e3f76458b565924af11 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
@@ -2435,6 +2435,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
|
}
|
|
|
|
private void tryHandleChat(String s, Runnable runnable, boolean sync) { // CraftBukkit
|
|
+ if (ServerGamePacketListenerImpl.isLog4jExploit(s)) return; // Leaf - Block log4j rce exploit in chat
|
|
+
|
|
if (ServerGamePacketListenerImpl.isChatMessageIllegal(s)) {
|
|
this.disconnect(Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper
|
|
} else if (this.player.isRemoved() || this.player.getChatVisibility() == ChatVisiblity.HIDDEN) { // CraftBukkit - dead men tell no tales
|
|
@@ -2466,6 +2468,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
|
}
|
|
}
|
|
|
|
+ // Leaf start - Block log4j rce exploit in chat
|
|
+ public static boolean isLog4jExploit(String message) {
|
|
+ java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(".*\\$\\{[^}]*}.*");
|
|
+ java.util.regex.Matcher matcher = pattern.matcher(message);
|
|
+
|
|
+ return matcher.find();
|
|
+ }
|
|
+ // Leaf end
|
|
+
|
|
public static boolean isChatMessageIllegal(String message) {
|
|
for (int i = 0; i < message.length(); ++i) {
|
|
if (!StringUtil.isAllowedChatCharacter(message.charAt(i))) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index 0d2803a094b48fe864d59c342cc65f480ce747c3..8fbddb424946d8197c3b3cbcf5ea4e00d39232e6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -751,6 +751,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
|
|
if (this.getHandle().connection == null) return;
|
|
|
|
+ if (ServerGamePacketListenerImpl.isLog4jExploit(msg)) return; // Leaf - Block log4j rce exploit in chat
|
|
+
|
|
// Paper start - Improve chat handling
|
|
if (ServerGamePacketListenerImpl.isChatMessageIllegal(msg)) {
|
|
this.getHandle().connection.disconnect(Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper - kick event causes
|