SECOND MEASUREMENT SM-011

Firefox’s revocation list is months behind the biggest certificate logs. One in eleven top sites, mozilla.org included, gets no revocation check at all

Markovian ProtocolMeasured 2026-10-02Status: sent to Mozilla 2026-10-02, response pendingDOI: 10.5281/zenodo.23123261

Firefox decides whether a certificate is revoked from a list Mozilla builds by reading every public certificate log and every certificate authority’s revocation list. The list can only answer for certificates its builder has read, and it says, inside the file, how far into each log it has read. On 2 October that position was 12 June for Google’s Xenon2026h2 log, 28 June for DigiCert’s Wyvern2026h2 and 10 August for Sphinx2026h2: 1.66 billion, 956 million and 535 million entries behind. A certificate logged only to those logs is one the list has never seen, and for those Firefox skips the online check too. We fetched the live certificates of the 1,000 most-visited domains and asked the filters: 68 of 726 come back not covered, among them mozilla.org, stripe.com, medium.com, digicert.com and most of Google’s own properties. Their certificates are up to 50 days old. The logs themselves serve new entries in minutes; we timed them.

The short version

Disclosure: Markovian Protocol holds no financial position in any organisation named here, was paid by no one for this work, and showed it to no one before publication except the organisation measured. How we work.

Details

This follows SM-009, which found revocations missing from the filter for certificates revoked on their first day. This one is about a different and larger gap: certificates the filter has never read at all. CRLite’s filter format, clubcard, carries a coverage list: for each Certificate Transparency log, the interval of entry timestamps the builder has ingested. Firefox checks each timestamp embedded in a certificate against that list; if none falls inside, the certificate is “not covered”, and with the default settings Firefox then lets the connection proceed without asking the CA. We read the coverage list from all 62 filters Firefox currently downloads (the 2 September snapshot and 61 deltas) with Mozilla’s own clubcard-crlite inspect tool, looked up each log’s cutoff index with its own get-entries endpoint, and ran Mozilla’s rust-query-crlite against certificates fetched by TLS handshake from the Tranco top 1,000.

What they said, what we found

Mozilla saidWe found
Mozilla, Comprehensive Revocation Checking at Scale (SIGCOMM 2026): “CRLite achieves an effective revocation coverage of 87.8%” in Firefox telemetry.6The missing 12% has a shape. Of the top 1,000 sites, 68 of 726 certificates have no CRLite coverage, 63 of them because the aggregator had not yet read the log their timestamp came from; mozilla.org is one.
“Mozilla’s infrastructure continually monitors all of the known Certificate Transparency logs for new certificates … in effect the tooling has total knowledge of the certificates in the public Web PKI.” (CRLite design post, 2020)1Reading position on 2 October: Xenon2026h2 12 June, Wyvern2026h2 28 June, Sphinx2026h2 10 August, TrustAsia log2026a/b 25 November 2025. 3.15 billion entries unread across the three largest.
“Of the remaining revocation checks, 5% are for certificates that are not covered by the clubcards that the user has downloaded … these are likely a combination of new certificates and certificates from private CAs.” (Clubcards paper, 2025)29.4% of the top 1,000 domains’ live certificates are not covered; 9.1% of the top 5,000. Issuers in the top 1,000: Google Trust Services 57, Microsoft 7, DigiCert 3, Certainly 1. Age: 9 hours to 50 days.
Firefox’s verifier: skipping OCSP for uncovered certificates is “reasonable” because the user “has not yet downloaded CRLite filters”, the filters “are out-of-date”, or “the certificate has been in CT for < 1 MMD interval”.3None of the three. Filters fresh, certificates weeks old, logs current to the minute. The fourth case, the builder months behind, isn’t in the comment.

How far behind, log by log

The coverage list in the newest filter, compared with the one in the 2 September snapshot. “Behind” is measured from the filter’s own effective time, 2 October 13:01 UTC.

Log (24-hour merge delay)Read up to, 2 Sep filterRead up to, 2 Oct filterDays behindDays of log gained in 30 days
Google Xenon2026h24 Jun12 Jun 20261118
DigiCert Wyvern2026h227 Apr28 Jun 20269562
DigiCert Sphinx2026h211 May10 Aug 20265291
DigiCert Wyvern2027h15 Jul16 Aug 20264742
DigiCert sphinx2027h14 Aug28 Aug 20263423
TrustAsia HETU20271 Aug15 Aug 20264813
TrustAsia log2026a24 Nov25 Nov 20253111
TrustAsia log2026b24 Nov24 Nov 20253110
Google Argon2026h223 Aug1 Oct 2026138
Google Xenon2027h11 Sep1 Oct 2026130
Cloudflare Nimbus202631 Aug1 Oct 2026130
Sectigo Tiger2026h231 Aug1 Oct 2026031

All 22 tiled logs and the other usable classic logs (Argon2027h1, Sectigo, DigiCert 2027h2, Cloudflare) are within a day. TrustAsia log2026a and log2026b are listed usable by Google and Apple and accepted our test entry on 2 October. Full dumps for all 62 filters are in the exhibits.

What a reader at 12 June has not seen, by asking the log itself: a binary search over each log’s entries for the first timestamp past Mozilla’s cutoff.

LogEntries in the logMozilla’s cutoffEntries after itShare unread
Google Xenon2026h22,935,551,16012 Jun 2026 22:491,662,321,85357%
DigiCert Wyvern2026h22,137,486,42428 Jun 2026 23:57956,104,34445%
DigiCert Sphinx2026h22,107,751,73310 Aug 2026 23:37534,865,42725%

Tree sizes from each log’s get-sth at about 00:15 UTC on 3 October. The 2026h2 shards hold the certificates that expire in the second half of 2026, which is most 90-day certificates in use today.

What that does to the sites people visit

A certificate is covered if any one of its embedded log timestamps falls inside the filter’s interval for that log. Most certificates carry two or three. A certificate logged to Argon2026h2 is fine; one logged to Xenon2026h2 and a DigiCert 2026h2 log is invisible. Google Trust Services, which issues for Google’s own domains and for anyone using Google Cloud, tends to use the second combination.

Tranco top 1,000, live certificates, 2 OctSites
Reachable on port 443 with a certificate726
Good654
Not covered68
Not enrolled (a Russian state CA Firefox doesn’t trust)3
Expired1

Not covered by rank: 20 in the top 250, 13 in 251–500, 17 in 501–750, 18 in 751–1,000. The 274 unreachable names are mostly CDN and mail domains with no web server at the apex. The Android channel gives the same 68. Extending the run to the top 5,000: 346 of 3,792 reachable sites not covered, 9.1%, 299 of them on Google Trust Services certificates.

The twenty highest-ranked:

RankDomainIssuerCertificate age, daysLogs in the certificate
6googleapis.comGoogle Trust Services14Google Xenon2026h2, TrustAsia log2026b
37googleusercontent.comGoogle Trust Services22Google Xenon2026h2, DigiCert Sphinx2026h2
38doubleclick.netGoogle Trust Services22Google Xenon2026h2, TrustAsia log2026a
50digicert.comDigiCert Inc23DigiCert Wyvern2026h2, Google Xenon2026h2, DigiCert Sphinx2026h2
51skype.comMicrosoft Corporation28Google Xenon2026h2, DigiCert Wyvern2026h2
59googlesyndication.comGoogle Trust Services14TrustAsia log2026a, Google Xenon2026h2
64windows.netMicrosoft Corporation37Google Xenon2026h2, DigiCert Wyvern2026h2
87vimeo.comGoogle Trust Services29DigiCert Wyvern2026h2, Google Xenon2026h2
96mozilla.orgGoogle Trust Services18Google Xenon2026h2, TrustAsia log2026a
107windows.comMicrosoft Corporation1Google Xenon2027h1, DigiCert Wyvern2027h1
149forms.gleGoogle Trust Services46Google Xenon2026h2, DigiCert Sphinx2026h2
150godaddy.comGoogle Trust Services35Google Xenon2026h2, TrustAsia log2026b
173dns.googleGoogle Trust Services22Google Xenon2026h2, DigiCert Wyvern2026h2
183base.orgGoogle Trust Services11Google Xenon2026h2, DigiCert Sphinx2026h2
185hosting24.comGoogle Trust Services41Google Xenon2026h2, DigiCert Sphinx2026h2
195googleadservices.comGoogle Trust Services22DigiCert Sphinx2026h2, Google Xenon2026h2
203medium.comGoogle Trust Services27DigiCert Sphinx2026h2, Google Xenon2026h2
224ipify.orgGoogle Trust Services37Google Xenon2026h2, DigiCert Wyvern2026h2
225sciencedirect.comGoogle Trust Services37Google Xenon2026h2, TrustAsia log2026b
241stripe.comDigiCert, Inc.9DigiCert Wyvern2026h2, Google Xenon2026h2, DigiCert Sphinx2026h2

63 of the 68 carry timestamps only from the lagging logs; the other five were issued within a day of the reader’s position and are the ordinary merge-delay case. Every one of the 68 carries timestamps only from logs with a 24-hour merge delay. The youngest is 9 hours old, the oldest 50 days; 61 of the 68 are more than two days old. The “new certificate” explanation does not reach them.

Whose certificates these are

Sort the uncovered certificates by who issued them and the picture changes from “sites” to one certificate authority. Google Trust Services issued 151 of the 726 top-1,000 certificates we could fetch and 57 of the 68 Firefox cannot check: more than a third of everything it issues to the busiest sites. Microsoft’s own CA is in the same state for its 18. DigiCert, with 139 certificates in the same set, has two. Let’s Encrypt, the largest issuer in the top 5,000, has seven of 773. The difference is where each CA sends its certificates to be logged. Of Google Trust Services’ 151 certificates in the top 1,000, 150 carry timestamps only from the older RFC 6962 logs (Google’s own Xenon and Argon first, then DigiCert’s, Cloudflare’s and TrustAsia’s), and every one of the 68 uncovered certificates has a log set drawn entirely from the lagging ones. Let’s Encrypt sends 124 of its 126 to at least one tiled log, which the reader keeps up with, and has none uncovered in the top 1,000. Sectigo sends 41 of 49 to a tiled log. The fix is a configuration choice at the CA, not a change to Firefox.

Whether the reader is catching up is now measured daily on the rechecks page. On the first two runs, a day apart, it fell a further half-day behind on Xenon2026h2, the largest log, and gained about a day on DigiCert’s two. At those rates it reaches today on the DigiCert logs in two to four months and on Google’s never; two runs is too few to call a trend, and the page will say when it is.

IssuerTop-1,000 certificatesNot coveredShareTop-5,000Not coveredShare
Google Trust Services1515737.7%87229934.3%
Microsoft Corporation18738.9%431841.9%
Certainly3133.3%19526.3%
DigiCert (both names)15431.9%603101.7%
Let’s Encrypt—0—77370.9%
GlobalSign—0—31431.0%

From the same census (topsites_results.json): issuer organisation from each certificate, coverage verdict from the newest filter. Issuers with no uncovered certificate in the top 1,000 are shown for the top 5,000 only.

How this ends

One of two acts closes it, and the daily recheck will show which: Mozilla’s reader reaches the current day on Xenon2026h2 and the other lagging logs, or Google Trust Services adds a tiled log to the set it submits every certificate to. Either one takes the uncovered count on the busiest sites to zero. Until then the number is printed each morning.

The evidence

Every quote below was copied from the source and checked against a saved copy, fetched 2026-10-02 and 03. The 62 coverage dumps, the live tree heads, the 726 certificates and the scripts are published next to this page (SHA256SUMS).

Exhibit 1 · The filter’s own reading position, newest delta

$ inspect 20261002-1-default.filter.delta        (clubcard-crlite, Mozilla)
                  CT Log ID                             Min Time        Max Time
  2AlVO5RPev/IFhlvlE+Fq7D4/F6HVSYPFdEucrtFSxQ=,  1718275427911,  1781304587929   Xenon2026h2: up to 2026-06-12 22:49
  ...
  RMK9DOkUDmSlyUoBkwpaobs1lw4A7hEWiWgqHETXtWY=,  0,  1790842110933   Xenon2027h1: up to 2026-10-01 08:08

saved dump 20261002-1-default.filter.delta.txt; all 62 in coverage_all/; log ids resolved with log_ids.json; the per-filter series in coverage_series_classic.json

Exhibit 2 · The log is live; the reader isn’t

GET https://ct.googleapis.com/logs/eu1/xenon2026h2/ct/v1/get-sth
  tree_size 2935526349, timestamp 2026-10-03 00:17:36 UTC
Our own entry, submitted 2026-10-02 21:46:56 UTC, served with an inclusion proof within 94 seconds.
Binary search for the first entry after 2026-06-12 22:49: index 1,273,229,307  ->  1,662,321,853 entries unread

xenon2026h2-sth.json · unread_entries.json · merge-delay results ct_merge_delays_results.json

Exhibit 3 · mozilla.org

certificate: CN=mozilla.org, issuer Google Trust Services WR3, notBefore 2026-09-14 09:15 UTC
embedded SCTs: Google Xenon2026h2 (2026-09-14 10:15:08), TrustAsia log2026a (2026-09-14 10:15:08)

$ rust-query-crlite -d db_fresh --update prod -vvv https mozilla.org
TRACE - 20260902-0-default.filter: NotCovered
TRACE - 20260902-1-default.filter.delta: NotCovered
  ... all 62 filters ...
INFO - mozilla.org NotCovered

certificate mozilla.org.der · trace mozilla.org-query.log · all 3,792 verdicts topsites_results.json

Exhibit 4 · Mozilla, on the uncovered share

“Of the remaining revocation checks, 5% are for certificates that are not covered by the clubcards that the user has downloaded, and 2% are performed by users that have not downloaded any clubcards. We do not have a detailed breakdown of the 5% of uncovered certificates, but these are likely a combination of new certificates and certificates from private CAs.”

Clubcards for the WebPKI, IEEE S&P 2025, section 5 · saved clubcards_for_the_webpki.pdf

Exhibit 5 · Mozilla, on reading whole logs

“In mozilla/clubcard-crlite#10 it is noted that we did not ingest all of the usable entries of Yeti2025 prior to its retirement. The ct-fetch program should have an option to ingest all entries of a log up to a certain timestamp or index.”

mozilla/crlite issue 366, opened 25 August 2025, open · saved crlite-issue-366.json

Our questions to Mozilla

Sent to Mozilla’s CRLite maintainer on 2 October 2026 as mozilla/crlite issue 392, alongside SM-009’s issue 391. Answers will be printed here as written.

  1. Is the lag on Xenon2026h2, Wyvern2026h2 and Sphinx2026h2 known, and is it capacity on the largest RFC 6962 shards or something else?
  2. TrustAsia log2026a and log2026b are usable, accepting, and served our entry in under three minutes. Coverage stopped on 25 November 2025. Dropped on purpose?
  3. Is the paper’s 5% uncovered figure still what telemetry shows, and does Mozilla track which logs the uncovered certificates come from?
  4. Would the client be safer falling back to OCSP for an uncovered certificate older than one merge delay, now that the filter’s own metadata shows the gap isn’t the merge delay?

Their reply, scored

Waiting for a reply. When it comes, each question gets marked answered, partly answered or not answered, and the reply goes here in full.

Disclosure timeline

2 OctPublished; sent to Mozilla with the four questions above, as mozilla/crlite issue 392 and by email to the CRLite maintainer.

Waiting on Mozilla since 2 Oct.

What we can’t be sure of

Run it yourself

Rust for Mozilla’s two tools, Python 3 with cryptography. The whole thing runs in under half an hour.

git clone https://github.com/mozilla/crlite && cargo build --release --manifest-path crlite/rust-query-crlite/Cargo.toml
git clone https://github.com/mozilla/clubcard-crlite && cargo build --release --examples --manifest-path clubcard-crlite/Cargo.toml
rust-query-crlite -d db --update prod https mozilla.org          # downloads the 62 filters
for f in db/*.filter db/*.delta; do inspect "$f" > "coverage/$f.txt"; done
python3 unread_entries.py                                         # binary search each lagging log
python3 topsites_crlite.py 1000                                   # Tranco top 1,000, live certs, verdicts

Reproduced from the public repository on 3 October 2026 on a clean machine: exact (mozilla.org NotCovered; Xenon2026h2 read to 12 June, 1.66 billion entries unread). Full table on the track record.

What you can do with this

References

  1. J.C. Jones. The End-to-End Design of CRLite. Mozilla Security Blog, 9 January 2020. blog.mozilla.org.
  2. John M. Schanck and others. Clubcards for the WebPKI: smaller certificate revocation tests in theory and practice. IEEE S&P 2025, section 5. research.mozilla.org.
  3. Firefox source, security/certverifier/NSSCertDBTrustDomain.cpp, CheckRevocation; saved copy in SM-009’s exhibits.
  4. mozilla/clubcard-crlite, src/query.rs, CRLiteClubcard::contains: the coverage rule. mozilla/crlite issue 366.
  5. Tranco list, tranco-list.eu, downloaded 2 October 2026. Google and Apple CT log lists for log ids and merge delays.
  6. J. Schanck et al. Comprehensive Revocation Checking at Scale: the Deployment of CRLite in Mozilla Firefox. ACM SIGCOMM 2026. doi.org/10.1145/3789240.3829108. Also N. Fooda, J. Larisch, J. Schanck, B. Maggs, T. Chung, D. Levin. A First Look at Certificate Revocation Latency. ACM IMC 2026. doi.org/10.1145/3777912.3839820.

Cite as

@misc{markovian-sm011,
  author = {{Markovian Protocol}},
  title  = {How far behind the logs Firefox's CRLite filter reads, October 2026},
  number = {SM-011},
  doi    = {10.5281/zenodo.23123261},
  year   = {2026},
  month  = oct,
  url    = {https://markovianprotocol.com/measurements/sm-011.html}
}