Summary
OpenPanel exposes plaintext integration secrets through the notification.rules tRPC query because the query does not apply integration-secret redaction. A read-level project member may retrieve Slack bot tokens, webhook URLs, and authorization headers, which could enable unauthorized activity against connected external systems.
OpenPanel exposes plaintext integration secrets through the notification.rules tRPC query because the query does not apply integration-secret redaction. A read-level project member may retrieve Slack bot tokens, webhook URLs, and authorization headers, which could enable unauthorized activity against connected external systems.
Affected context
The issue occurs in OpenPanel project environments where read-level members can invoke the notification.rules query and the returned integration data is not passed through the expected redaction logic. Deployments that store Slack credentials, webhook URLs, or authorization headers in notification integrations may expose those values to users with otherwise limited project access.
The issue occurs in OpenPanel project environments where read-level members can invoke the notification.rules query and the returned integration data is not passed through the expected redaction logic. Deployments that store Slack credentials, webhook URLs, or authorization headers in notification integrations may expose those values to users with otherwise limited project access.
Exploit preconditions
- Attack surface: The OpenPanel project notification system and its tRPC API
- Required access: Read-level membership in an affected project
- Trigger point: Invocation of the
notification.rulesquery - Why exploitation is possible: The query returns integration data without applying the redaction routine intended to conceal sensitive fields
- Attack surface: The OpenPanel project notification system and its tRPC API
- Required access: Read-level membership in an affected project
- Trigger point: Invocation of the
notification.rulesquery - Why exploitation is possible: The query returns integration data without applying the redaction routine intended to conceal sensitive fields
Why this happens
The underlying bug is an incomplete data-protection path: a query that returns notification rules omits the redactIntegration processing step. As a result, values that should be treated as secrets are serialized and returned in plaintext to a caller with limited read access. This maps to CWE-200: Exposure of Sensitive Information to an Unauthorized Actor, because the authorization boundary permits access to project data but does not justify disclosure of embedded credentials.
The underlying bug is an incomplete data-protection path: a query that returns notification rules omits the redactIntegration processing step. As a result, values that should be treated as secrets are serialized and returned in plaintext to a caller with limited read access. This maps to CWE-200: Exposure of Sensitive Information to an Unauthorized Actor, because the authorization boundary permits access to project data but does not justify disclosure of embedded credentials.
Potential impact
- Attackers may obtain Slack bot tokens and act through connected Slack integrations.
- Attackers could use exposed webhook URLs to send unauthorized notifications or manipulate connected workflows.
- Exposed authorization headers may enable requests against external systems.
- Organizations may experience data disclosure, impersonation, service disruption, or follow-on compromise.
- Attackers may obtain Slack bot tokens and act through connected Slack integrations.
- Attackers could use exposed webhook URLs to send unauthorized notifications or manipulate connected workflows.
- Exposed authorization headers may enable requests against external systems.
- Organizations may experience data disclosure, impersonation, service disruption, or follow-on compromise.
General mitigation guidance
Mitigation should focus on enforcing consistent secret-handling and authorization boundaries across every response path.
Common defensive patterns include:
- Apply redaction centrally before returning integration objects from any API or query.
- Return only the minimum fields required for a caller's role and task.
- Treat tokens, webhook URLs, and authorization headers as secrets regardless of their containing object.
- Separate configuration metadata from secret material and avoid exposing secrets to read-level users.
- Rotate potentially exposed credentials and review connected-system permissions.
- Use least-privilege credentials with narrowly scoped access and short lifetimes where supported.
Mitigation should focus on enforcing consistent secret-handling and authorization boundaries across every response path.
Common defensive patterns include:
- Apply redaction centrally before returning integration objects from any API or query.
- Return only the minimum fields required for a caller's role and task.
- Treat tokens, webhook URLs, and authorization headers as secrets regardless of their containing object.
- Separate configuration metadata from secret material and avoid exposing secrets to read-level users.
- Rotate potentially exposed credentials and review connected-system permissions.
- Use least-privilege credentials with narrowly scoped access and short lifetimes where supported.
How teams detect issues like this
Organizations can look for:
- Static analysis and code review checks confirming that all integration responses pass through approved redaction or secret-filtering functions.
- API contract tests that verify sensitive fields are absent for read-level and other restricted roles.
- Signals such as notification-rule responses containing token-like strings, authorization headers, or webhook credentials.
- Policy enforcement that blocks secret fields from serializers, logs, browser responses, and general-purpose project APIs.
- Audit-log review for unusual access to notification configuration endpoints and subsequent use of connected integrations.
Organizations can look for:
- Static analysis and code review checks confirming that all integration responses pass through approved redaction or secret-filtering functions.
- API contract tests that verify sensitive fields are absent for read-level and other restricted roles.
- Signals such as notification-rule responses containing token-like strings, authorization headers, or webhook credentials.
- Policy enforcement that blocks secret fields from serializers, logs, browser responses, and general-purpose project APIs.
- Audit-log review for unusual access to notification configuration endpoints and subsequent use of connected integrations.

