This is an automated email from the ASF dual-hosted git repository.

lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git


The following commit(s) were added to refs/heads/rocketmq-studio by this push:
     new 6ce131b1f fix(acl): reject zero-only plain address ranges (#7315)
6ce131b1f is described below

commit 6ce131b1f77c76a03dc5e9b6cfafb2e745f251fc
Author: Xiao Yang <[email protected]>
AuthorDate: Mon Oct 26 16:38:25 2026 +0800

    fix(acl): reject zero-only plain address ranges (#7315)
    
    * fix(acl): reject zero-only plain address ranges
---
 .../instance/acl/PlainAclRemoteAddressValidator.java     |  4 +++-
 .../rocketmq/studio/instance/acl/AclServiceTest.java     |  8 ++++++--
 .../instance/acl/PlainAclRemoteAddressValidatorTest.java | 16 ++++++++++++++++
 3 files changed, 25 insertions(+), 3 deletions(-)

diff --git 
a/server/src/main/java/org/apache/rocketmq/studio/instance/acl/PlainAclRemoteAddressValidator.java
 
b/server/src/main/java/org/apache/rocketmq/studio/instance/acl/PlainAclRemoteAddressValidator.java
index 283a273b2..45c95c207 100644
--- 
a/server/src/main/java/org/apache/rocketmq/studio/instance/acl/PlainAclRemoteAddressValidator.java
+++ 
b/server/src/main/java/org/apache/rocketmq/studio/instance/acl/PlainAclRemoteAddressValidator.java
@@ -211,7 +211,9 @@ final class PlainAclRemoteAddressValidator {
         try {
             int start = Integer.parseInt(startValue, radix);
             int end = Integer.parseInt(endValue, radix);
-            return start <= end && end <= maximum;
+            // The broker only initializes a range when its upper bound is 
positive. A zero-only
+            // range can fail matching or widen a trailing wildcard; use a 
literal zero instead.
+            return start <= end && end > 0 && end <= maximum;
         } catch (NumberFormatException ignored) {
             return false;
         }
diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/instance/acl/AclServiceTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/instance/acl/AclServiceTest.java
index f1213d4ae..9618d89d3 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/instance/acl/AclServiceTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/instance/acl/AclServiceTest.java
@@ -1022,7 +1022,9 @@ class AclServiceTest {
     }
 
     @ParameterizedTest
-    @ValueSource(strings = {"999.999.999.999", "10.0.0.0/8", 
"192.168.100-1.*", "192.168.1.{}"})
+    @ValueSource(strings = {"999.999.999.999", "10.0.0.0/8", 
"192.168.100-1.*", "192.168.1.{}",
+        "192.168.1.0-0", "192.168.0-0.*", "192.168.1.000-000", 
"192.168.000-000.*",
+        "2001:db8::0-0", "2001:db8::0-0:*", "2001:db8::0000-0000", 
"2001:db8::0000-0000:*"})
     void 
createAndUpdatePlainAccessConfigShouldRejectInvalidWhiteRemoteAddress(String 
whiteRemoteAddress) {
         PlainAccessConfigVO config = PlainAccessConfigVO.builder()
                 .accessKey("ak-1")
@@ -1039,7 +1041,9 @@ class AclServiceTest {
 
     @ParameterizedTest
     @ValueSource(strings = {"*", "192.168.*.*", "192.168.1-100.*", 
"192.168.1.{1,2,3}",
-        "192.168.1.10,192.168.1.11", "2001:db8::1"})
+        "192.168.1.10,192.168.1.11", "2001:db8::1",
+        "192.168.0.*", "192.168.0-1.*", "192.168.1-1.*", "192.168.1.0",
+        "2001:db8::0:*", "2001:db8::0-1:*", "2001:db8::1-1:*", "2001:db8::0"})
     void 
createAndUpdatePlainAccessConfigShouldAcceptValidWhiteRemoteAddress(String 
whiteRemoteAddress) {
         PlainAccessConfigVO config = PlainAccessConfigVO.builder()
                 .accessKey("ak-1")
diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/instance/acl/PlainAclRemoteAddressValidatorTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/instance/acl/PlainAclRemoteAddressValidatorTest.java
index 22ce97d24..202a9175f 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/instance/acl/PlainAclRemoteAddressValidatorTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/instance/acl/PlainAclRemoteAddressValidatorTest.java
@@ -30,6 +30,14 @@ class PlainAclRemoteAddressValidatorTest {
         "127.0.0.1",
         "192.168.*.*",
         "192.168.1-100.*",
+        "192.168.0.*",
+        "192.168.0-1.*",
+        "192.168.1-1.*",
+        "192.168.1.0",
+        "2001:db8::0:*",
+        "2001:db8::0-1:*",
+        "2001:db8::1-1:*",
+        "2001:db8::0",
         "192.168.1.{1,2,3}",
         "192.168.1.10,192.168.1.11",
         "*:*:*:*:*:*:*:*",
@@ -48,6 +56,14 @@ class PlainAclRemoteAddressValidatorTest {
         "10.0.0.0/8",
         "192.168.300.*",
         "192.168.100-1.*",
+        "192.168.1.0-0",
+        "192.168.0-0.*",
+        "192.168.1.000-000",
+        "192.168.000-000.*",
+        "2001:db8::0-0",
+        "2001:db8::0-0:*",
+        "2001:db8::0000-0000",
+        "2001:db8::0000-0000:*",
         "192.168.1.{}",
         "192.168.1.{1,}",
         "192.168.{1,2}.1",

Reply via email to