ShadowTrackr

RSS feed

Spotting subdomain takeovers, and better alert webhooks

02 November 2026

Every domain collects old DNS records. A campaign site that was shut down, a test server that was never removed, a hosting account that expired. The record stays, and it keeps pointing at a server that is no longer yours. That is how subdomain takeovers happen. I added a report for this to ShadowTrackr, and I extended the webhook options so you can get the alerts in the tools you already use.

The Subdomain Takeover Report

The new report lists web addresses of yours that point to a server that is not set up for them. You can run it from the search bar with $subdomain_takeover_report. It also appears in the report library under the DNS category, where you can schedule it.

Each result is one of two things:

  • Possible takeover. The server shows someone else's live website for your name. Whoever runs that server could publish content under your domain.
  • Stale DNS record. Only a placeholder answers: a registrar's "reserved" page, a for-sale page, or the default page of a hosting company or web server. Nobody else's website is there, but the record serves no purpose and could still be taken over later.

Addresses that point to another domain of your own organisation are left out, because those are not findings. Possible takeovers are listed first. The fix is usually simple: remove the DNS record, or point the name back to a server you control.

The weekly PDF report now has a "Subdomain takeover" section too. It sits in the urgent part of the report, so you will see these findings without having to go looking for them.

More webhook options

An alert can call a webhook instead of sending an email. Choose Call webhook as the action and pick a payload:

  • Results as JSON, or No data (just a ping that the alert fired)
  • Microsoft Teams (Adaptive Card), Slack, Mattermost, Discord and Google Chat messages
  • PagerDuty, which creates an incident
  • Splunk HEC event, one event per result row

You can also add up to 10 custom headers to every call, for example an Authorization header to authenticate to the receiving tool. Header values are stored encrypted and shown masked after you save.

A good combination is an alert on $subdomain_takeover_report that posts to your security channel. The same applies to any other query.

One thing to know: ShadowTrackr verifies the TLS certificate of your endpoint, and there is no option to switch that off. A self-signed certificate is refused. This matters for self-managed Splunk, which ships with a self-signed certificate. The documentation has step-by-step instructions for each tool.

Find every PHP server affected by CVE-2026-109618 and CVE-2026-109619

21 October 2026

Find every PHP server affected by CVE-2026-109618 and CVE-2026-109619

Two new PHP vulnerabilities, CVE-2026-109618 and CVE-2026-109619, are out. There are also referred to as php2shell

Run this in ShadowTrackr to find all your php servers:

$software_overview_report software=php* last_seen>-7d

You get every host where PHP was detected in the last 7 days, across all your domains, subdomains and IPs, with the detected version for each.

  • software=php* matches every PHP version string.
  • last_seen>-7d drops decommissioned hosts, so you only see what's exposed now.

Patch internet-facing hosts first

Alert library: ready-made alerts, and better example queries

19 October 2026

Alert library: ready-made alerts, and better example queries

19 October 2026

In ShadowTrackr, anything you can write as a query can become an alert. That's powerful, but it has an obvious problem: a blank query box doesn't tell you what's worth alerting on. So there are now two things to help.

Example alerts in the docs

The alerts documentation has a set of example alerts. Under each query is a Run in ShadowTrackr link that shows what the query finds in your own data today. If the result looks right, paste the query in a new alert and set the trigger to is greater than 0.

A few examples:

index=events change=tcp_port_opened:3389 earliest=-1d
index=cves_assets cvss_score>=7 first_seen>-1d
index=events change=security_header_removed earliest=-1d

Always add earliest=-1d to event queries. Without it the query also counts old events, so it keeps matching, and an alert that fires once a day will fire again every day.

I also wrote up the change= syntax. A single scan can change several things at once, and you still get one event on your timeline ("3 ports opened on host X"). With change=<field>:<value> you can alert on one specific value inside such an event, like port 3389 or protocol_added:TLS 1.0. This works for ports, certificates, DNS records and websites. Only events from after this feature was introduced can be matched, so older events won't show up.

The Alert library

Examples are nice, but copy-pasting is still work. So in the app, under Alerts → Alert library, you'll now find ready-made templates for the things most people want to know about. Pick one, adapt it if you like, and create it as your own alert. Every template fires when its query returns more than 0 results, and is throttled to at most once a day.

What's in there, by category:

Vulnerabilities

  • Critical vulnerability found (CVSS 9 or higher)
  • Actively exploited vulnerability matches your software (CISA KEV)
  • NCSC advisory matches your software

Hosts and ports

  • Remote access port opened (RDP, SSH, Telnet, VNC)
  • Database port opened (MySQL, PostgreSQL, MongoDB, Redis and friends)
  • Port changes with problems
  • Any new open port
  • Hosts with problems

Certificates

  • Certificate expires soon (within 14 days, not renewed)
  • Certificates with bad grades
  • Outdated TLS version enabled
  • Certificate issuer changed
  • New names added to a certificate

Domains and DNS

  • Domain expires soon
  • Domain nameservers changed
  • Domain registrar changed
  • DNSSEC switched off
  • Email security records (DKIM, SPF, DMARC) changed
  • New phishy domains

Websites

  • Website defaced
  • Website security header removed
  • Website security grade changed

Assets and discovery

  • New assets to review
  • New subdomain found for specific domain
  • Asset appeared on a blacklist

Data leaks

  • Keyword found in a data dump or the news
  • Email address found in a data breach

I picked these because they catch the stuff that goes wrong quietly. Nobody tells you that a deployment dropped your Content-Security-Policy header, or that the nameservers of a domain changed at the registry (which is how domains get hijacked). A certificate renewal that silently failed shows up as a browser warning for your visitors, unless you had an alert that told you two weeks earlier.

A few things to know

  • Critical vulnerability found needs an exact version match. If ShadowTrackr detected the software but not the version, this alert won't fire.
  • Domain expires soon doesn't cover Dutch .nl domains, because .nl doesn't publish expiry dates.
  • Any new open port is the strictest port alert and can be noisy on busy infrastructure. If it's too much, start with the remote access and database port alerts.
  • New subdomain found for specific domain has shadowtrackr.com in the query. Don't forget to change that to your own domain.
  • Every template can be sent to you by email or to a webhook, with the results as Excel, csv or json if you want them. An event is always added to your timeline.

If you have an alert you'd like to see in the library, let me know. The full documentation is in the alert library section of the docs.

Older posts >