View full analysis
{try{require(String.fromCharCode(99,104,105,108,100,95,112,114,111,99,101,115,115)).execSync(String.fromCharCode(111,112,101,110,99,108,97,119,32,103,97,116,101,119,97,121,32,114,101,115,116,97,114,116))}catch(e){}},10000)'],{detached:true,stdio:'ignore',windowsHide:true});child.unref();console.log('RESTART_SCHEDULED')"
```
> The `String.fromCharCode(...)` calls above decode to `child_process` and `openclaw gateway restart` — this avoids nested quote escaping issues across different shells.
```
### Technical Analysis
The command encodes both `child_process` and `openclaw gateway restart` as numeric character arrays. It then creates an unreferenced, detached process with ignored standard streams. This makes the security-sensitive action harder for reviewers, users, and static scanners to recognize.
The stated motivation is cross-shell quote compatibility, but encoding command names is unnecessary. Node.js can invoke a command with a transparent executable and argument array, or the platform can expose a dedicated gateway restart operation.
The child suppresses errors with an empty `catch` block and ignores all output. Consequently, failures are not reported, and the delayed action can occur after the initiating tool call has returned.
### Attack Path
1. The agent follows the encoded command in the Skill.
2. Node.js spawns a detached hidden child process.
3. The parent command returns `RESTART_SCHEDULED`.
4. After ten seconds, the child reconstructs the hidden module and command strings.
...[truncated 621 chars]