CVE-2026-61654: SQL Injection
Lightdash is an open source business intelligence platform. In affected versions through 0.3213.0, the dbt Cloud webhook POST /api/v1/projects/{projectUuid}/dbt-cloud/webhook has no authentication middleware or signature validation. In packages/backend/src/controllers/projectController.ts, testWebhook() accepts accountId and runId from a job.run.completed request and passes them to createPreviewWithExplores() in packages/backend/src/services/ProjectService/ProjectService.ts. These unsanitized values are interpolated into the server-side dbt Cloud API URL, which is requested with the victim project's API key in the Authorization header. Path traversal through accountId changes the requested path on cloud.getdbt.com without changing its host, so the credential-bearing request reaches an attacker-influenced path on that fixed host. The advisory claims API-key theft, but the supplied evidence does not establish that the attacker can observe the Authorization header. The unauthenticated webhook also allows preview creation. The target must be a dbt Cloud IDE project and the attacker must know its projectUuid; the UUID is not enumerable but can be discovered in shared or multi-tenant contexts. Version 0.3214.0 fixes identifier path traversal and verifies webhook HMAC signatures only when a secret is configured; without a secret, unsigned webhooks continue to be processed.
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Lightdashto a version that resolves this vulnerability.Fixed in 0.3214.0 - Configuration
Configure a webhook secret so Lightdash verifies dbt Cloud webhook HMAC signatures; unsigned webhooks continue to be processed when no secret is configured.
dbt Cloud webhook webhook HMAC secret = configured
Event History
Frequently Asked Questions
Which deployments are exposed to unauthenticated requests?
The affected endpoint applies to dbt Cloud IDE projects. An attacker must know the target project's projectUuid; it is not enumerable, but the provided data notes that it can be discovered.
What does an attacker need to send to trigger the issue?
No authentication or webhook-signature validation is required. The attacker can submit a job.run.completed webhook request containing attacker-controlled accountId and runId values.
What is the practical impact of exploiting the webhook?
An unauthenticated attacker can create previews and can influence the path requested from cloud.getdbt.com using the victim project's dbt Cloud API key. Although the advisory claims API-key theft, the supplied evidence does not establish that an attacker can observe the Authorization header.