All research

How Certificate Transparency Logs Leak Internal Subdomains

65.5% of 702 sampled top domains leak at least one internal-looking hostname into Certificate Transparency: 38.9% log a dev. subdomain, 12.8% log a vpn. subdomain.

Does Certificate Transparency leak internal hostnames? Yes, routinely. We read the public CT logs for 702 top domains through crt.sh, the same free lookup anyone can run, and found that 65.5% have logged at least one internal-looking hostname: a dev., staging., vpn., admin., jira., or vault.-style name that was almost certainly meant for staff, not the public internet. No host was scanned, resolved, or contacted to get this number. CT is a public, append-only log of every certificate a public CA has ever issued, and a name only has to receive one publicly trusted certificate to become a permanent, searchable record. This is an attacker's first move before any scanning starts, and most organizations are handing over their internal naming convention for free.

The blunt version If a name ever got a certificate from a public CA, it is in Certificate Transparency forever, whether or not the server behind it is reachable today. Reading that log is not hacking. It is a public records search, and it is usually the first thing a competent attacker does.

Why a public log leaks private-looking names

Certificate Transparency exists for a good reason: it stops a CA from quietly mis-issuing a certificate for a domain it should not, because every issued cert becomes visible to the domain owner and the public. Chrome and other browsers have required CT logging from publicly trusted CAs since 2018 under RFC 6962. That is a genuine security win for the ecosystem. The side effect is that CT also logs the hostname itself, and the hostname is often the most revealing part of the record.

Internal systems get public certificates for an ordinary, boring reason: nobody wants a browser warning when staff open the VPN portal or the internal Jira instance, even if DNS for that name resolves only on the corporate network or over a VPN tunnel. So the name gets a real certificate from Let's Encrypt, DigiCert, or another public CA, exactly like a public-facing site would. The certificate does its job quietly. The side effect is that vpn.example.com or staging-admin.example.com is now permanently readable by anyone who queries CT for example.com, through a free tool like crt.sh, with zero interaction with example.com's own infrastructure.

The data: what 702 top domains log

We queried crt.sh for a sample of the Tranco top-sites list (list 94Y82), one domain at a time with caching and backoff to be gentle on the service, and classified the first DNS label of every logged name against nine categories of conventional internal naming: remote access, auth/identity, non-production, devops/CI, internal collaboration, observability, admin/management, secrets/infrastructure, and explicitly-internal names. 702 of the 1,000 requested domains completed; 660 had any CT history at all. Per-domain results were held only in memory for the run and never written out, so nothing here names a specific organization. These are population percentages, not a list.

Share of 702 sampled domains logging each category of internal-looking hostname Horizontal bar chart. Non-production 58.8 percent. Explicitly internal 29.3 percent. Admin and management 28.2 percent. Auth and identity 27.8 percent. DevOps and CI 25.2 percent. Remote access 21.8 percent. Secrets and infrastructure 20.4 percent. Internal collaboration 18.1 percent. Observability 16.5 percent. Sample of 702 domains, July 2026. 0% 25% 50% 75% 100% Internal-looking hostname categories, 702 domains Share of sample logging at least one name in each category. Passive CT read, July 2026. Non-production 58.8% Explicitly internal 29.3% Admin/management 28.2% Auth/identity 27.8% DevOps/CI 25.2% Remote access 21.8% Secrets/infra 20.4% Internal collab 18.1% Observability 16.5%
Source: passive read of crt.sh for 702 domains from the Tranco top-sites list (94Y82), 24 July 2026. A domain counts once per category regardless of how many matching names it logged. Categories are not mutually exclusive, so rows do not sum to 100%.

Non-production names dominate: 58.8% of domains have logged a dev., staging., test., or similar name. That is the least surprising finding and the least dangerous on its own, a staging environment being named is not a vulnerability. What is more interesting is how far down the list the dangerous categories run. 20.4% have logged a secrets or infrastructure-adjacent name like vault., consul., or k8s., and 21.8% have logged a remote-access name like vpn. or citrix. Those are the categories where the name itself tells an attacker exactly which product to go look for a known CVE against.

Individual prefixes tell the same story at finer resolution. Here are the twelve most common labels we matched, by share of the 702-domain sample:

Most common internal-looking prefixes logged to CT, 702-domain sample, July 2026
PrefixDomainsShare of sample
dev27338.9%
test26037.0%
staging19227.4%
admin14520.7%
stage13118.7%
auth12517.8%
qa11416.2%
demo9413.4%
internal9012.8%
vpn9012.8%
sandbox8412.0%
stg7811.1%

The vpn. prefix alone sits at 12.8% of the whole sample, which means roughly one in eight of the busiest domains on the internet has told the world, through a public log they never had to touch, that they run a specific remote-access product at a specific name. Combine that with the version-fingerprinting that is possible once a hostname resolves, and an attacker has gone from zero knowledge to a prioritized target list without sending a single packet at the target.

It rarely stops at one name

Leakage is not evenly spread across one name per domain. Of the 460 domains that leaked anything, 113 leaked a name from exactly one category, but the rest leaked across multiple categories at once: 65 domains hit three categories, 42 hit six, and 22 domains leaked a name in all nine categories we tracked. Once an organization is in the habit of giving internal tools real public certificates, the habit tends to be consistent across every internal tool they run, not just one. For an attacker, a domain that leaks broadly is more valuable than one that leaks a single name, because it maps out dev infrastructure, auth infrastructure, and admin infrastructure in one query.

How to check your own domain

This takes under a minute and needs no tool beyond a browser or curl, because you are reading the same public record we read.

What this does not prove

Honest limits, because a number without its caveats is marketing.

Frequently asked questions

Can attackers use Certificate Transparency logs to find subdomains?

Yes. Every certificate a public CA issues is logged under RFC 6962, and anyone can search those logs for free through crt.sh. In our 702-domain sample, 65.5% of organizations had logged at least one internal-looking hostname this way, with zero interaction with their infrastructure.

Can CT logs reveal internal hostnames that were never meant to be public?

Yes. A name only needs one publicly trusted certificate, often issued so staff do not see a browser warning, to become a permanent public record. The server behind it does not need to be internet-reachable for the name itself to leak.

What information gets exposed in a certificate's Subject Alternative Name field?

The SAN field lists every hostname a certificate covers. A single multi-domain certificate can expose dozens of names at once, all searchable in CT the moment the certificate is issued.

How do I discover subdomains using crt.sh?

Query https://crt.sh/?q=%25.yourdomain.com&output=json. It returns every logged certificate for your domain and its subdomains, including ones issued for servers that may no longer exist. It is a passive, read-only lookup of a public log, the same method we used here.

Does a wildcard certificate stop subdomains from appearing in CT logs?

A wildcard cert for *.example.com logs only the wildcard string, hiding the specific subdomain label. But the moment one service gets its own uniquely named certificate, that name is logged even if everything else sits behind a wildcard.

How can I prevent internal hostnames from leaking into Certificate Transparency?

Use a private, internal CA for names that should never be public, since only public CAs must log to CT. Prefer wildcard certificates over uniquely named leaf certificates where your architecture allows it, and treat anything already in CT as permanently known.

Are private or internal certificate authorities exempt from Certificate Transparency logging?

Yes. CT logging is required of publicly trusted CAs, not of certificates in general. A certificate from your own internal CA, trusted only by your managed devices, never has to touch a public CT log.

Related reading