Summary
On macOS, the Claude CLI keychain credential refresh path constructed a shell command to write the updated JSON blob into Keychain via security add-generic-password -w .... Because OAuth tokens are user-controlled data, this created an OS command injection risk.
The fix avoids invoking a shell by using execFileSync("security", argv) and passing the updated keychain payload as a literal argument.
Affected Packages / Versions
- Package:
openclaw (npm)
- Platform: macOS only
- Affected versions:
<= 2026.2.13
Fix
- Patched version:
>= 2026.2.14 (next release)
- Fix PR: #15924
- Fix commits (merged to
main):
9dce3d8bf83f13c067bc3c32291643d2f1f10a06
66d7178f2d6f9d60abad35797f97f3e61389b70c
b908388245764fb3586859f44d1dff5372b19caf
Thanks @aether-ai-agent for reporting.
References
Summary
On macOS, the Claude CLI keychain credential refresh path constructed a shell command to write the updated JSON blob into Keychain via
security add-generic-password -w .... Because OAuth tokens are user-controlled data, this created an OS command injection risk.The fix avoids invoking a shell by using
execFileSync("security", argv)and passing the updated keychain payload as a literal argument.Affected Packages / Versions
openclaw(npm)<= 2026.2.13Fix
>= 2026.2.14(next release)main):9dce3d8bf83f13c067bc3c32291643d2f1f10a0666d7178f2d6f9d60abad35797f97f3e61389b70cb908388245764fb3586859f44d1dff5372b19cafThanks @aether-ai-agent for reporting.
References