<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Mika</title>
    <description>The latest articles on Forem by Mika (@mikaww1).</description>
    <link>https://forem.com/mikaww1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3887366%2F596a03dc-6eb6-435b-b923-469278970244.png</url>
      <title>Forem: Mika</title>
      <link>https://forem.com/mikaww1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mikaww1"/>
    <language>en</language>
    <item>
      <title>I Ran a Subdomain Takeover Checker on GitHub.com and Found a Vulnerable Subdomain</title>
      <dc:creator>Mika</dc:creator>
      <pubDate>Wed, 22 Apr 2026 19:23:42 +0000</pubDate>
      <link>https://forem.com/mikaww1/i-ran-a-subdomain-takeover-checker-on-githubcom-and-found-a-vulnerable-subdomain-5ba2</link>
      <guid>https://forem.com/mikaww1/i-ran-a-subdomain-takeover-checker-on-githubcom-and-found-a-vulnerable-subdomain-5ba2</guid>
      <description>&lt;p&gt;I've been building a tool that checks subdomains for takeover vulnerabilities. Yesterday I decided to test it on a well-known target — github.com — just to see what it would find.&lt;/p&gt;

&lt;p&gt;I wasn't expecting much. GitHub is a massive, well-maintained platform with a serious security team. But within seconds of running the enumeration, one result came back red:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brandguide.github.com — VULNERABLE
Service: github.io
Reason: Unconfigured fingerprint found for github.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fby1b37o2in2nsmsqtc62.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fby1b37o2in2nsmsqtc62.png" alt="Results" width="671" height="711"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What does this mean?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;brandguide.github.com&lt;/code&gt; has a CNAME record pointing to a GitHub Pages address that is no longer configured. The page returns GitHub's classic "There isn't a GitHub Pages site here" message — which is the exact fingerprint that indicates an unclaimed Pages site.&lt;/p&gt;

&lt;p&gt;In theory, anyone could create a GitHub Pages site at that address and serve content under &lt;code&gt;brandguide.github.com&lt;/code&gt; — a subdomain that looks like it belongs to GitHub.&lt;/p&gt;

&lt;p&gt;This is a textbook subdomain takeover.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the tool found it
&lt;/h2&gt;

&lt;p&gt;The tool uses two steps to detect takeovers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Enumerate subdomains via certificate transparency logs&lt;/strong&gt;&lt;br&gt;
Certificate authorities are required to publicly log every SSL certificate they issue. By querying &lt;a href="https://crt.sh" rel="noopener noreferrer"&gt;crt.sh&lt;/a&gt;, you can discover subdomains that have had certificates issued — no scanning, no probing, just reading public records.&lt;/p&gt;

&lt;p&gt;For github.com this returned dozens of subdomains instantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Check each subdomain for takeover vulnerabilities&lt;/strong&gt;&lt;br&gt;
For each subdomain, the tool follows the full CNAME chain. If the final destination returns NXDOMAIN (the domain doesn't exist) or matches a known "unconfigured" fingerprint from services like GitHub Pages, Heroku, Vercel, AWS S3, and 80+ others — it flags the subdomain as vulnerable.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;brandguide.github.com&lt;/code&gt; passed through the CNAME chain check and matched the GitHub Pages fingerprint. Result: vulnerable.&lt;/p&gt;

&lt;h2&gt;
  
  
  This happens more than you think
&lt;/h2&gt;

&lt;p&gt;GitHub is not unique here. Subdomains get created for marketing campaigns, staging environments, documentation sites, and internal tools — then the service gets decommissioned, but nobody cleans up the DNS record.&lt;/p&gt;

&lt;p&gt;It's not a sign of negligence. It's just the natural entropy of running infrastructure at scale. The DNS record outlives the service by months or years, quietly waiting for someone to notice.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I did with the finding
&lt;/h2&gt;

&lt;p&gt;Nothing — I don't own github.com and have no intention of claiming the subdomain. This article is purely educational. If you work at GitHub and are reading this, consider this a friendly heads up.&lt;/p&gt;

&lt;p&gt;If you want to check your own domains, the tool is free to use:&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://www.subdomainchecker.com" rel="noopener noreferrer"&gt;subdomainchecker.com&lt;/a&gt;&lt;/strong&gt; — paste in a root domain, it enumerates subdomains via crt.sh and checks each one automatically&lt;/p&gt;

&lt;p&gt;There's also a public API if you want to integrate it into your own recon pipeline:&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://rapidapi.com/mikaww1/api/subdomain-takeover-checker" rel="noopener noreferrer"&gt;RapidAPI — Subdomain Takeover Checker&lt;/a&gt;&lt;/strong&gt; — free tier available&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Subdomain takeovers are real and happen even at large companies&lt;/li&gt;
&lt;li&gt;Certificate transparency logs are a goldmine for passive subdomain enumeration&lt;/li&gt;
&lt;li&gt;Automated fingerprint checking makes it trivial to scan dozens of subdomains in seconds&lt;/li&gt;
&lt;li&gt;Always clean up your DNS records when you decommission a service&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>dns</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Subdomain takeovers are still embarrassingly common...</title>
      <dc:creator>Mika</dc:creator>
      <pubDate>Sun, 19 Apr 2026 13:04:44 +0000</pubDate>
      <link>https://forem.com/mikaww1/subdomain-takeovers-are-still-embarrassingly-common-3ck7</link>
      <guid>https://forem.com/mikaww1/subdomain-takeovers-are-still-embarrassingly-common-3ck7</guid>
      <description>&lt;p&gt;You've probably heard of domain hijacking — but subdomain takeovers are sneakier, more common, and surprisingly easy to miss.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a subdomain takeover?
&lt;/h2&gt;

&lt;p&gt;When a company sets up a service like a blog, a shop, or a staging environment, they often point a subdomain at an external platform using a DNS record called a CNAME.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;shop.example.com → CNAME → example.myshopify.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells the internet: "when someone visits shop.example.com, send them to our Shopify store."&lt;/p&gt;

&lt;p&gt;Now imagine the company shuts down that Shopify store — but forgets to delete the DNS record. The CNAME is still there, pointing at a Shopify address that no longer exists.&lt;/p&gt;

&lt;p&gt;An attacker can register that Shopify store and suddenly controls &lt;code&gt;shop.example.com&lt;/code&gt;. They can serve phishing pages, steal cookies, or damage the brand — all from what looks like a legitimate company subdomain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does this keep happening?
&lt;/h2&gt;

&lt;p&gt;Because DNS cleanup is boring and easy to forget. Teams spin up new services all the time — staging environments, marketing landing pages, support portals — and when those services get decommissioned, the DNS records are often left behind.&lt;/p&gt;

&lt;p&gt;It's not a sophisticated attack. It just requires patience and a good eye for dangling CNAMEs.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you detect it?
&lt;/h2&gt;

&lt;p&gt;Detection comes down to two steps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Follow the CNAME chain&lt;/strong&gt;&lt;br&gt;
Resolve the subdomain and follow every CNAME until you reach the final destination. If the final target returns NXDOMAIN (the domain doesn't exist in DNS), that's a strong signal of a dangling CNAME.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Check for service fingerprints&lt;/strong&gt;&lt;br&gt;
If the target resolves but the service isn't configured, most platforms return a recognizable error page. For example, an unclaimed GitHub Pages site returns &lt;em&gt;"There isn't a GitHub Pages site here"&lt;/em&gt;. Checking for these fingerprints confirms whether a takeover is possible.&lt;/p&gt;

&lt;p&gt;One important caveat: wildcard DNS can cause false positives. If a parent domain resolves any random subdomain (like &lt;code&gt;random123.example.com&lt;/code&gt;), you need to account for that before flagging something as vulnerable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking your own subdomains
&lt;/h2&gt;

&lt;p&gt;If you're a developer or sysadmin, it's worth periodically auditing your DNS records — especially for subdomains pointing at third-party services you may have stopped using.&lt;/p&gt;

&lt;p&gt;I built a free API that automates this entire process. It follows CNAME chains, checks fingerprints against 80+ services (AWS S3, Azure, Heroku, Vercel, Netlify, GitHub Pages, Shopify, Zendesk and more), handles wildcard detection, and returns a confidence level with each result.&lt;/p&gt;

&lt;p&gt;There's also a bulk endpoint that checks up to 25 subdomains at once — useful if you have a large number of subdomains to audit.&lt;/p&gt;

&lt;p&gt;You can try it here: &lt;a href="https://rapidapi.com/mikaww1/api/subdomain-takeover-checker" rel="noopener noreferrer"&gt;Subdomain Takeover Checker API&lt;/a&gt; — free tier available, no credit card needed.&lt;/p&gt;

&lt;p&gt;Or check out the website: &lt;a href="https://www.subdomainchecker.com" rel="noopener noreferrer"&gt;subdomainchecker.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Subdomain takeovers happen when a CNAME points to an unclaimed external service&lt;/li&gt;
&lt;li&gt;They're common because DNS records are rarely cleaned up when services are decommissioned&lt;/li&gt;
&lt;li&gt;Detection involves checking for NXDOMAIN and known service fingerprints&lt;/li&gt;
&lt;li&gt;Audit your subdomains regularly — especially after decommissioning any third-party service&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>webdev</category>
      <category>security</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
