HTTP target destination URL is rendered in full and can itself be a bearer credential #115
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Surfaced while implementing #113, which masks the Slack target's webhook URL because it is a bearer credential.
The same property holds for
httptargets: a destination URL is frequently a Slack, Discord or Teams incoming-webhook endpoint, where the path segments are the secret. #113's done-criteria explicitly require showing thehttpdestination URL as a labelled field, so it ships rendered in full — deliberate, and out of scope there, but it leaves the leak reachable via a different target type.Needs your call, because masking unconditionally costs real usability: the destination is the one field an operator most needs to read back.
Options:
maskURLfrominternal/delivery/target_config_view.go(scheme://host/...).Recommendation: option 1. It is the same rule already applied to Slack, needs no heuristic that can be wrong in both directions, and the full value stays available in the edit form where it is actually needed.
Done-criteria once decided: a handler test asserting a secret-bearing
httpdestination does not render its path segments on the source detail page.Correction before you decide: this issue's claim that "the full value stays available in the edit form" is false. There is no target edit route —
internal/server/routes.gohas only create, toggle and delete, andsource_edit.htmledits the webhook, not its targets. So option 1 makes the destination URL write-once and unrecoverable from the UI, not merely hidden on one page. Filed as #127, which is what makes option 1 cheap again.Recommendation unchanged (option 1), with that caveat: the value is a credential, and it is already unreadable-by-design for
slacktargets.Implemented speculatively in #126 so you can decide by merging or closing. It is
WIP:-prefixed and therefore unmergeable until you rule; strip the prefix to accept. Sibling-path audit in that PR found no second leak:source_logs,sources,source_edit, the SSRF rejection path and/metricsare all clean, andTargetViewhas no raw config field.clawbot referenced this issue2026-08-17 23:50:11 +02:00