---
draft: false
version: "1.7"
title: "The 2023 jabber.ru Attack Exposes a Critical Cloudflare Flaw in 2026"
description: "A deep-dive into how Cloudflare's Universal SSL undermines RFC 8657, creating a security gap exposing millions of domains to MitM attacks."
abstract: "This article analyzes NotCVE-2026-0001, a critical security vulnerability in Cloudflare's Universal SSL, where the automatic injection of permissive CAA records actively nullifies the IETF standard RFC 8657. By overriding user-defined account binding parameters, this configuration re-opens the exact security gap exploited in the 2023 jabber.ru MitM attack, leaving millions of domains vulnerable to BGP hijacking and unauthorized TLS certificate issuance. The analysis demonstrates that this is not a technical oversight but a design choice that neutralizes the `accounturi` and `validationmethods` security controls, and argues that Cloudflare must implement strict ACME account binding to mitigate this risk."
backstory: "This investigation began after my own failed attempt to implement RFC 8657 CAA records on my Cloudflare-hosted domains. When I discovered that Cloudflare was silently *overwriting* my security-hardened CAA records, I realized millions of free-tier users were unknowingly vulnerable to the same MitM attack that compromised jabber.ru in 2023. After a month of silence from Cloudflare's community team, followed by a dismissive response citing 'standard adoption timelines,' I knew this issue needed broader exposure. My subsequent article on Habr.com became the week's top post, confirming the community's concern about this artificial security gap."
publishDate: "2025-12-31T09:44:00Z"
modifiedDate: "2026-01-21T17:30:00Z"
doi: "10.5281/zenodo.18330221"
conceptDoi: "10.5281/zenodo.18201411"
securityIdentifiers:
  - type: "NotCVE"
    id: "NotCVE-2026-0001"
    url: "https://notcve.org/view.php?id=NotCVE-2026-0001"
cover: "./images/cloudflare_vulnerability_RFC 8657.jpg"
coverAlt: "A wounded knight in armor slumped in defeat, holding a large shield with the Cloudflare logo that has been pierced by a bullet hole."
coverLicense: "https://creativecommons.org/licenses/by/4.0/"
coverCreator: "https://david-osipov.vision/en/about/#person"
coverCopyrightHolder: "https://david-osipov.vision/en/about/#person"
coverCopyrightNotice: "© 2025 David Osipov. Licensed under CC BY 4.0."
hub: "Cybersecurity"
tier: "Briefing"
license: "https://creativecommons.org/licenses/by/4.0/"
keywords: ["dns", "caa", "rfc-8657", "cloudflare", "mitm", "security-analysis", "lets-encrypt", "expert consumer", "archive", "bgp-hijacking", "rfc-8659", "valdikss", "jabber.ru", "http-01", "dns-01"]
sharedContent:
  - '@type': AudioObject
    url: "https://media.david-osipov.vision/2023-jabber-attack-exposes-critical-cloudflare-flaw-in-2026.opus"
    contentUrl: "https://media.david-osipov.vision/2023-jabber-attack-exposes-critical-cloudflare-flaw-in-2026.opus"
    encodingFormat: "audio/ogg;codecs=opus"
    duration: "PT34M21S"
    name: "Audio Presentation: The 2023 jabber.ru Attack Exposes a Critical Cloudflare Flaw in 2026"
    description: "Audio overview of how Cloudflare's Universal SSL weakens RFC 8657 protections."
    license: "https://creativecommons.org/licenses/by/4.0/"
    contentSize: "8.30 MiB"
    bitrate: "33.8 kb/s"
    uploadDate: "2026-01-05T00:00:00Z"
    inLanguage: "en"
    associatedArticle: "https://david-osipov.vision/en/blog/cloudflare-ssl-mitm-flaw-2026/"
    isBasedOn: "https://david-osipov.vision/en/blog/cloudflare-ssl-mitm-flaw-2026/"
    creator:
      '@id': "https://david-osipov.vision/en/about/#person"
    sources:
      - url: "https://media.david-osipov.vision/2023-jabber-attack-exposes-critical-cloudflare-flaw-in-2026.opus"
        encodingFormat: "audio/ogg;codecs=opus"
  - '@type': VideoObject
    url: "https://www.youtube.com/watch?v=w09rF75f_vo"
    contentUrl: "https://www.youtube.com/watch?v=w09rF75f_vo"
    embedUrl: "https://www.youtube-nocookie.com/embed/w09rF75f_vo"
    duration: "PT7M28S"
    uploadDate: "2026-01-05T00:00:00Z"
    name: "Cloudflare Security Gap: How the 2023 jabber.ru Attack Exposes a Critical Flaw in 2026"
    description: "Video walkthrough of the Cloudflare CAA validation gap and resulting MitM exposure."
    license: "https://creativecommons.org/licenses/by/4.0/"
    inLanguage: "en"
    associatedArticle: "https://david-osipov.vision/en/blog/cloudflare-ssl-mitm-flaw-2026/"
    isBasedOn: "https://david-osipov.vision/en/blog/cloudflare-ssl-mitm-flaw-2026/"
    creator:
      '@id': "https://david-osipov.vision/en/about/#person"
semanticTags:
  - label: "Cloudflare"
    url: "https://en.wikipedia.org/wiki/Cloudflare"
    wikipedia:
      en: "https://en.wikipedia.org/wiki/Cloudflare"
    wikidata: "Q4778915"
  - label: "Let's Encrypt"
    url: "https://en.wikipedia.org/wiki/Let%27s_Encrypt"
    wikipedia:
      en: "https://en.wikipedia.org/wiki/Let%27s_Encrypt"
    wikidata: "Q18786919"
  - label: "RFC 8657"
    url: "https://doi.org/10.17487/RFC8657"
    wikipedia:
      en: "https://en.wikipedia.org/wiki/Certification_Authority_Authorization"
    wikidata: "Q77250380"
  - label: "Border Gateway Protocol"
    url: "https://en.wikipedia.org/wiki/Border_Gateway_Protocol"
    wikipedia:
      en: "https://en.wikipedia.org/wiki/Border_Gateway_Protocol"
    wikidata: "Q11155"
  - label: "Man-in-the-middle Attack"
    url: "https://en.wikipedia.org/wiki/Man-in-the-middle_attack"
    wikipedia:
      en: "https://en.wikipedia.org/wiki/Man-in-the-middle_attack"
    wikidata: "Q554830"
  - label: "Government hacking"
    url: "https://en.wikipedia.org/wiki/Government_hacking"
    wikipedia:
      en: "https://en.wikipedia.org/wiki/Government_hacking"
    wikidata: "Q60761004"
isFeatured: true
author:
  collection: "people"
  id: "david-osipov"

# References for citation management
references:
  - id: "cf-community-799999"
    type: "website"
    title: "Critical Security Gap: Cloudflare Must Fully Support RFC 8657 CAA"
    organization: "Cloudflare Community"
    year: 2025
    url: "https://community.cloudflare.com/t/critical-security-gap-cloudflare-must-fully-support-rfc-8657-caa/799999"
    archiveUrl: "https://archive.ph/v45rx"
    archiveDate: "2025-11-29"
    accessDate: "2025-11-29"
  - id: "valdikss-jabber"
    type: "article"
    title: "Encrypted traffic interception on Hetzner and Linode targeting the largest Russian XMPP (Jabber) messaging service"
    authors: ["ValdikSS"]
    year: 2023
    month: 11
    day: 3
    url: "https://notes.valdikss.org.ru/jabber.ru-mitm/"
    archiveUrl: "https://web.archive.org/web/20251001180559/http://notes.valdikss.org.ru/jabber.ru-mitm/"
    archiveDate: "2025-10-01"
    accessDate: "2025-11-29"
  - id: "rfc8659"
    type: "rfc"
    title: "DNS Certification Authority Authorization (CAA) Resource Record"
    authors: ["Phillip Hallam-Baker", "Rob Stradling", "Jacob Hoffman-Andrews"]
    organization: "RFC Editor"
    series: "Request for Comments"
    number: 8659
    doi: "10.17487/RFC8659"
    url: "https://www.rfc-editor.org/info/rfc8659"
    pagetotal: 17
    year: 2019
    month: 11
  - id: "rfc8446"
    type: "rfc"
    title: "The Transport Layer Security (TLS) Protocol Version 1.3"
    authors: ["Eric Rescorla"]
    organization: "RFC Editor"
    series: "Request for Comments"
    number: 8446
    doi: "10.17487/RFC8446"
    url: "https://www.rfc-editor.org/info/rfc8446"
    pagetotal: 160
    year: 2018
    month: 8
  - id: "rfc9000"
    type: "rfc"
    title: "QUIC: A UDP-Based Multiplexed and Secure Transport"
    authors: ["Jana Iyengar", "Martin Thomson"]
    organization: "RFC Editor"
    series: "Request for Comments"
    number: 9000
    doi: "10.17487/RFC9000"
    url: "https://www.rfc-editor.org/info/rfc9000"
    pagetotal: 151
    year: 2021
    month: 5
  - id: "rfc6844"
    type: "rfc"
    title: "DNS Certification Authority Authorization (CAA) Resource Record"
    authors: ["Phillip Hallam-Baker", "Rob Stradling"]
    organization: "RFC Editor"
    series: "Request for Comments"
    number: 6844
    doi: "10.17487/RFC6844"
    url: "https://www.rfc-editor.org/info/rfc6844"
    pagetotal: 18
    year: 2013
    month: 01
  - id: "rfc8657"
    type: "rfc"
    title: "Certification Authority Authorization (CAA) Record Extensions for Account URI and Automatic Certificate Management Environment (ACME) Method Binding"
    authors: ["Hugo Landau"]
    organization: "RFC Editor"
    series: "Request for Comments"
    number: 8657
    doi: "10.17487/RFC8657"
    url: "https://www.rfc-editor.org/info/rfc8657"
    pagetotal: 11
    year: 2019
    month: 11
  - id: "hugo-landau-xmpp"
    type: "website"
    title: "XMPP CA/jabber.ru incident"
    authors: ["Landau, H."]
    year: 2023
    month: 10
    day: 20
    url: "https://www.devever.net/~hl/xmpp-incident"
    archiveUrl: "https://web.archive.org/web/20250903150526/https://www.devever.net/~hl/xmpp-incident"
    archiveDate: "2025-09-03"
    accessDate: "2025-11-08"
  - id: "letsencrypt-challenges"
    type: "documentation"
    title: "Challenge Types - Let's Encrypt Documentation"
    organization: "Let's Encrypt"
    archiveUrl: "https://web.archive.org/web/20251011212447/https://letsencrypt.org/docs/challenge-types/"
    archiveDate: "2025-10-11"
    url: "https://letsencrypt.org/docs/challenge-types/"
    accessDate: "2025-11-29"
  - id: "birge-lee-2018-bgp"
    type: "conference"
    title: "Bamboozling Certificate Authorities with BGP"
    authors: ["Birge-Lee, H.", "Sun, Y.", "Edmundson, A.", "Rexford, J.", "Mittal, P."]
    booktitle: "27th USENIX Security Symposium (USENIX Security 18)"
    publisher: "USENIX Association"
    address: "Baltimore, MD"
    pages: "833-849"
    isbn: "978-1-939133-04-5"
    month: 8
    year: 2018
    url: "https://www.usenix.org/conference/usenixsecurity18/presentation/birge-lee"
    archiveUrl: "https://web.archive.org/web/20251012064048/https://www.usenix.org/conference/usenixsecurity18/presentation/birge-lee"
    archiveDate: "2025-10-01"
    accessDate: "2025-11-30"
  - id: "cf-caa-docs"
    type: "documentation"
    title: "Add CAA records - Cloudflare SSL/TLS docs"
    organization: "Cloudflare"
    url: "https://developers.cloudflare.com/ssl/edge-certificates/caa-records/"
    archiveUrl: "https://web.archive.org/web/20251129082411/https://developers.cloudflare.com/ssl/edge-certificates/caa-records/"
    archiveDate: "2025-11-29"
    accessDate: "2025-11-08"
  - id: "cf-community-758109"
    type: "website"
    title: "Cloudflare nameservers ignore CAA record validationmethods and accounturi"
    organization: "Cloudflare Community"
    year: 2025
    url: "https://community.cloudflare.com/t/cloudflare-nameservers-ignore-caa-record-validationmethods-and-accounturi/758109"
    archiveUrl: "https://archive.ph/Yiizx"
    archiveDate: "2025-11-30"
    accessDate: "2025-11-08"
  - id: "vercel-caa"
    type: "documentation"
    title: "Working with DNS"
    organization: "Vercel"
    url: "https://vercel.com/docs/domains/working-with-dns"
    archiveUrl: "https://web.archive.org/web/20250612154059/https://vercel.com/docs/domains/working-with-dns"
    archiveDate: "2025-06-12"
    accessDate: "2025-11-30"
  - id: "aws-caa"
    type: "documentation"
    title: "Set up to use AWS Certificate Manager"
    organization: "AWS"
    url: "https://docs.aws.amazon.com/acm/latest/userguide/setup.html#setup-caa"
    archiveUrl: "https://web.archive.org/web/20250729205005/https://docs.aws.amazon.com/acm/latest/userguide/setup.html#setup-caa"
    archiveDate: "2025-07-29"
    accessDate: "2025-11-30"
  - id: "gcloud-caa-troubleshoot"
    type: "documentation"
    title: "Troubleshoot certificate issuance - Google Cloud"
    organization: "Google Cloud"
    url: "https://docs.cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#caa"
    accessDate: "2026-01-17"
    archiveUrl: "https://web.archive.org/web/20260117152905/https://docs.cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#caa"
    archiveDate: "2026-01-17"
  - id: "dnssimple-support"
    type: "website"
    title: "CAA Record Format and Policy Tags"
    organization: "DNSimple Support"
    year: 2025
    url: "https://support.dnsimple.com/articles/caa-record-format/"
    accessDate: "2025-11-08"
  - id: "aws-route53-caa"
    type: "website"
    title: "Amazon Route 53 now supports CAA records"
    organization: "AWS"
    year: 2017
    month: 8
    url: "https://aws.amazon.com/about-aws/whats-new/2017/08/amazon-route-53-now-supports-caa-records/"
    accessDate: "2025-11-08"
  - id: "wiki-diginotar"
    type: "website"
    title: "DigiNotar - Wikipedia"
    organization: "Wikipedia"
    url: "https://en.wikipedia.org/wiki/DigiNotar"
    accessDate: "2025-11-08"
  - id: "sslmate-failures"
    type: "website"
    title: "Timeline of Certificate Authority Failures"
    organization: "SSLMate"
    url: "https://sslmate.com/resources/certificate_authority_failures"
    archiveUrl: "https://web.archive.org/web/20250917234438/https://sslmate.com/resources/certificate_authority_failures"
    archiveDate: "2025-09-17"
    accessDate: "2025-11-30"
  - id: "gualtieri-http01"
    type: "article"
    title: "Chaining Remote Web Vulnerabilities to Abuse Let's Encrypt"
    authors: ["Gualtieri, M."]
    year: 2017
    month: 08
    day: 31
    url: "https://www.mike-gualtieri.com/posts/chaining-remote-web-vulnerabilities-to-abuse-lets-encrypt"
    archiveUrl: "https://web.archive.org/web/20250907232526/https://www.mike-gualtieri.com/posts/chaining-remote-web-vulnerabilities-to-abuse-lets-encrypt"
    archiveDate: "2025-09-07"
    accessDate: "2025-11-08"
  - id: "habr-post"
    type: "article"
    title: "Дыра в щите Cloudflare: как атака на Jabber.ru вскрыла проблему, о которой молчат c 2023"
    authors: ["Осипов, Давид"]
    organization: "Habr.com"
    year: 2025
    url: "https://habr.com/ru/articles/918570/"
    archiveUrl: "https://web.archive.org/web/20250812005512/https://habr.com/ru/articles/918570/"
    archiveDate: "2025-08-12"
    accessDate: "2025-11-08"
  - id: "cf-blog-pinning-outdated"
    type: "article"
    title: "Avoiding downtime: modern alternatives to outdated certificate pinning practices"
    organization: "Cloudflare Blog"
    year: 2024
    url: "https://blog.cloudflare.com/why-certificate-pinning-is-outdated/"
    accessDate: "2025-11-08"
  - id: "cf-community-758109-workaround"
    type: "website"
    title: "Cloudflare nameservers ignore CAA record... (Workaround)"
    authors: ["Laudian"]
    organization: "Cloudflare Community"
    year: 2025
    month: 01
    day: 15
    url: "https://community.cloudflare.com/t/cloudflare-nameservers-ignore-caa-record-validationmethods-and-accounturi/758109/2"
    archiveUrl: "https://archive.ph/Yiizx"
    archiveDate: "2025-11-30"
    accessDate: "2025-11-30"
  - id: "birge-lee-2024-crypto-dv"
    type: "paper"
    title: "Cryptographically-Secured Domain Validation"
    authors: ["Birge-Lee, H.", "Cimaszewski, G. H.", "Krahenbuhl, C.", "Wang, L.", "Gable, A.", "Mittal, P."]
    journal: "Princeton University, Let's Encrypt"
    year: 2024
    url: "https://secure-certificates.princeton.edu/cryptographic-domain-validation.pdf"
    archiveUrl: "https://web.archive.org/web/20250416050903/https://secure-certificates.princeton.edu/cryptographic-domain-validation.pdf"
    archiveDate: "2025-04-16"
    accessDate: "2026-01-17"
  - id: "princeton-multiva-2023"
    type: "paper"
    title: "How Effective is Multiple-Vantage-Point Domain Control Validation?"
    authors: ["Cimaszewski, G.", "Birge-Lee, H.", "Wang, L.", "Rexford, J.", "Mittal, P."]
    journal: "arXiv:2302.08000 [cs.CR]"
    year: 2023
    month: 2
    doi: "10.48550/arXiv.2302.08000"
    url: "https://arxiv.org/abs/2302.08000"
  - id: "letsencrypt-caa"
    type: "documentation"
    title: "Certificate Authority Authorization (CAA) - Let's Encrypt Documentation"
    organization: "Let's Encrypt"
    url: "https://letsencrypt.org/docs/caa/"
    archiveUrl: "https://web.archive.org/web/20251004144145/https://letsencrypt.org/docs/caa/"
    archiveDate: "2025-10-04"
    accessDate: "2025-11-08"
    year: 2023
    month: 8
    day: 16
  - id: "mozilla-wosign-startcom-2016"
    type: "article"
    title: "Distrusting New WoSign and StartCom Certificates"
    authors: ["Kathleen Wilson"]
    organization: "Mozilla"
    year: 2016
    month: 10
    day: 24
    url: "https://blog.mozilla.org/security/2016/10/24/distrusting-new-wosign-and-startcom-certificates/"
    archiveUrl: "https://web.archive.org/web/20250921194325/https://blog.mozilla.org/security/2016/10/24/distrusting-new-wosign-and-startcom-certificates/"
    archiveDate: "2025-09-21"
    accessDate: "2025-11-30"
  - id: "cabforum-sc067v3"
    type: "report"
    title: "Ballot SC067v3: Require domain validation and CAA checks to be performed from multiple Network Perspectives"
    organization: "CA/Browser Forum"
    year: 2024
    url: "https://cabforum.org/2024/08/05/ballot-sc067v3-require-domain-validation-and-caa-checks-to-be-performed-from-multiple-network-perspectives-corroboration"
    archiveUrl: "https://web.archive.org/web/20251012064049/https://cabforum.org/2024/08/05/ballot-sc067v3-require-domain-validation-and-caa-checks-to-be-performed-from-multiple-network-perspectives-corroboration"
    archiveDate: "2025-10-12"
    accessDate: "2025-11-30"
  - id: "cf-introducing-tls13"
    type: "article"
    title: "Introducing TLS 1.3"
    authors: ["Nick Sullivan"]
    organization: "Cloudflare Blog"
    year: 2016
    month: 09
    day: 20
    url: "https://blog.cloudflare.com/introducing-tls-1-3/"
    archiveUrl: "https://web.archive.org/web/20250823134855/https://blog.cloudflare.com/introducing-tls-1-3/"
    archiveDate: "2025-08-23"
    accessDate: "2025-11-30"
  - id: "cf-head-start-quic"
    type: "article"
    title: "Get a head start with QUIC"
    authors: ["Nick Jones"]
    organization: "Cloudflare Blog"
    year: 2018
    month: 09
    day: 25
    url: "https://blog.cloudflare.com/head-start-with-quic/"
    archiveUrl: "https://web.archive.org/web/20250620064636/https://blog.cloudflare.com/head-start-with-quic/"
    archiveDate: "2025-06-20"
    accessDate: "2025-11-30"
  - id: "ietf-acme-dns-persist"
    type: "report"
    title: "Automated Certificate Management Environment (ACME) Challenge for Persistent DNS TXT Record Validation (draft-ietf-acme-dns-persist-00)"
    authors: ["Heurich, S.", "Birge-Lee, H.", "Slaughter, M."]
    organization: "IETF"
    year: 2025
    month: 11
    day: 3
    url: "https://datatracker.ietf.org/doc/draft-ietf-acme-dns-persist/"
    archiveUrl: "https://web.archive.org/web/20260117123622/https://datatracker.ietf.org/doc/draft-ietf-acme-dns-persist/"
    archiveDate: "2026-01-17"
  - id: "google-group-dnssec"
    type: "website"
    title: "The Use of DNSSEC by Certificate Authorities"
    authors: ["Birge-Lee, H."]
    organization: "Server Certificate WG (CA/B Forum)"
    year: 2025
    month: 2
    day: 19
    url: "https://groups.google.com/a/groups.cabforum.org/g/servercert-wg/c/WNGFxQjPkPY"
    archiveUrl: "https://web.archive.org/web/20260117120505/https://groups.google.com/a/groups.cabforum.org/g/servercert-wg/c/WNGFxQjPkPY?pli=1"
    archiveDate: "2026-01-17"
  - id: "digicert-blog-dns-persist"
    type: "article"
    title: "A New DNS Validation Method for Simplified Certificate Automation"
    organization: "DigiCert"
    year: 2025
    month: 11
    url: "https://www.digicert.com/blog/a-new-dns-validation-method"
    archiveUrl: "https://web.archive.org/web/20260117114505/https://www.digicert.com/blog/a-new-dns-validation-method"
    archiveDate: "2026-01-17"
  - id: "letsencrypt-accounturi"
    type: "documentation"
    title: "Issue certificates only to specific agent keys"
    organization: "Let's Encrypt Community Support"
    year: 2023
    month: 1
    url: "https://community.letsencrypt.org/t/issue-certificates-only-to-specific-agent-keys/184283"
    archiveUrl: "https://web.archive.org/web/20260117123907/https://community.letsencrypt.org/t/issue-certificates-only-to-specific-agent-keys/184283/5"
    archiveDate: "2026-01-17"
  - id: "netlify-caa-support"
    type: "website"
    title: "Let's Encrypt accounturi for CAA record"
    organization: "Netlify Support Forums"
    year: 2023
    url: "https://answers.netlify.com/t/lets-encrypt-accounturi-for-caa-record/103453"
    archiveUrl: "https://web.archive.org/web/20250710081402/https://answers.netlify.com/t/lets-encrypt-accounturi-for-caa-record/103453"
    archiveDate: "2025-07-10"
    accessDate: "2026-01-17"
  - id: "chrome-root-policy"
    type: "documentation"
    title: "Chrome Root Program Policy, Version 1.7"
    organization: "Google Chrome"
    year: 2025
    month: 7
    day: 15
    url: "https://googlechrome.github.io/chromerootprogram/"
    archiveUrl: "https://web.archive.org/web/20260106145919/https://googlechrome.github.io/chromerootprogram/"
    archiveDate: "2026-01-06"
    accessDate: "2026-01-17"
  - id: "gts-cps"
    type: "documentation"
    title: "Google Trust Services, Certification Practice Statement v.5.22"
    organization: "Google Trust Services LLC"
    year: 2025
    month: 6
    day: 25
    url: "https://pki.goog/repo/cps/5.22/GTS-CPS.html"
    archiveUrl: "https://web.archive.org/web/20260117133043/https://pki.goog/repo/cps/5.22/GTS-CPS.html"
    archiveDate: "2026-01-17"
    accessDate: "2026-01-17"
  - id: "ietf-tls-esni-25"
    type: "report"
    publisher: "Internet Engineering Task Force"
    note: "Work in Progress"
    url: "https://datatracker.ietf.org/doc/draft-ietf-tls-esni/25/"
    authors: ["Eric Rescorla", "Kazuho Oku", "Nick Sullivan", "Christopher A. Wood"]
    title: "TLS Encrypted Client Hello"
    year: 2025
    month: 6
    day: 14
  - id: "cf-encrypted-client-hello"
    type: "article"
    title: "Good-bye ESNI, hello ECH!"
    authors: ["Christopher Patton"]
    organization: "Cloudflare Blog"
    year: 2020
    month: 12
    day: 8
    url: "https://blog.cloudflare.com/encrypted-client-hello/"
    archiveUrl: "https://web.archive.org/web/20250905140052/https://blog.cloudflare.com/encrypted-client-hello/"
    archiveDate: "2025-09-05"
    accessDate: "2025-11-30"
  - id: "statista-cloudflare-2025"
    type: "website"
    title: "Cloudflare, a hidden pillar of the internet"
    authors: ["Tristan Gaudiaut"]
    organization: "Statista"
    year: 2025
    month: 11
    day: 19
    url: "https://www.statista.com/chart/35487/market-share-of-reverse-proxy-services-cloudflare/"
    archiveUrl: "https://web.archive.org/web/20251130143159/https://www.statista.com/chart/35487/market-share-of-reverse-proxy-services-cloudflare/?__sso_cookie_checker=failed"
    archiveDate: "2025-11-30"
    accessDate: "2025-11-30"
  - id: "w3techs-proxy-2025"
    type: "website"
    title: "Usage of Reverse Proxy Services for Websites, November 2025"
    authors: ["W3Techs.com"]
    organization: "W3Techs"
    year: 2025
    month: 11
    day: 1
    url: "https://w3techs.com/technologies/overview/proxy/"
    archiveUrl: "https://archive.ph/6fkAS"
    archiveDate: "2025-11-30"
    accessDate: "2025-11-30"
  - id: "w3techs-cloudflare-2026"
    type: "website"
    title: "Cloudflare — W3Techs Reverse Proxy Services Usage Statistics"
    organization: "W3Techs"
    year: 2026
    month: 01
    day: 17
    url: "https://w3techs.com/technologies/details/cn-cloudflare"
    archiveUrl: "https://archive.ph/oeQrL"
    archiveDate: "2026-01-17"
    accessDate: "2026-01-17"
  - id: "cf-venezuela-bgp"
    type: "article"
    title: "A closer look at a BGP anomaly in Venezuela"
    authors: ["Bryton Herdes"]
    organization: "Cloudflare Blog"
    year: 2026
    month: 01
    day: 6
    url: "https://blog.cloudflare.com/bgp-route-leak-venezuela/"
    archiveUrl: "https://web.archive.org/web/20260113015221/https://blog.cloudflare.com/bgp-route-leak-venezuela/"
    archiveDate: "2026-01-13"
    accessDate: "2026-01-15"
  - id: "cf-community-879930"
    type: "website"
    title: "Universal SSL exposes domains to BGP leaks (re: Venezuela analysis)"
    organization: "Cloudflare Community"
    year: 2026
    month: 01
    day: 15
    url: "https://community.cloudflare.com/t/universal-ssl-exposes-domains-to-bgp-leaks-re-venezuela-analysis/879930"
    archiveUrl: "https://archive.ph/uZsIM"
    archiveDate: "2026-01-15"
    accessDate: "2026-01-15"
  - id: "netlify-docs"
    type: "documentation"
    title: "HTTPS (SSL) | Netlify Docs"
    organization: "Netlify"
    year: 2023
    url: "https://docs.netlify.com/domains-https/https-ssl/#netlify-managed-certificates"
    archiveUrl: "https://web.archive.org/web/20260117025839/https://docs.netlify.com/manage/domains/secure-domains-with-https/https-ssl/#netlify-managed-certificates"
    archiveDate: "2026-01-17"
    accessDate: "2026-01-17"
  - id: "letsencrypt-rfc8657-prod"
    type: "website"
    title: "PROD Support for RFC8657 CAA constraints"
    organization: "Let's Encrypt Community Support"
    year: 2022
    url: "https://community.letsencrypt.org/t/prod-support-for-rfc8657-caa-constraints-for-accounturi-and-validationmethods/181584"
    archiveUrl: "https://web.archive.org/web/20260117124118/https://community.letsencrypt.org/t/prod-support-for-rfc8657-caa-constraints-for-accounturi-and-validationmethods/181584"
    archiveDate: "2026-01-17"
    accessDate: "2026-01-17"
  - id: "acme-lecaa"
    type: "website"
    title: "Let's Encrypt using accounturi"
    organization: "University of North Carolina at Charlotte"
    year: 2024
    url: "https://acme-lecaa.charlotte.edu/"
    archiveUrl: "https://web.archive.org/web/20250114115101/https://acme-lecaa.charlotte.edu/"
    archiveDate: "2025-01-14"
    accessDate: "2026-01-17"
  - id: "gcloud-managed-certs-caa"
    type: "documentation"
    title: "Use Google-managed SSL certificates"
    organization: "Google Cloud"
    url: "https://docs.cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#caa"
    archiveUrl: "https://web.archive.org/web/20260117152905/https://docs.cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#caa"
    archiveDate: "2026-01-17"
    accessDate: "2026-01-17"
  - id: "notcve-2026-0001"
    type: "website"
    title: "NotCVE-2026-0001 — Cloudflare Universal SSL CAA Augmentation"
    organization: "NotCVE.org"
    year: 2026
    month: 1
    day: 21
    url: "https://notcve.org/view.php?id=NotCVE-2026-0001"
    archiveUrl: "https://web.archive.org/web/20260121122026/https://notcve.org/view.php?id=NotCVE-2026-0001"
    archiveDate: "2026-01-21"
    accessDate: "2026-01-21"
    note: "NotCVE listing. CVSS v3.1: 8.7 (High)."
  - id: "cert-cc-vince-840183"
    type: "website"
    title: "CERT/CC VINCE Case VU#840183"
    organization: "Carnegie Mellon University <abbr title=\"Computer Emergency Response Team/Coordination Center\">CERT/CC</abbr>"
    year: 2026
    month: 1
    day: 21
    note: "VINCE case VU#840183 — status: Open."
  - id: "cf-blog-acme-path-vulnerability"
    type: "article"
    title: "How we mitigated a vulnerability in Cloudflare's ACME validation logic"
    authors: ["Hrushikesh Deshpande", "Andrew Mitchell", "Leland Garofalo"]
    organization: "Cloudflare Blog"
    year: 2026
    month: 1
    day: 19
    url: "https://blog.cloudflare.com/acme-path-vulnerability/"
    archiveUrl: "https://web.archive.org/web/20260119223010/https://blog.cloudflare.com/acme-path-vulnerability/"
    archiveDate: "2026-01-19"
    accessDate: "2026-01-21"
versionHistory:
  - version: "1.7"
    date: "2026-01-21"
    status: "current"
    changes: "Integrated independent validation: NotCVE-2026-0001 (CVSS 8.7) and CERT/CC VINCE case VU#840183. Added 'Vulnerability Status' section with technical classifications (CWE/CAPEC). Contextualized Cloudflare's Jan 19 ACME WAF bypass patch as independent fix unrelated to CAA override. Enhanced with semantic HTML tags for dates and data elements."
    archiveUrl: "https://archive.ph/oO5BH"
  - version: "1.6"
    date: "2026-01-17"
    status: "archived"
    changes: "Added draft-ietf-acme-dns-persist-00 analysis and industry RFC 8657 support matrix. Integrated Henry Birge-Lee's DNSSEC synergy discussion from CA/B Forum. Clarified account-binding defense mechanisms for multi-tenant platforms. Updated data as of Jan 2026."
    archiveUrl: "https://archive.ph/DcO7a"
  - version: "1.5"
    date: "2026-01-15"
    status: "archived"
    changes: "Added analysis of the January 2026 Venezuela BGP leak as confirmation of the threat vector. Linked to new Cloudflare Community discussion on RFC 8657 support requirements."
    archiveUrl: "https://web.archive.org/web/20260117113445/https://david-osipov.vision/en/blog/cybersecurity/cloudflare-ssl-mitm-flaw-2026/"
  - version: "1.4"
    date: "2026-01-09"
    status: "archived"
    changes: "Added DOI (10.5281/zenodo.18201412) for citation management and academic discovery systems."
    archiveUrl: "https://archive.ph/eFGtf"
  - version: "1.3"
    date: "2026-01-06"
    status: "archived"
    archiveUrl: "https://web.archive.org/web/20260109181239/https://david-osipov.vision/en/blog/cybersecurity/cloudflare-ssl-mitm-flaw-2026/"
    changes: "Added inline JSON-LD RSL metadata and human-readable CC BY 4.0 license information to the Audio and Video overviews; minor accessibility improvements."
  - version: "1.2"
    date: "2026-01-06"
    status: "archived"
    changes: "Added audio overview section with accessible HTML5 audio player, properly configured R2 CORS policy, and enhanced WCAG 2.2 AA/WAI-ARIA compliance."
  - version: "1.1"
    date: "2026-01-05"
    status: "archived"
    changes: "Added video overview section with embedded YouTube presentation analyzing the security vulnerability."
    archiveUrl: "https://web.archive.org/web/20260105000000/https://david-osipov.vision/en/blog/cybersecurity/cloudflare-ssl-mitm-flaw-2026/"
  - version: "1.0"
    date: "2025-12-30"
    status: "archived"
    changes: "Initial publication."
    archiveUrl: "https://web.archive.org/web/20260103203248/https://david-osipov.vision/en/blog/cybersecurity/cloudflare-ssl-mitm-flaw-2026/"
---

import ArchiveLink from '@components/ArchiveLink.astro';
import ResponsiveTable from '@components/mdx/ResponsiveTable.astro';
import SmartImage from '@components/content/SmartImage.astro';
import OptimizedImage from '@components/ui/OptimizedImage.astro';
import AudioOverview from '@components/content/AudioOverview.astro';
import VideoOverview from '@components/content/VideoOverview.astro';
import statistaCloudflareMarketShare from './images/Secondary/cloudflare-ssl-mitm-flaw-2025/statista_cloudflare_market_share.jpeg';

## 🚨 Vulnerability Status: Formally Tracked

As of <time datetime="2026-01-21">January 21, 2026</time>, this vulnerability is being formally tracked by multiple security coordination bodies:

* **<abbr title="Computer Emergency Response Team/Coordination Center">CERT/CC</abbr> (<a href="https://kb.cert.org/vince/" rel="external noopener" target="_blank"><abbr title="Vulnerability Information and Coordination Environment">VINCE</abbr></a>):** Report <cite><data value="VU#840183">VU#840183</data></cite>&nbsp;(Status: <span style="font-weight: bold; color: #d9534f;">Open</span>)
* **Not<abbr title="Common Vulnerabilities and Exposures">CVE</abbr> ID:** <a href="https://notcve.org/view.php?id=NotCVE-2026-0001" rel="external noopener" target="_blank"><cite><data value="NotCVE-2026-0001">NotCVE-2026-0001</data></cite></a> [cite:notcve-2026-0001]
  * **Severity:**&nbsp;<data value="8.7"><abbr title="Common Vulnerability Scoring System">CVSS</abbr> 8.7 (<span style="font-weight: bold; color: #d9534f;">High</span>)</data>
    * **Attack Vector:** Network-based (<abbr title="Border Gateway Protocol">BGP</abbr> hijacking, network interception)
    * **Impact:** Critical (Domain Integrity, <abbr title="Transport Layer Security">TLS</abbr> <abbr title="Man-in-the-Middle">MITM</abbr> capability)

### Technical Classification

The vulnerability has been formally classified under the following enumeration standards:

* **<dfn><a href="https://cwe.mitre.org/data/definitions/1188.html" rel="external noopener" target="_blank"><data value="CWE-1188">CWE-1188</data></a></dfn>&nbsp;:** Insecure Default Initialization of Resource (Core issue: Cloudflare defaults to insecure <abbr title="Certification Authority Authorization">CAA</abbr> injection).
* **<dfn><a href="https://cwe.mitre.org/data/definitions/693.html" rel="external noopener" target="_blank"><data value="CWE-693">CWE-693</data></a></dfn>&nbsp;:** Protection Mechanism Failure (Failure of the `accounturi` restriction).
* **<dfn><a href="https://capec.mitre.org/data/definitions/94.html" rel="external noopener" target="_blank"><data value="CAPEC-94">CAPEC-94</data></a></dfn>&nbsp;:** Adversary in the Middle (AiTM) (The resulting attack vector).
* **<dfn><a href="https://capec.mitre.org/data/definitions/584.html" rel="external noopener" target="_blank"><data value="CAPEC-584">CAPEC-584</data></a></dfn>&nbsp;:** <abbr title="Border Gateway Protocol">BGP</abbr> Route Disabling / Manipulation (Prerequisite for the attack).
* **<dfn><a href="https://capec.mitre.org/data/definitions/598.html" rel="external noopener" target="_blank"><data value="CAPEC-598">CAPEC-598</data></a></dfn>&nbsp;:** DNS Spoofing (Alternative network manipulation vector).

## Audio Overview

<AudioOverview 
  contentId="audio-overview"
/>

## Video Overview

<VideoOverview 
  contentId="video-overview"
/>

## TL;DR

### The Mechanism
Cloudflare's Universal <abbr title="Secure Sockets Layer">SSL</abbr> injects **permissive CAA records** that override user DNS constraints, causing certificate authorities to ignore strict account-binding checks.

### The Risk
This enables **BGP hijacking** and network interception to obtain unauthorized **TLS certificates** by bypassing `accounturi` and `validationmethods`.

### The Precedent
The configuration replicates the gap exploited in the **2023 <cite>jabber.ru</cite> <abbr title="Man-in-the-Middle">MitM</abbr> attack**, where intercepted traffic satisfied `http-01` validation challenges.

### The Mitigation
Cloudflare must stop overriding user DNS records or fully implement **<cite>RFC 8657</cite>** to restrict certificate issuance to the domain owner's authorized ACME account.

## 🚨 UPDATE (January 2026): The Venezuela Confirmation and Related Developments

### Related: Cloudflare's Jan 19 ACME WAF Bypass Patch (Different Vulnerability)

On <time datetime="2026-01-19">January 19, 2026</time>, Cloudflare disclosed and patched a separate <abbr title="Automatic Certificate Management Environment">ACME</abbr>-related vulnerability in their <abbr title="Web Application Firewall">WAF</abbr> bypass logic, as reported by security researchers <a href="https://fearsoff.com" rel="external noopener noreferrer nofollow">**FearsOff**</a>. [cite:cf-blog-acme-path-vulnerability]

<strong>Critical Distinction:</strong> This is **NOT a fix for <cite>NotCVE-2026-0001</cite>**. Cloudflare patched an *implementation bug* (WAF bypass via ACME challenge logic) but continues to retain the *architectural flaw* (CAA override) identified in this article. The swift Cloudflare response to the FearsOff WAF vulnerability—between <time datetime="2025-10">October 2025</time> reporting and <time datetime="2026-01">January 2026</time> patching—while remaining silent on the <cite>RFC 8657</cite> design flaw for over a year, suggests the silence is deliberate rather than technical.

### The Venezuela BGP Leak Confirmation

In <time datetime="2026-01">**January 2026**</time>, a massive <abbr title="Border Gateway Protocol">BGP</abbr> leak involving Venezuela's state-owned <abbr title="Internet Service Provider">ISP</abbr> (CANTV, <data value="AS8048">AS8048</data>) made global headlines. In their analysis of the incident, Cloudflare explicitly stated that <q cite="https://blog.cloudflare.com/bgp-route-leak-venezuela/">"BGP route leaks happen all of the time, and they have always been part of the Internet."</q> [cite:cf-venezuela-bgp]

This admission highlights exactly why the security gap described in this article is so critical. If BGP leaks are "common" (whether accidental or malicious), then the network layer cannot be trusted for domain validation.

Yet, as detailed below, Cloudflare's Universal SSL default configuration **actively disables** the specific <abbr title="Internet Engineering Task Force">IETF</abbr> standard (<cite>RFC 8657</cite>) designed to prevent these common BGP leaks from being weaponized to issue fraudulent certificates.

[I have opened a new discussion on this specific contradiction with the Cloudflare team](https://community.cloudflare.com/t/universal-ssl-exposes-domains-to-bgp-leaks-re-venezuela-analysis/879930) [cite:cf-community-879930].

## Introduction: A Critical Security Gap in Cloudflare's Universal SSL

I have identified a significant, yet easily fixable security weakness in Cloudflare's Universal <abbr title="Secure Sockets Layer">SSL</abbr> that affects millions of users, and my attempts to address it directly with Cloudflare [cite:cf-community-799999] have been... well, let's call it "unsuccessful."

The issue is best understood through the lens of the <a href="https://www.jabber.ru/" rel="nofollow noopener noreferrer external">jabber.ru</a> <abbr title="Man-in-the-Middle">MitM</abbr> attack [cite:valdikss-jabber] that took place in <time datetime="2023">2023</time>. At that time, government-backed attackers were able to intercept traffic for `jabber.ru` at the network level. By doing this, they could satisfy the <code>http-01</code> domain validation challenge from <a href="https://en.wikipedia.org/wiki/Let%27s_Encrypt" rel="external noopener">Let's Encrypt</a> and were issued a valid <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security" rel="external noopener"><abbr title="Transport Layer Security">TLS</abbr></a> certificate for the domain. They did not need to compromise the server itself.

## <cite>RFC 8659</cite> vs <cite>RFC 8657</cite>: The CAA Standards Explained

To understand the problem, you need to understand the solution. The defense against this attack is built on two <abbr title="Internet Engineering Task Force">IETF</abbr> standards.

### 1. The Basic Standard: <cite>RFC 8659</cite> (CAA)

First, there's the basic <abbr title="Certification Authority Authorization">CAA</abbr> standard, [cite:rfc8659], which updates the original [cite:rfc6844]. This is what you can call "brand-level trust." It lets you put a record in your DNS that says:

<figure>
  <figcaption>Example — basic CAA record (brand-level trust)</figcaption>
  <pre class="language-dns"><code>david-osipov.vision. IN CAA 0 issue "letsencrypt.org"</code></pre>
</figure>

This record tells all Certificate Authorities (<abbr title="Certificate Authorities">CAs</abbr>): "Only Let's Encrypt can issue a certificate for my domain."

This is good, but it's not enough. It means <em>anyone</em> who can pass Let's Encrypt's validation challenge can get a cert. If an attacker hijacks your web server or (as in the `jabber.ru` case) your network traffic, they can pass the challenge and get a valid cert from your *authorized* <abbr title="Certificate Authority">CA</abbr>.

### 2. The *Real* Standard: <cite>RFC 8657</cite> (The ACME Extensions)

This is where [cite:rfc8657] comes in. It was published in <time datetime="2019-11">November 2019</time> and was designed <em>specifically</em> to prevent this kind of attack. It's an upgrade from "brand-level trust" to a "process-level trust." It adds two critical parameters: <code>accounturi</code> and <code>validationmethods</code>.

**The <dfn>`accounturi`</dfn> parameter is your <em>"second factor."</em>**

It's a record that says: "Only Let's Encrypt, using <em>my specific account</em>, can issue a certificate for my domain."

<figure>
  <figcaption>Example — CAA record binding issuance to a specific ACME account (`accounturi`)</figcaption>
  <pre class="language-dns"><code>david-osipov.vision. IN CAA 0 issue "letsencrypt.org; accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/MY_ACCOUNT_ID"</code></pre>
</figure>

If this had been in place for `jabber.ru`, the attackers' request from <em>their own</em> Let's Encrypt account would have been rejected by the <abbr title="Certificate Authority">CA</abbr>, and the attack would have failed. The author of <cite>RFC 8657</cite> (Hugo Landau) himself confirmed this in his paper <cite>Mitigating the Hetzner/Linode XMPP.ru MitM interception incident</cite>[cite:hugo-landau-xmpp].

**The `validationmethods` parameter is your <em>"attack vector shield."</em>**

This parameter lets you specify <em>how</em> the <abbr title="Certificate Authority">CA</abbr> is allowed to validate your domain. This is the part that would have <em>directly</em> blocked the `jabber.ru` attack.

### Technical Deep Dive: <code>http-01</code> vs. <code>dns-01</code>

* **<dfn><code>http-01</code></dfn> challenge:** The <abbr title="Certificate Authority">CA</abbr> asks you to put a specific file on your web server at `http://your.domain/.well-known/acme-challenge/`. This proves you control the web server, but it's vulnerable to network-level <a href="https://en.wikipedia.org/wiki/Border_Gateway_Protocol" rel="external noopener"><abbr title="Border Gateway Protocol">BGP</abbr></a> hijacking. Attackers don't need to touch your server; they just need to intercept the <abbr title="Certificate Authority">CA</abbr>'s request, which is exactly what happened to `jabber.ru`.
* **<dfn><code>dns-01</code></dfn> challenge:** The <abbr title="Certificate Authority">CA</abbr> asks you to put a specific TXT record in your DNS. This proves you control the DNS, which is almost always a more secure and separate asset from your web server.

By setting this record, you <em>forbid</em> the <abbr title="Certificate Authority">CA</abbr> from using the vulnerable <code>http-01</code> method entirely:

<figure>
  <figcaption>Example — CAA record restricting validation methods to `dns-01`</figcaption>
  <pre class="language-dns"><code>david-osipov.vision. IN CAA 0 issue "letsencrypt.org; validationmethods=dns-01"</code></pre>
</figure>

<dl>
  <dt><dfn>accounturi</dfn></dt>
  <dd>A CAA parameter that binds issuance to a particular ACME account URI (prevents issuance from other ACME accounts).</dd>
  <dt><dfn>validationmethods</dfn></dt>
  <dd>A CAA parameter that restricts which ACME validation methods a CA may use (e.g., <code>dns-01</code> only).</dd>
  <dt><dfn>http-01</dfn></dt>
  <dd>The ACME HTTP-based challenge; proves control of a web server but is vulnerable to network-level interception (BGP hijack).</dd>
  <dt><dfn>dns-01</dfn></dt>
  <dd>The ACME DNS-based challenge; proves control of DNS records and is generally more robust against network interception.</dd>
</dl>

If `jabber.ru` had <em>either</em> of these <cite>RFC 8657</cite> records, the attack would have been dead on arrival.

## The Cloudflare Problem: A "Feature Collision"

Now, the core issue. As a <a href="https://en.wikipedia.org/wiki/Product_manager" rel="external noopener">B2B Product Manager</a>, I don't see this as a "bug"—I see it as a <em>feature collision</em> where the needs of a (badly designed) product feature are <em>actively destroying</em> user security.

*Here is the problem:* When you use Cloudflare's free Universal SSL, Cloudflare automatically adds its own CAA records for its partner CAs (Let's Encrypt, Google Trust Services, etc.) [cite:cf-caa-docs]. These records <em>do not</em> use the `accounturi` or `validationmethods` parameters.

Worse, if you try to add your own secure CAA record (like the ones above, that I showed you), Cloudflare's system sees it and says, "Oh, the user is adding a CAA record! I should '<em>helpfully</em>' add my own permissive ones too! And if user's records conflict with mine, I'll just replace them with mine to make sure my system works smoothly."

So the final DNS response looks like this:
1.  `... IN CAA 0 issue "letsencrypt.org; accounturi=.../MY_ACCOUNT_ID"` (Your secure record is being replaced by...)
2.  `... IN CAA 0 issue "letsencrypt.org"` (...this one. Cloudflare's "<em>helpful</em>" insecure record)

According to the rules, a CA is allowed to issue a certificate if <em>any</em> matching record permits it. Your secure record (1) correctly blocks the attacker, but Cloudflare's injected record (2) replaces your own and it <em>explicitly permits a malicious actor to carry out an attack</em>.

<strong>Cloudflare's "feature" <em>actively and silently nullifies</em> the <abbr title="Internet Engineering Task Force">IETF</abbr>-standard security control.</strong> It recreates the exact vulnerability that `jabber.ru` suffered from for *millions* of its users.

Now look at practical exploit:
* **Setup:** A user delegates their <code>dns-01</code> challenge using a CNAME to an `acme-dns` server they don't fully control (a common, secure pattern).
* **Intended Security:** The user sets an `accounturi` record to ensure only <em>their own</em> ACME account can use this delegation.
* **The Cloudflare Flaw:** Cloudflare replaces user's records with its permissive <code>issue "letsencrypt.org"</code> record.
* **The Attack:** The (untrusted) admin of the `acme-dns` server can now use <em>their own</em> Let's Encrypt account to get a valid certificate for the user's domain, completely bypassing the user's `accounturi` "second factor."

## This Isn't Just Cloudflare: A Pattern of "Platform vs. Provider"

To be fair (and to be more "academic"), Cloudflare isn't the only one with this problem. This is a systemic flaw in any "integrated platform" that bundles "magic" automated SSL with hosting. The magic <em>must</em> override your security to function.

<ResponsiveTable caption="Provider behavior comparison">
  <thead>
    <tr>
      <th scope="col">Provider Type</th>
      <th scope="col">Provider</th>
      <th scope="col">The "Product" vs. "Security" Conflict</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Integrated Platform</strong></td>
      <td><strong>Cloudflare</strong></td>
      <td><strong>Critical Failure.</strong> Injects permissive records that <strong>actively override</strong> user-defined `accounturi` records, breaking RFC 8657. [cite:cf-community-758109]</td>
    </tr>
    <tr>
      <td><strong>Integrated Platform</strong></td>
      <td><strong>Vercel</strong></td>
      <td>Similar behavior; abstracts away issuance details, often conflicting with strict user policies. [cite:vercel-caa]</td>
    </tr>
    <tr>
      <td><strong>Integrated Platform</strong></td>
      <td><strong>Netlify</strong></td>
      <td><strong>No Conflict (Fixed).</strong> Unlike Cloudflare, Netlify explicitly publishes their ACME `accounturi` in public documentation, allowing users to secure their domains. [cite:netlify-docs] [cite:netlify-caa-support]</td>
    </tr>
    <tr>
      <td><strong>Cloud Provider</strong></td>
      <td><strong>AWS (ACM)</strong></td>
      <td><strong>Standard Behavior.</strong> <strong>Enforces</strong> `issue "amazon.com"` <strong>if CAA is present</strong>, but does not interfere with records for other CAs or override user restrictions. [cite:aws-caa]</td>
    </tr>
    <tr>
      <td><strong>Cloud Provider</strong></td>
      <td><strong>Google Cloud</strong></td>
      <td><strong>Standard Behavior.</strong> <strong>Enforces</strong> `issue "pki.goog"` <strong>if CAA is present</strong>, but respects user-defined CAA constraints. [cite:gcloud-managed-certs-caa]</td>
    </tr>
    <tr>
      <td><strong>DNS-Only Provider</strong></td>
      <td><strong>AWS (Route 53)</strong></td>
      <td><strong>No Conflict.</strong> As a <em>DNS-only</em> service, it fully supports custom CAA records without interference. [cite:aws-route53-caa]</td>
    </tr>
  </tbody>
</ResponsiveTable>

This shows a clear, industry-wide divide. "DNS-Only" providers sell you security and control. "Integrated Platforms" sell you convenience, often at the <em>expense</em> of security.
## Theoretical Context: Why This Is a "Feature Collision" and an Engineering Dilemma

Theoretically, the **"correct" solution** would be for Cloudflare to simply not interfere: if a user defines a CAA record, the system should not override it. However, architecturally, this creates a dilemma for "integrated platforms":

- **If the user does NOT add a CAA record:** Cloudflare MUST add its own to indicate which CA will issue Universal SSL certificates.
- **If the user DOES add a CAA record:** The lightweight solution (which Cloudflare uses) is to add its own record *in addition to* the user's. The strict solution is to respect the user's choice and allow them full CAA control.

Cloudflare chose the lightweight approach. It's more convenient for their engineers, but more dangerous for users.
## The Industry's Answer: Multi-Perspective Issuance Corroboration (MPIC)

While many platforms continued to ignore or override <cite>RFC 8657</cite>, the CA/Browser Forum moved to address the root cause at the validation layer. In <time datetime="2024-07">July 2024</time>, the Forum approved <strong>Ballot SC-067 v3</strong>, which requires Certificate Authorities to use Multi-Perspective Issuance Corroboration (MPIC) instead of relying on a single, local vantage point for domain validation.

### The Princeton connection

The CA/Browser Forum specifically cites the 2018 Princeton paper <cite>Bamboozling Certificate Authorities with BGP</cite> [cite:birge-lee-2018-bgp] as a primary motivation — the attack model described there is the exact threat MPIC is designed to mitigate.[cite:cabforum-sc067v3]

The vote record shows unusually broad agreement: major issuers and major platform consumers supported the change.

<ResponsiveTable caption="Ballot SC067v3 Voting Results (July 2024)">
  <thead>
    <tr>
      <th scope="col">Category</th>
      <th scope="col">Votes Cast</th>
      <th scope="col">Approval Rate</th>
      <th scope="col">Key Voters</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Certificate Issuers</th>
      <td>22</td>
      <td>100% (22 Yes, 0 No)</td>
      <td>Let's Encrypt, DigiCert, Sectigo, GlobalSign</td>
    </tr>
    <tr>
      <th scope="row">Certificate Consumers</th>
      <td>4</td>
      <td>100% (4 Yes, 0 No)</td>
      <td>Google, Apple, Mozilla, Opera</td>
    </tr>
  </tbody>
</ResponsiveTable>

### Implementation timeline

According to the updated TLS Baseline Requirements and the ballot text, the rollout was staged:

- **<time datetime="2024-09-15">September 15, 2024</time>:** MPIC becomes *RECOMMENDED* for all CAs.
- **<time datetime="2025-03-15">March 15, 2025</time>:** MPIC becomes **MANDATORY** (minimum 2 independent perspectives required).
- **<time datetime="2026-03-15">March 15, 2026</time>:** Requirement tightens to a minimum of 3 independent perspectives.

### Why MPIC doesn't replace RFC 8657

MPIC and <cite>RFC 8657</cite> are complementary controls:

<ResponsiveTable caption="MPIC vs RFC 8657 — Comparison">
  <thead>
    <tr>
      <th scope="col">Control</th>
      <th scope="col">Primary purpose</th>
      <th scope="col">Threats addressed</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">MPIC (Multi-Perspective Issuance Corroboration)</th>
      <td>Require corroborated validation from multiple independent network vantage points before issuance.</td>
      <td>Network-level interception / BGP hijack; prevents issuance based on a single, compromised vantage point.</td>
    </tr>
    <tr>
      <th scope="row">RFC 8657 (Account binding)</th>
      <td>Bind issuance to a specific ACME account and restrict allowed validation methods.</td>
      <td>Rogue administrators, compromised sub-accounts, and abuse by delegated/third-party DNS operators.</td>
    </tr>
  </tbody>
</ResponsiveTable>

*In short:* MPIC significantly reduces the risk of BGP-based attacks, but it is not a silver bullet. A 2023 Princeton study [cite:princeton-multiva-2023]—co-authored by Henry Birge-Lee—found that standard MPIC deployments offer only about **88.6% median resilience** against determined BGP adversaries, largely due to the expanded attack surface of DNS infrastructure.

This leaves a quantifiable security gap (~11%) that network-layer defenses cannot close on their own. This makes **identity-layer defenses** like RFC 8657 (Account Binding) mandatory, not optional, for high-value domains.

Cloudflare's refusal to honour `accounturi` and `validationmethods` therefore remains a meaningful gap in defense-in-depth, even though MPIC should eliminate the easiest network-only attacks by 2025.

## The "Persistent" Shift: Leaving Cloudflare Behind

While Cloudflare continues to block RFC 8657 support, the rest of the industry has effectively declared it a requirement for the next generation of web security.

In **November 2025**, the IETF ACME Working Group officially adopted `draft-ietf-acme-dns-persist-00` [cite:ietf-acme-dns-persist]. This new draft standard allows for "Persistent DNS" validation—a critical feature for IoT devices and multi-tenant platforms that cannot perform 90-day DNS challenges.

Critically, **this new standard mandates RFC 8657**. It requires the use of the `accounturi` parameter to bind the persistent DNS record to a specific account. Without this binding, a persistent record would become a "bearer token" that any attacker could reuse.

The authorship of this draft highlights the industry divide. It was co-authored by engineers from **Fastly** and **Amazon Trust Services**—direct competitors to Cloudflare—along with researchers from **Crosslayer Labs**. While Cloudflare's competitors are actively standardizing the usage of `accounturi` to secure their platforms, Cloudflare's Universal SSL product remains architecturally incompatible with it.

### The RFC 8657 Support Matrix (2026)

The following table illustrates the growing divide between security-forward providers and those prioritizing legacy convenience models.

<ResponsiveTable caption="Industry Support for RFC 8657 (Account Binding)">
  <thead>
    <tr>
      <th scope="col">Entity</th>
      <th scope="col">Role</th>
      <th scope="col">Status</th>
      <th scope="col">Details & Evidence</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Let's Encrypt</strong></td>
      <td>CA</td>
      <td><span style="color: green;"><strong>Full Support</strong></span></td>
      <td>Fully enforced in production since Jan 2023. Strict syntax requirements for `accounturi`. [cite:letsencrypt-accounturi] [cite:letsencrypt-rfc8657-prod] [cite:acme-lecaa]</td>
    </tr>
    <tr>
      <td><strong>Google Trust Services</strong></td>
      <td>CA</td>
      <td><span style="color: green;"><strong>Full Support</strong></span></td>
      <td>Supported per GTS CPS v5.22 (s. 4.2.4) [cite:gts-cps]; Mandated by Chrome Root Program Policy v1.7 for automated solutions [cite:chrome-root-policy].</td>
    </tr>
    <tr>
      <td><strong>DigiCert</strong></td>
      <td>CA</td>
      <td><span style="color: #b58900;"><strong>Next-Gen Only</strong></span></td>
      <td>Adopted as a mandatory dependency for the "DNS-PERSIST" validation method in Nov 2025 drafts. [cite:digicert-blog-dns-persist]</td>
    </tr>
    <tr>
      <td><strong>Amazon Trust Services</strong></td>
      <td>CA</td>
      <td><span style="color: #b58900;"><strong>Draft/Beta</strong></span></td>
      <td>Co-author of the persistent DNS draft; proposing standardizing binding for "Canonical Authorization Domain Names." [cite:ietf-acme-dns-persist]</td>
    </tr>
    <tr>
      <td><strong>Fastly</strong></td>
      <td>CDN / MSP</td>
      <td><span style="color: #b58900;"><strong>Draft/Beta</strong></span></td>
      <td>Co-author of the persistent DNS draft, signaling architectural move toward account binding. [cite:ietf-acme-dns-persist]</td>
    </tr>
    <tr>
      <td><strong>Netlify</strong></td>
      <td>Hosting</td>
      <td><span style="color: green;"><strong>Supported</strong></span></td>
      <td><strong>Proof of Concept.</strong> Since <time datetime="2023-10">late 2023</time>, Netlify provides their specific `accounturi` in public documentation, proving platform support is feasible. [cite:netlify-docs]</td>
    </tr>
    <tr>
      <td><strong>Cloudflare</strong></td>
      <td>CDN / MSP</td>
      <td><span style="color: red;"><strong>Broken</strong></span></td>
      <td>Universal SSL injects permissive records that override user constraints. Users must pay for "Custom Certificates" to bypass. [cite:cf-community-758109]</td>
    </tr>
  </tbody>
</ResponsiveTable>

### The Synergy with DNSSEC

The refusal to support RFC 8657 is doubly dangerous when we consider the role of DNSSEC. As noted by researcher <a href="https://henrybirgelee.com/" rel="external noopener" target="_blank">Henry Birge-Lee</a> in discussions with the CA/Browser Forum, the combination of **CAA + DNSSEC + RFC 8657** is the only mechanism that allows certificate issuance to be "completely based on cryptographic trust." [cite:google-group-dnssec]

<blockquote cite="https://secure-certificates.princeton.edu/cryptographic-domain-validation.pdf">
<p>"Our cryptographic DV design provides domain owners the critical capability of declaratively securing their domain names against network attacks on certificate issuance."</p>
</blockquote>
<cite>— Birge-Lee et al., "Cryptographically-Secured Domain Validation" (2024)</cite> [cite:birge-lee-2024-crypto-dv]

Without `accounturi`, even a DNSSEC-signed domain is vulnerable if the attacker can intercept the validation traffic (as seen in the Venezuela incident). By supporting RFC 8657, a domain owner can cryptographically lock issuance to a specific account key. Cloudflare's overriding of these records effectively downgrades a domain's security posture, regardless of whether they use DNSSEC or not.

## But... Is This *Really* a Problem? (Yes, It Is)

The `jabber.ru` incident is the primary, powerful case study, but the Web <abbr title="Public Key Infrastructure">PKI</abbr> is a graveyard of similar incidents that these standards were built to prevent.

* **<time datetime="2011-09-03">September 3, 2011</time> - DigiNotar Breach:** A complete CA compromise led to fraudulent certificates for Google, Yahoo, and more, used for state-level <abbr title="Man-in-the-Middle">MitM</abbr> attacks. [cite:wiki-diginotar] [cite:sslmate-failures] `accounturi` (or even basic CAA) would have been a defense.
* **<time datetime="2015">2015</time>-<time datetime="2016">2016</time> - WoSign & StartCom:** These CAs were distrusted for numerous failures, including issuing certs without proper validation. [cite:mozilla-wosign-startcom-2016] [cite:sslmate-failures] `validationmethods` would have prevented issuance via non-standard, weaker methods.
* **<time datetime="2017-08-31">August 31, 2017</time> - Chaining Web Vulnerabilities:** A researcher showed how a simple path traversal vulnerability on a web server could be used to satisfy an <code>http-01</code> challenge. [cite:gualtieri-http01] A `validationmethods=dns-01` policy would have rendered this entire attack class useless.
* **<time datetime="2018-08">August 2018</time> - Princeton BGP Hijacking Study:** A foundational paper from Princeton University, [cite:birge-lee-2018-bgp], demonstrated how BGP hijacking could be weaponized to defeat <code>http-01</code> validation. The `jabber.ru` attack was a real-world execution of this exact threat model (network-level interception).
* **January 2026 - Venezuela Routing Leaks:** A massive route leak involving CANTV (AS8048) demonstrated that BGP misconfiguration remains a daily reality. While Cloudflare attributes this to misconfiguration, it proves that traffic interception is common. As Henry Birge-Lee argued in the Server Certificate Working Group, reliance on network perspective alone (even MPIC) is insufficient without the cryptographic guarantees of DNSSEC and account binding. [cite:cf-venezuela-bgp] [cite:google-group-dnssec]

In each case, `accounturi` or `validationmethods` would have provided a critical, *preventative* layer of defense.

## My Attempt to Engage Cloudflare

I'm not the first to notice this. I posted a detailed breakdown of this issue on the Cloudflare Community forum on <time datetime="2025-05-20">20 May 2025</time>.

Here is a <em>verbatim summary</em> in five acts from that thread [cite:cf-community-799999]:

> **Act 1 (<time datetime="2025-05-20">May 20</time>):** I submit the request "Critical Security Gap: Cloudflare Must Fully Support RFC 8657 CAA".
>
> **Act 2 (<time datetime="2025-06-20">June 20</time>):** A Cloudflare Team member (`mmalden`) finally responds. They claim the feature isn't supported because <cite>RFC 8657</cite> isn't fully passed (incorrect) and suggest Certificate Transparency logs as an alternative. <strong>This response is marked as the "Solution."</strong>
>
> **Act 3 (<time datetime="2025-06-23">June 23</time>):** I post a detailed rebuttal, citing Cloudflare's history of adopting draft protocols (TLS 1.3, QUIC) years before finalization, and pointing out that RFC 8657 is *already* a proposed standard. I conclude: <strong>"The only logical conclusion... is that withholding <cite>RFC 8657</cite> support is a business decision."</strong>
>
> **Act 4 (<time datetime="2025-07-20">July 20</time>):**
> <blockquote>grey: "I really love talking with myself in this thread :grinning_face:"</blockquote>
> (My rebuttal remains unanswered. The "Solution" tag remains on the incorrect answer.)
>
> **Act 5 (<time datetime="2025-08-15">Aug 15</time>):**
> <blockquote>This topic was <em>automatically closed</em> 2 days after the last reply. New replies are no longer allowed.</blockquote>

A critical, user-reported security gap, with 1.3k views and 20 likes, was not properly "resolved." It was <em>auto-closed</em> by a robot.

To bring more attention to this, I also published an article on the popular Russian tech site Habr.com [cite:habr-post] on <time datetime="2025-06-15">June 15, 2025</time>, which became the top post of the week. This shows the community *understands* the issue, even if Cloudflare's support process is designed to ignore it.

**Update (January 15, 2026):**
Following Cloudflare's public admission that <q cite="https://blog.cloudflare.com/bgp-route-leak-venezuela/">BGP route leaks happen all of the time,</q> [cite:cf-venezuela-bgp] regarding the Venezuela incident, [I have opened a new, specific inquiry on their community forum asking why their SSL product disables the primary defense against those very leaks](https://community.cloudflare.com/t/universal-ssl-exposes-domains-to-bgp-leaks-re-venezuela-analysis/879930). You can support that request here: [cite:cf-community-879930].

## The Core Contradiction: A Business Decision, Not a Technical Lag

A Cloudflare team member claimed this is not a vulnerability and that they would comply if `RFC 8657` were passed.

This response is, in my view, disingenuous.
1.  **<cite>RFC 8657</cite> was published in <time datetime="2019-11">November 2019</time>**. It's been a standard for six years.
2.  Cloudflare has a <q cite="https://blog.cloudflare.com/head-start-with-quic/">long history</q> of implementing critical security protocols like <cite>TLS 1.3</cite> [cite:rfc8446] and <cite>QUIC</cite> [cite:rfc9000] *while they were still in draft status*.

To claim they must "wait" for this standard is inconsistent with their entire innovative culture. This isn't technical lag; <strong>it's a business decision</strong>.

When `mmalden` from the Cloudflare Team responded, they stated they would comply "should <cite>RFC 8657</cite> be passed." This response—which was officially marked as the "Solution" to the thread—is demonstrably false and contradicts Cloudflare's own engineering history.

As I pointed out in my rebuttal to the team:

1.  **The Standard is Already "Passed":** <cite>RFC 8657</cite> is already a Proposed Standard on the <abbr title="Internet Engineering Task Force">IETF</abbr> standards track.
2.  **The "Draft" Status is not an Excuse:** Cloudflare has a <q cite="https://blog.cloudflare.com/head-start-with-quic/">long history</q> of implementing protocols *years* before they were finalized.
    *   **TLS 1.3:** Cloudflare announced support on <time datetime="2016-09-20">September 20, 2016</time>, <time datetime="P730D">two years</time> before the RFC was finalized. [cite:cf-introducing-tls13]
    *   **QUIC:** Cloudflare supported it on <time datetime="2018-09-25">September 25, 2018</time>, nearly <time datetime="P1095D">three years</time> before the RFC was published. [cite:cf-head-start-quic]
    *   **<abbr title="Encrypted Client Hello">ECH</abbr>:** They support it now since <time datetime="2020-12-08">December 8, 2020</time>, despite it still being in draft status. [cite:ietf-tls-esni-25] [cite:cf-encrypted-client-hello]

In their <time datetime="2018">2018</time> blog post on QUIC, Cloudflare explicitly bragged about this culture: <q cite="https://blog.cloudflare.com/head-start-with-quic/">"The Cloudflare Systems Engineering Team has a long history of investing time and effort to trial new technologies, often before these technologies are standardised or adopted elsewhere."</q> [cite:cf-head-start-quic]

Yet, for <cite>RFC 8657</cite> standard that closes a critical security hole, they claim they must wait for bureaucracy?

Furthermore, the team suggested reliance on Certificate Transparency (CT) logs as a mitigation. As I explained to them, <strong>CT logs are a detection tool, not a prevention tool.</strong> They alert you <em>after</em> the attacker has already issued a fraudulent certificate and intercepted your traffic. This is a classic <abbr title="Common Weakness Enumeration">CWE</abbr>-1188 weakness.

This confirms that the lack of support is not a technical oversight or a standards issue. <strong>It might be a conscious business decision to keep the "free" product vulnerable while gating secure CAA records behind paid plans.</strong>

## What Should Be Done (The Fix is Not Complicated)

Cloudflare, which powers a massive portion of the web (as of <time datetime="2026-01">January 2026</time>, <q cite="https://w3techs.com/technologies/details/cn-cloudflare">21.2% of all websites, representing 82.1% of all websites whose reverse proxy service is known</q> [cite:w3techs-cloudflare-2026], compared to prior reports of 20.4% of all sites with 81.6% market share [cite:statista-cloudflare-2025] [cite:w3techs-proxy-2025]), should do the following:

<figure id="fig-statista-cloudflare-2025">
  <a href="https://web.archive.org/web/20251130143159/https://www.statista.com/chart/35487/market-share-of-reverse-proxy-services-cloudflare/" title="Infographic: Cloudflare, a hidden pillar of the internet | Statista" rel="noopener">
    <OptimizedImage
      src={statistaCloudflareMarketShare}
      alt="A horizontal Statista bar chart titled 'Cloudflare Provides Protection for One in Five Websites,' illustrating the share of worldwide websites using selected reverse proxy services as of November 19, 2025. The data shows that 75.0% of websites utilize 'None,' while Cloudflare is the dominant provider with 20.4% of websites using it. Other listed providers have significantly smaller shares: Amazon CloudFront at 1.6%, Fastly at 0.9%, Akamai at 0.8%, and DDoS-Guard at 0.7%."
      widths={[400, 640, 960]}
      sizes="(max-width: 640px) 100vw, (max-width: 1024px) 85vw, 960px"
      format="avif"
      quality={80}
      class="max-w-240 max-h-[70vh] w-full h-auto mx-auto rounded-md object-contain"
      loading="lazy"
    />
  </a>
  <figcaption>
    Source: Statista — <a href="https://www.statista.com/chart/35487/market-share-of-reverse-proxy-services-cloudflare/" title="Infographic: Cloudflare, a hidden pillar of the internet | Statista" rel="noopener nofollow noreferrer">Infographic</a>. You will find more infographics at <a href="https://www.statista.com/chartoftheday/" rel="noopener nofollow noreferrer">Statista</a>.
  </figcaption>
</figure>

1.  **Secure Universal SSL by Default:** Stop injecting <em>permissive</em> records. Instead, inject <em>restrictive</em> records using `accounturi` for Cloudflare's <em>own</em> internal ACME accounts. This gives users the best of both worlds: they are protected by default, and if they add their <em>own</em> `accounturi` record, <em>both</em> are valid (theirs and Cloudflare's), but an attacker's is not.
2.  **Enable Full User Control:** Update the DNS logic. If a user defines a record for `letsencrypt.org`, <em>do not</em> inject a duplicate, permissive record for the same CA. Trust your user. This is a simple `if (user_record_exists) { do_not_inject }`
3.  **Be Transparent:** Update the documentation [cite:cf-caa-docs] to <em>explicitly</em> explain this override behavior and the risks it creates, instead of hiding it in the fine print.

## What can be done now?

Until Cloudflare updates their Universal SSL logic to respect user-defined `accounturi` and `validationmethods` parameters, there is no easy configuration for Free or Pro plan users that guarantees protection against this specific MitM vector.

However, if your threat model requires strict CAA enforcement (RFC 8657), you can achieve it by taking full control of certificate issuance:

1. **Disable Universal SSL:**
Navigate to **SSL/TLS** > **Edge Certificates** in your Cloudflare dashboard and toggle **Disable Universal SSL**. This is the critical step that stops Cloudflare from automatically injecting the permissive CAA records that override your policies.
* **Warning:** This will immediately break HTTPS on your site unless you have a **Custom Certificate** uploaded or an **Advanced Certificate** active.

2. **Upload Custom Certificates (Requires Business or Enterprise Plan):**
For complete control, you must manually issue your own certificates (e.g., using Certbot/Let’s Encrypt with your restricted ACME account) and upload them to Cloudflare.
* **Why this works:** By managing the issuance yourself, you ensure that only your specific ACME account is used. Cloudflare’s systems effectively become a passive pipe for the certificate you provide, meaning they no longer need to inject permissive CAA records to validate the domain on your behalf.
* **Requirements:** The ability to upload your own custom certificates is restricted to **Business** and **Enterprise** plans.
* *Note on Advanced Certificate Manager (ACM):* While the paid ACM add-on allows you to *order* specific certificates on lower-tier plans, Cloudflare still manages the issuance process. Therefore, ACM may not strictly prevent the CAA override behavior described in this article.

3. **For Everyone Else (Free/Pro): Aggressive CT Monitoring:**
If you cannot upgrade to a Business plan to upload your own certificates, you must rely on detection rather than prevention. Set up rigorous **Certificate Transparency (CT) monitoring** (using tools like `certstream` or Cloudflare’s own alerts). If you see a certificate issued for your domain by a CA you use (like Let’s Encrypt) but without your authorization, treat it as an immediate security incident.

I hope that with enough community attention, we can persuade Cloudflare to close this gap for everyone, not just their paying customers.

Thank you for taking the time to read this! I hope it was useful.