Skip to content

Commit b105e2c

Browse files
committed
sec(store, server): disable remote access for arthasstart
1 parent fc391a7 commit b105e2c

4 files changed

Lines changed: 30 additions & 3 deletions

File tree

hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/config/ServerOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ public class ServerOptions extends OptionHolder {
439439
"arthas.ip",
440440
"arthas bound ip",
441441
disallowEmpty(),
442-
"0.0.0.0"
442+
"127.0.0.1"
443443
);
444444

445445
public static final ConfigOption<String> ARTHAS_DISABLED_COMMANDS =

hugegraph-store/hg-store-node/src/main/java/org/apache/hugegraph/store/node/AppConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,10 +211,10 @@ public class ArthasConfig {
211211
@Value("${arthas.httpPort:8565}")
212212
private String httpPort;
213213

214-
@Value("${arthas.ip:0.0.0.0}")
214+
@Value("${arthas.ip:127.0.0.1}")
215215
private String arthasip;
216216

217-
@Value("${arthas.disabledCommands:jad}")
217+
@Value("${arthas.disabledCommands:jad,ognl,vmtool}")
218218
private String disCmd;
219219
}
220220

hugegraph-store/hg-store-node/src/main/java/org/apache/hugegraph/store/node/controller/PartitionAPI.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.HashMap;
2323
import java.util.List;
2424
import java.util.Map;
25+
import java.util.Objects;
2526

2627
import org.apache.hugegraph.pd.common.PDException;
2728
import org.apache.hugegraph.pd.grpc.Metapb;
@@ -44,6 +45,8 @@
4445
import org.springframework.web.bind.annotation.RequestMapping;
4546
import org.springframework.web.bind.annotation.RequestParam;
4647
import org.springframework.web.bind.annotation.RestController;
48+
import org.springframework.web.context.request.RequestContextHolder;
49+
import org.springframework.web.context.request.ServletRequestAttributes;
4750

4851
import com.alipay.sofa.jraft.entity.PeerId;
4952
import com.alipay.sofa.jraft.util.Endpoint;
@@ -189,6 +192,16 @@ public Map<String, Object> cleanPartition(@PathVariable(value = "id") int id) th
189192
@GetMapping(value = "/arthasstart", produces = "application/json")
190193
public Map<String, Object> arthasstart(
191194
@RequestParam(required = false, defaultValue = "") String flags) {
195+
String remoteAddr = ((ServletRequestAttributes) Objects.requireNonNull(
196+
RequestContextHolder.getRequestAttributes())).getRequest().getRemoteAddr();
197+
198+
boolean isLocalRequest = "127.0.0.1".equals(remoteAddr) ||
199+
"[0:0:0:0:0:0:0:1]".equals(remoteAddr);
200+
if (!isLocalRequest){
201+
List<String> ret = new ArrayList<>();
202+
ret.add("Arthas start is ONLY allowed from localhost.");
203+
return forbiddenMap("arthasstart", ret);
204+
}
192205
HashMap<String, String> configMap = new HashMap<>();
193206
configMap.put("arthas.telnetPort", appConfig.getArthasConfig().getTelnetPort());
194207
configMap.put("arthas.httpPort", appConfig.getArthasConfig().getHttpPort());
@@ -225,6 +238,13 @@ public Map<String, Object> okMap(String k, Object v) {
225238
return map;
226239
}
227240

241+
public Map<String, Object> forbiddenMap(String k, Object v){
242+
HashMap<String, Object> map = new HashMap<>();
243+
map.put("status", 403);
244+
map.put(k,v);
245+
return map;
246+
}
247+
228248
@Data
229249
public class Raft {
230250

hugegraph-store/hg-store-node/src/main/resources/application.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,10 @@ logging:
4949
config: classpath:log4j2-dev.xml
5050
level:
5151
root: info
52+
53+
arthas:
54+
telnetPort: 8566
55+
httpPort: 8565
56+
# Only allow starting arthas locally
57+
ip: 127.0.0.1
58+
disabledCommands: jad,ognl,vmtool

0 commit comments

Comments
 (0)