fix(bluebubbles): resolve SecretRef password before trimming in webhook auth#76411
fix(bluebubbles): resolve SecretRef password before trimming in webhook auth#76411Kailigithub wants to merge 1 commit intoopenclaw:mainfrom
Conversation
|
Codex review: needs changes before merge. Summary Reproducibility: yes. by source inspection: current main accepts SecretRef passwords but the webhook auth callback calls Next step before merge Security Review findings
Review detailsBest possible solution: Resolve BlueBubbles password SecretRefs through the runtime secret-resolution contract before webhook auth comparison, then add focused regression coverage and a changelog entry. Do we have a high-confidence way to reproduce the issue? Yes, by source inspection: current main accepts SecretRef passwords but the webhook auth callback calls Is this the best way to solve the issue? No. The direction is right, but this diff swaps the crash for fail-closed authentication because Full review comments:
Overall correctness: patch is incorrect Acceptance criteria:
What I checked:
Likely related people:
Remaining risk / open question:
Codex review notes: model gpt-5.5, reasoning high; reviewed against 5f5e0a3633c2. |
|
Thanks @Kailigithub for the patch. The merged fix in #76449 includes the BlueBubbles webhook auth hardening so SecretRef password values no longer crash the trim path and unresolved refs are rejected safely. Closing this PR as superseded by the merged fix. |
The webhook authentication handler in
extensions/bluebubbles/src/monitor.tscalls.trim()directly ontarget.account.config.password. When the password is configured as a SecretRef object instead of a plain string, this throwsTypeError: password.trim is not a function.All other consumers of the password field in the bluebubbles extension (
actions.ts,probe.ts,accounts.ts,monitor-processing.ts) already usenormalizeSecretInputString()to resolve SecretRef values before operating on them. The webhook auth path was missed.Added
normalizeSecretInputStringimport and wrapped the password access so the SecretRef is resolved to a plain string before.trim()is called.Closes #76369