Skip to content

fix: reports on real servers say the right thing (PRD-015, eval/12) - #25

Merged
khalid-offset merged 1 commit into
mainfrom
fix/real-scan-review
Oct 22, 2026
Merged

khalid-offset merged 1 commit into
mainfrom
fix/real-scan-review

Conversation

@khalid-offset

Copy link
Copy Markdown
Contributor

Why

The owner ran ~55 real scans (mostly badssl.com, where each host demonstrates one defect) and found reports that did not make sense, bad alignment, a broken-looking Fix first, and TLS versions open by default. Reviewed as a cryptographer, QA and PM against a copy of that database.

What was wrong, and the fix

Accuracy (eval/12; stored scans re-evaluate on start)

  • Servers with only 3DES/RC4/NULL/small-DH suites: the report held the no-SNI fallback certificate as theirs. The served chain is now read from the scanner's raw TLS 1.2 flights; this also finds Google's RSA certificate.
  • Leaves signed by an unknown root (superfish, preact-cli…) were called missing intermediates. Now decided by the leaf's AIA URL.
  • Superfish, eDellRoot and DSDTestProvider are now CERT.COMPROMISED-ROOT (critical).
  • Revocation read Good without being checked. It's now Status unknown unless a verified staple vouches for it.
  • DH moduli: composite is critical, not a safe prime is low (dh-composite, dh-small-subgroup).
  • The endpoints list showed "expired 2996 days ago" for valid hosts, because it used the no-SNI placeholder. It now uses the served leaf, refreshed on re-evaluation.

Screens

  • Fix first shows three rows with one "when" chip each; the rest fold under one line that counts them.
  • Every TLS version starts folded.
  • Strength chips, version heads and Fix-first rows line up, measured in the browser.

Evidence

  • go test ./... passes, including 5 new tests; golangci-lint reports 0 issues on Windows and Linux.
  • Journey: 240 passed, 0 failed. New checks: E2E-FIX-1, E2E-VIS-ALIGN; rewritten: E2E-VIS-FOLD.
  • CRYPTO-REVIEW-003 checks host by host against badssl.com.
  • QA-REPORT-014 records the screen walk on the owner's data and the PM sign-off.

Not released.

From the owner's review of their own scans (badssl.com and others), as a
cryptographer, QA and PM:

Scanner
- When Go's TLS client cannot complete a handshake (3DES, RC4, NULL or
  small-DH suites only; an RSA certificate kept for RSA-only clients),
  the served chain is read from the raw TLS 1.2-and-earlier flights.
  Before, the no-SNI fallback certificate stood in for it.
- The DH modulus is tested for primality and for being a safe prime.

Evaluation (eval/12; stored scans are re-evaluated on start)
- KX.DH-COMPOSITE (critical), KX.DH-NOT-SAFE-PRIME (low).
- A missing issuer is an intermediate only when the leaf names its
  download URL (AIA); otherwise a root the stores do not hold.
- CERT.COMPROMISED-ROOT for Superfish, eDellRoot, DSDTestProvider.
- Revocation is "unknown" unless a verified staple vouches for it.
- The untrusted-root wording covers public roots since removed.
- The list's certificate expiry is the served leaf's, refreshed on
  re-evaluation (it showed the expired no-SNI placeholder).

Screens
- Fix first: three rows, one "when" chip each, the rest folded.
- Every TLS version starts folded; version heads, suite rows and Fix
  first rows line up (measured: E2E-VIS-ALIGN).

CRYPTO-REVIEW-003 and QA-REPORT-014 sign off; journey 240/0.
@khalid-offset
khalid-offset merged commit b376e52 into main Oct 22, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant