Lightdash сохраняет URL-адрес веб-перехватчика, предоставленный при запланированной доставке, а затем отправляет на него сообщения из sendWebhook в packages/backend/src/clients/GoogleChat/GoogleChatClient.ts и в packages/backend/src/clients/MicrosoftTeams/MicrosoftTeamsClient.ts. В затронутых версиях оба вызова напрямую извлекают сохраненный URL-адрес. Помощник validatePublicHttpUrl в packages/backend/src/utils/ssrfProtection.ts, используемый для URL-адресов серверов MCP, не применяется ни к одному из путей, а поля веб-перехватчика не несут ограничений URL-адреса на стороне сервера.
Таким образом, пользователь, способный создать или инициировать запланированную доставку, может указать серверу выдавать POST-запросы на частные адреса, адреса обратной связи и локальные адреса, включая конечные точки облачных метаданных, и может отличать доступные внутренние службы от недоступных по возникающим ошибкам. Восходящий ответ никогда не возвращается запрашивающей стороне; в случае сбоя его тело вместо этого записывается в журнал сервера. Версия 1.146.4 направляет обоих клиентов через postSchedulerWebhook из packages/backend/src/utils/schedulerWebhookValidation вместо прямого вызова fetch.
Показать оригинальное описание (EN)
Lightdash stores the webhook URL supplied with a scheduled delivery and later posts to it from sendWebhook in packages/backend/src/clients/GoogleChat/GoogleChatClient.ts and in packages/backend/src/clients/MicrosoftTeams/MicrosoftTeamsClient.ts. In affected versions both call fetch on the stored URL directly. The validatePublicHttpUrl helper in packages/backend/src/utils/ssrfProtection.ts, used for MCP server URLs, is not applied on either path, and the webhook fields carry no server-side URL constraint. A user able to create or trigger a scheduled delivery can therefore direct the server to issue POST requests to private, loopback and link-local addresses, including cloud metadata endpoints, and can distinguish reachable internal services from unreachable ones through the resulting errors. The upstream response is never returned to the requester; on a failure status its body is written to the server log instead. Version 1.146.4 routes both clients through postSchedulerWebhook from packages/backend/src/utils/schedulerWebhookValidation rather than calling fetch directly.
Характеристики атаки
Последствия
Строка CVSS v4.0