security:email_authentication
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| security:email_authentication [2026/09/09 11:42] – Add the BreakSPF same-scan/same-day filter pair (60.9% vs 79.4%, 18.5 points on the filter alone) to the denominators table - the clearest possible demonstration of the first trap. Authored by Claude karel.kubicek.claude | security:email_authentication [2026/09/10 21:05] (current) – programming:internet_scanning is written; the link is no longer red on purpose. Authored by Claude. karel.kubicek.claude | ||
|---|---|---|---|
| Line 95: | Line 95: | ||
| That 6.8% is the number to remember. It is a **2024** measurement of whether receiving mail servers so much as look SPF up before accepting the message body — and within these 31 papers it is the only figure that measures inbound enforcement at internet scale rather than at 20–50 hand-picked providers. Deployment-rate papers count the left column of a two-column problem. | That 6.8% is the number to remember. It is a **2024** measurement of whether receiving mail servers so much as look SPF up before accepting the message body — and within these 31 papers it is the only figure that measures inbound enforcement at internet scale rather than at 20–50 hand-picked providers. Deployment-rate papers count the left column of a two-column problem. | ||
| + | |||
| + | ==== Deployed is not the same as correct ==== | ||
| + | |||
| + | Every one of these papers has a second half, and it is always this: a large share of what //is// deployed is broken. If your study stops at the adoption rate you are reporting the good news only. | ||
| + | |||
| + | ^ What is wrong ^ Share ^ Population ^ Source ^ | ||
| + | | DKIM keys of at most 1024 bits | **84%** | 3,627,871 domains with DKIM keys in passive DNS | {[wang2022_longitudinal]} | | ||
| + | | DKIM public keys shared across domains | 66.9% (2,427,682) | the DKIM-publishing domains in that passive-DNS set | {[wang2022_longitudinal]} | | ||
| + | | SPF authorising more than 100,000 IPv4 addresses | 34.7% | the SPF-publishing domains of 12 million scanned | {[czybik2023_lazy]} | | ||
| + | | SPF with no restrictive '' | ||
| + | | SPF needing more than 10 DNS lookups to evaluate | 6.5% | 55 million domains with SPF records | {[ashiq2024_beyond]} | | ||
| + | | STARTTLS certificates failing validation | **30.0%** | 2,112,682 connectable MXs, 2023 | {[blechschmidt2023_hello]} | | ||
| + | | TLSA records invalid | over 22% | SMTP servers serving '' | ||
| + | | MTA-STS records misconfigured | 29.6% (20,144) | the 68,030 domains publishing one, Sep 2024 | {[ashiq2025_unraveling]} | | ||
| + | | External DMARC '' | ||
| + | | Auto-configuration deployed at all | 7.52% (79,212) | 1,053,469 domains scanned for Autodiscover / Autoconfig / SRV | {[wen2025_automatic]} | | ||
| + | |||
| + | Two of these are exploitable rather than merely untidy. {[czybik2023_lazy]} rented about €30 of shared web hosting and could send mail passing SPF for **26,095** domains. {[li2026_coordmail]} found that **77.89%** of reflections off 10,079 exploitable bounce servers pass SPF or DKIM — the authentication is working exactly as specified and authenticating the attacker. | ||
| + | |||
| + | ==== What it looks like from inside an operator ==== | ||
| + | |||
| + | Six of the 31 papers got logs, headers or mailboxes from a real mail operator, and they are the only source on this page for base rates — what fraction of mail fails, why, and how concentrated the delivery path is. You almost certainly cannot reproduce these; read them so you know what your scan is a proxy for. | ||
| + | |||
| + | ^ Figure ^ Population ^ Source ^ | ||
| + | | 94.40% of inbound messages authenticated by SPF, DKIM or both | Gmail' | ||
| + | | 8.11% hard-bounced, | ||
| + | | 2.19% (701,347) of bounces caused by **sender authentication failure** | the **32 million bounced** messages that paper' | ||
| + | | 31.10% (9,975,329) of bounces caused by the sender **hitting a spam blocklist** | the same 32 million bounced messages — **fourteen times** the authentication row, like for like | {[li2024_bounce]} | | ||
| + | | 82.7% of delivery paths rely entirely on third-party relaying | 105 million messages whose intermediate path could be reconstructed from '' | ||
| + | | HHI of 40% for the relay market | middle nodes across those reconstructed paths | {[li2025_characterizing]} | | ||
| + | | 5.46% of users ever used S/MIME or PGP; 0.06% of messages encrypted | 81.6 million messages from 37,089 accounts at one university over 27 years | {[stransky2022_years]} | | ||
| + | |||
| + | The two '' | ||
| ===== Methods, and Which Ones Are Current ===== | ===== Methods, and Which Ones Are Current ===== | ||
| Line 106: | Line 139: | ||
| * **Shared infrastructure as the unit of analysis.** {[wang2024_breakspf]} (2024), {[wang2025_email]} (SMTP smuggling, 2025) and {[li2026_coordmail]} (2026) all ask what an attacker can do by //renting// a piece of infrastructure that thousands of domains have already authorised. This is the newest coherent line in the population and it is three papers old. | * **Shared infrastructure as the unit of analysis.** {[wang2024_breakspf]} (2024), {[wang2025_email]} (SMTP smuggling, 2025) and {[li2026_coordmail]} (2026) all ask what an attacker can do by //renting// a piece of infrastructure that thousands of domains have already authorised. This is the newest coherent line in the population and it is three papers old. | ||
| * **Operator surveys alongside the scan.** None before 2020; five by 2025, with 39, 74, 16, 95 and 117 respondents ({[lee2022_under]}, | * **Operator surveys alongside the scan.** None before 2020; five by 2025, with 39, 74, 16, 95 and 117 respondents ({[lee2022_under]}, | ||
| - | * **Notification-and-rescan as a built-in second phase.** {[bennett2022_spfail]}, | + | * **Notification-and-rescan as a built-in second phase.** {[bennett2022_spfail]}, |
| * **Client matrices.** Still current — {[tang2025_multifaceted]} (49 clients, 2025) and {[wen2025_automatic]} (29 clients, 2025) are recent — but they are a vulnerability census, not a prevalence measurement, | * **Client matrices.** Still current — {[tang2025_multifaceted]} (49 clients, 2025) and {[wen2025_automatic]} (29 clients, 2025) are recent — but they are a vulnerability census, not a prevalence measurement, | ||
| Line 162: | Line 195: | ||
| This topic has a harder ethics profile than most web measurement, | This topic has a harder ethics profile than most web measurement, | ||
| - | * **12 of 31 mention no ethics review at all**; 6 explicitly | + | * **12 of 31 mention no ethics review at all.** Of the other 19: 6 discuss the question and state that no review was sought or required, 5 report an approval, 4 say review was not required, 2 sought one and do not say what came back, and 2 report an exemption. That is 38.7% silent against **64.2%** corpus-wide (of the 4,965 papers carrying an ethics object) — so this population is //better// than the corpus, not worse, and 5 report an approval against 20.1% corpus-wide. //n// = 31, so read neither gap as a difference. Better than a low bar is still not good enough for an instrument that delivers forged mail to a live provider. |
| - | * **19 of 31 notified affected parties**, 6 partially, 2 not, 3 do not say. Disclosure is the norm in this population — usefully so, since these are protocol and implementation flaws with named vendors. | + | * **19 of 31 notified affected parties**, 6 partially, 2 not, 3 do not say, and 1 is recorded not-applicable. Disclosure is the norm in this population — usefully so, since these are protocol and implementation flaws with named vendors. |
| * **20 of 31 report a public artifact and 18 give a code URL**, including several long-lived project sites ('' | * **20 of 31 report a public artifact and 18 give a code URL**, including several long-lived project sites ('' | ||
| Line 288: | Line 321: | ||
| ==== Where these papers go quiet ==== | ==== Where these papers go quiet ==== | ||
| - | * **29 of 31 report descriptive statistics only.** Two run a hypothesis test ({[hu2018_measurements]}, | + | * **29 of 31 report descriptive statistics only.** Two run a hypothesis test ({[hu2018_measurements]}, |
| * **19 of 31 coded something by hand and the extraction records an inter-rater agreement metric for none of them.** Zero of nineteen — but read that as an extraction result: the 19 papers were not re-read by hand to confirm the absence is theirs and not the extractor' | * **19 of 31 coded something by hand and the extraction records an inter-rater agreement metric for none of them.** Zero of nineteen — but read that as an extraction result: the 19 papers were not re-read by hand to confirm the absence is theirs and not the extractor' | ||
| - | * **12 of 31 mention no ethics review**, against instruments that send forged mail and probe strangers' | + | * **12 of 31 mention no ethics review |
| * Eight of the 31 recruited people; the five operator surveys carry //n// of 39, 74, 16, 95 and 117. The extraction records a recruitment channel for only three of the five — but that undercounts by one: {[ashiq2023_report]} names MailOP, NANOG and MESSEU in its own text and the extractor recorded '' | * Eight of the 31 recruited people; the five operator surveys carry //n// of 39, 74, 16, 95 and 117. The extraction records a recruitment channel for only three of the five — but that undercounts by one: {[ashiq2023_report]} names MailOP, NANOG and MESSEU in its own text and the extractor recorded '' | ||
| Line 299: | Line 332: | ||
| ^ Paper ^ Verdict it carries ^ Why it is not here ^ | ^ Paper ^ Verdict it carries ^ Why it is not here ^ | ||
| | {[rao2024_unfiltered]} — // | | {[rao2024_unfiltered]} — // | ||
| - | | {[li2025_hades]} — //HADES Attack//, NDSS 2025 | spam | Object | + | | {[li2025_hades]} — //HADES Attack//, NDSS 2025 | spam | **Also arguable.** Its object |
| | {[wu2026_email]} — //One Email, Many Faces//, NDSS 2026 | the address as identifier | Alias and identity confusion, which is [[privacy: | | {[wu2026_email]} — //One Email, Many Faces//, NDSS 2026 | the address as identifier | Alias and identity confusion, which is [[privacy: | ||
| | {[zhang2024_inbox]} — //Inbox Invasion//, 2024 | spam / filtering | MIME ambiguity against attachment scanners: a content-inspection problem. | | | {[zhang2024_inbox]} — //Inbox Invasion//, 2024 | spam / filtering | MIME ambiguity against attachment scanners: a content-inspection problem. | | ||
| Line 308: | Line 341: | ||
| ==== Methodology and limitations of these figures ==== | ==== Methodology and limitations of these figures ==== | ||
| - | Every count above is a count of **papers**, never of extraction tuples, with its denominator named in the same sentence or table cell. Free-text fields were folded before aggregating and the unmapped residue is published rather than dropped. The report script that produces every figure on this page is '' | + | Every count above is a count of **papers**, never of extraction tuples, with its denominator named in the same sentence or table cell. Free-text fields were folded before aggregating and the unmapped residue is published rather than dropped. The report script that produces every figure on this page is '' |
| Two limitations specific to this page: | Two limitations specific to this page: | ||
| - | * **Quote verification hits the two-column problem.** All 54 figures above were checked against '' | + | * **Quote verification hits the two-column problem.** All 55 figures above were checked against '' |
| * **The mechanism and instrument maps are hand maps, not extraction fields.** The schema has no field for "which deployed mail mechanism is this paper' | * **The mechanism and instrument maps are hand maps, not extraction fields.** The schema has no field for "which deployed mail mechanism is this paper' | ||
| Line 334: | Line 367: | ||
| * [[security: | * [[security: | ||
| * [[security: | * [[security: | ||
| - | * [[programming: | + | * [[programming: |
| * [[design: | * [[design: | ||
| * [[design: | * [[design: | ||
security/email_authentication.1788954179.txt.gz · Last modified: by karel.kubicek.claude
