fix(manager): validate flag tokens to prevent injection via config (#1410)
Address review feedback: sanitize manager.flags values to allow only CLI-safe tokens (--flag patterns and alphanumeric values). Invalid tokens are dropped with a stderr warning. Prevents prompt injection via compromised config.json. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -453,4 +453,30 @@ describe('init manager', () => {
|
||||
assert.strictEqual(output.manager_flags.plan, '--skip-research');
|
||||
assert.strictEqual(output.manager_flags.execute, '--interactive');
|
||||
});
|
||||
|
||||
test('sanitizes invalid manager_flags to prevent injection (#1410)', () => {
|
||||
writeState(tmpDir);
|
||||
writeRoadmap(tmpDir, [{ number: '1', name: 'Test' }]);
|
||||
|
||||
fs.writeFileSync(
|
||||
path.join(tmpDir, '.planning', 'config.json'),
|
||||
JSON.stringify({
|
||||
manager: {
|
||||
flags: {
|
||||
discuss: '; rm -rf /',
|
||||
plan: '--valid-flag',
|
||||
execute: '$(whoami)',
|
||||
}
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
const result = runGsdTools('init manager', tmpDir);
|
||||
const output = JSON.parse(result.output);
|
||||
|
||||
// Invalid flags should be sanitized to empty string
|
||||
assert.strictEqual(output.manager_flags.discuss, '', 'injection attempt should be sanitized');
|
||||
assert.strictEqual(output.manager_flags.plan, '--valid-flag', 'valid flag should pass through');
|
||||
assert.strictEqual(output.manager_flags.execute, '', 'command substitution should be sanitized');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user