Bug type
Behavior bug (incorrect output/state without crash)
Beta release blocker
No
Summary
The gateway skills.update method stores secret-bearing fields under skills.entries.<skillKey>, but its success response returns the updated entry without redaction. If apiKey or secret values in env are supplied, they are echoed back in plaintext in the RPC response. This can leak secrets into Control UI websocket traffic, client logs, session transcripts, or any wrapper that records gateway responses.
Steps to reproduce
- Connect to the gateway with a client that has
operator.admin scope.
- Call
skills.update with a payload like:
{
"skillKey": "demo-skill",
"apiKey": "secret-api-key-123",
"env": {
"GEMINI_API_KEY": "secret-env-key-456",
"BRAVE_REGION": "us"
}
}
- Inspect the successful RPC response payload.
- Observe that
payload.config.apiKey and payload.config.env.GEMINI_API_KEY are returned in plaintext.
Expected behavior
skills.update should never echo secret-bearing values in plaintext. The response should either:
- redact sensitive fields such as
apiKey and secret-like env values, or
- avoid returning the updated config object entirely and only return non-sensitive confirmation metadata.
Actual behavior
skills.update returns:
config.apiKey in plaintext
config.env[...] values in plaintext, including secret values
The current response path returns config: current directly instead of a redacted view.
OpenClaw version
2026.4.14
Operating system
Ubuntu 24.04
Install method
No response
Model
Not model-specific
Provider / routing chain
OpenClaw gateway -> skills.update handler -> config write -> gateway RPC response -> client / Control UI / websocket consumer
Additional provider/model setup details
No response
Logs, screenshots, and evidence
Impact and severity
No response
Additional information
No response
Bug type
Behavior bug (incorrect output/state without crash)
Beta release blocker
No
Summary
The gateway
skills.updatemethod stores secret-bearing fields underskills.entries.<skillKey>, but its success response returns the updated entry without redaction. IfapiKeyor secret values inenvare supplied, they are echoed back in plaintext in the RPC response. This can leak secrets into Control UI websocket traffic, client logs, session transcripts, or any wrapper that records gateway responses.Steps to reproduce
operator.adminscope.skills.updatewith a payload like:{ "skillKey": "demo-skill", "apiKey": "secret-api-key-123", "env": { "GEMINI_API_KEY": "secret-env-key-456", "BRAVE_REGION": "us" } }payload.config.apiKeyandpayload.config.env.GEMINI_API_KEYare returned in plaintext.Expected behavior
skills.updateshould never echo secret-bearing values in plaintext. The response should either:apiKeyand secret-likeenvvalues, orActual behavior
skills.updatereturns:config.apiKeyin plaintextconfig.env[...]values in plaintext, including secret valuesThe current response path returns
config: currentdirectly instead of a redacted view.OpenClaw version
2026.4.14
Operating system
Ubuntu 24.04
Install method
No response
Model
Not model-specific
Provider / routing chain
OpenClaw gateway ->
skills.updatehandler -> config write -> gateway RPC response -> client / Control UI / websocket consumerAdditional provider/model setup details
No response
Logs, screenshots, and evidence
Impact and severity
No response
Additional information
No response