A webhook accepts an HTTPS POST and delivers it to a chat channel. That makes Discord, Slack and Telegram convenient drop points for credential stealers and small-scale exfiltration. The endpoints have recognisable URL structures, and in most corporate environments nothing but a browser or a sanctioned integration should be calling them.
Signals at a Glance
| Signal | Where | ATT&CK |
|---|---|---|
POST to /api/webhooks/ on discord.com or discordapp.com | Proxy, DNS, EDR | T1567.004 |
POST to api.telegram.org/bot with sendDocument | Proxy, EDR | T1567.004 |
POST to hooks.slack.com/services/ from a non-integration host | Proxy | T1567.004 |
| Request to paste or request-capture services (Pastebin, webhook.site, transfer.sh) | Proxy, DNS | T1567 |
| Script interpreter or unsigned binary as the network initiator | EDR network events | T1567 |
Endpoint URL Patterns
Webhook URLs follow fixed structures, which makes them one of the more precise network detections. Match the path as well as the host, and require a POST, since a user reading a Discord link in a browser is not exfiltration:
title: Webhook Or Paste Service Upload From Non-Browser Client
logsource:
category: proxy
detection:
webhook:
c-uri|contains:
- 'discord.com/api/webhooks/'
- 'discordapp.com/api/webhooks/'
- 'hooks.slack.com/services/'
- 'api.telegram.org/bot'
- 'pastebin.com/api/api_post.php'
- 'webhook.site/'
- 'requestbin'
method:
cs-method: 'POST'
filter_browser:
c-useragent|contains: 'Chrome/'
condition: webhook and method and not filter_browser
level: medium
# tune/validate: allowlist CI/CD and monitoring integrations by source host
Endpoint telemetry tells you which process made the call, which the proxy cannot. A PowerShell session or a binary in a user profile talking to a webhook is a high-quality lead:
// Microsoft Defender XDR (KQL) - webhook or paste endpoints from non-browser processes
// tune/validate: extend the allowlist with sanctioned chat clients
let ok = dynamic(["chrome.exe","msedge.exe","firefox.exe","discord.exe","slack.exe","teams.exe","ms-teams.exe"]);
DeviceNetworkEvents
| where Timestamp > ago(7d)
| where RemoteUrl has_any ("discord.com","discordapp.com","hooks.slack.com","api.telegram.org","pastebin.com","webhook.site","transfer.sh")
| where InitiatingProcessFileName !in~ (ok)
| summarize conns = count(), firstSeen = min(Timestamp), lastSeen = max(Timestamp)
by DeviceName, InitiatingProcessFileName, InitiatingProcessFolderPath, RemoteUrl
| order by conns desc
Triage and Policy
- If your organisation does not use Discord or Telegram, block the domains outright; it removes the channel and turns every attempt into a high-confidence alert.
- A webhook URL embeds the secret. When you capture one in logs or a sample, report it to the platform so the webhook can be revoked.
- Check the process lineage: infostealers typically execute from a download or a malicious attachment, then post once and exit.
- For Slack and Teams, inventory approved incoming webhooks centrally so anything outside the list stands out.
SigmaHQ rules for Discord, Telegram and paste-site access, Elastic detections for suspicious webhook calls, and public malware analysis that documents webhook use by stealer families. Baseline your own environment — engineering teams use Slack and Discord webhooks for build and monitoring alerts.
Build Detections That Fire
Mjolnir Security helps blue teams turn threat intelligence into high-fidelity detections across endpoint, network, identity and cloud telemetry.
- Detection Engineering We build and tune detections mapped to ATT&CK from your own telemetry.
- Threat Hunting as a Service Hypothesis-driven hunts for the behaviours on this page.
- 24/7 Incident Response Containment when a detection fires. Call +1 833 403 5875.
Stay ahead of emerging threats. Get notified when we publish new intelligence reports and advisories.
Subscribe to Alerts