Slack Unfurl Exfiltration Vector — Untrusted Fetch then Data-Bearing Link Send
This rule looks for an AI agent that fetches content from an outside website and then, shortly after, sends a Slack message containing a crafted link to a non-Slack host. The pattern matches a known Slack link-preview (unfurl) exfiltration technique where sensitive data is smuggled out inside a URL that Slack automatically fetches to generate a preview.
How the attack works
An AI agent or a tool it controls first retrieves content from a public external website. Within about 15 minutes, the same agent sends a message to a Slack channel, file, or webhook that contains a link engineered to carry data (for example, a URL with sensitive parameters) pointing at a host outside Slack. When Slack unfurls that link to build a preview, its own infrastructure fetches the URL and effectively transmits the embedded data to the attacker-controlled host. The rule only sees and flags the outbound Slack message with the crafted link — it does not and cannot observe Slack's own unfurl fetch, which happens on Slack's servers.
Netzilo detection
Netzilo reports this behaviour when it is observed.
- Signature ID
- 6f1c2d84-9a37-4e51-b0c2-7d5e83a41f96
- Severity
- Medium
Why it matters
An attacker who can inject instructions into an agent's workflow can use Slack's automatic link preview feature to leak internal data to an external server, using a legitimate business channel as the exit path. This is one narrow, detectable link in that chain, not proof that data actually left the network.
What you can do
- →Review any alert by checking whether the linked host matches the site the agent just fetched from, or whether the link contains credential-like or unusually long encoded parameters — these are stronger signs of exfiltration than a normal shared link.
- →Turn off or restrict automatic link unfurling in Slack for bots and integrations that don't need it, especially for links to unfamiliar external domains.
- →Require agents to use masked or descriptive link text rather than raw URLs when posting to Slack, so payload-bearing links are easier to spot.
- →Restrict which external hosts an AI agent is allowed to fetch from and post links to, and log agent-initiated Slack posts for periodic manual review.
Known benign look-alikes
- Agent researches a vendor page or documentation site and then legitimately shares a long presigned / tokenised link (S3, Google Drive, Notion, Figma, Grafana snapshot, CI artefact) into Slack. Mitigated by requiring the link to be masked with a label that does not name its own host, or to carry credential-shaped material, or to point at the very host the agent just fetched from.
- Release or alerting bots posting Slack mrkdwn links with build hashes or signed URLs. Mitigated by the same masked/closed-loop/secret-marker discriminator and by the 15-minute window tying the send to a preceding public fetch.
- Support workflows where the agent scrapes a customer page and then posts that same page's link back into Slack — this legitimately trips the closed-loop signal. Expect these; they are the main residual noise source and are why the action is report.
- URL shorteners and analytics redirectors whose paths look like encoded blobs.
- Multiple Slack sends about the same external host inside an hour are suppressed by a per-link-host cooldown, so a chatty thread yields one finding, not many.