[DNSOP] Re: Comments from IETF Last Call about draft-ietf-dnsop-structured-dns-error

Paul Wouters <paul@nohats.ca> Mon, 05 May 2025 16:25 UTC

Return-Path: <paul@nohats.ca>
X-Original-To: dnsop@mail2.ietf.org
Delivered-To: dnsop@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 8209324ED699; Mon, 5 May 2025 09:25:52 -0700 (PDT)
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -4.4
X-Spam-Level:
X-Spam-Status: No, score=-4.4 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (1024-bit key) header.d=nohats.ca
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id LbtD8e5vzdyy; Mon, 5 May 2025 09:25:51 -0700 (PDT)
Received: from mx.nohats.ca (mx.nohats.ca [IPv6:2a03:6000:1004:1::85]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id E92CC24ED691; Mon, 5 May 2025 09:25:50 -0700 (PDT)
Received: from localhost (localhost [IPv6:::1]) by mx.nohats.ca (Postfix) with ESMTP id 4Zrn2P2bZHz55b; Mon, 5 May 2025 18:25:49 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nohats.ca; s=default; t=1746462349; bh=bBiEC+hIQxHCTl/h0V9TlMtenvlOE3F5aC5qE98Qke8=; h=Date:From:To:cc:Subject:In-Reply-To:References; b=oQQ9I3DK9YBQd8CSVySArUKYqdgzrYB4M/utkMe12MYYn9r3OCCfnNw9jRvfVAF4l r+kb3dOs/TNGJQS1nUrlvjiaCKL7i52HhzkwWrEchr1330nTS3qEuS11ItCEL/uBFH 3lTAtdARGmCkTuyucjJOQ8xA+5qUa1uNnEGjK3k4=
X-Virus-Scanned: amavisd-new at mx.nohats.ca
Received: from mx.nohats.ca ([IPv6:::1]) by localhost (mx.nohats.ca [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id o4KxVFM6_dIm; Mon, 5 May 2025 18:25:47 +0200 (CEST)
Received: from bofh.nohats.ca (bofh.nohats.ca [193.110.157.194]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx.nohats.ca (Postfix) with ESMTPS; Mon, 5 May 2025 18:25:47 +0200 (CEST)
Received: by bofh.nohats.ca (Postfix, from userid 1000) id DC4981505813; Mon, 05 May 2025 12:25:46 -0400 (EDT)
Received: from localhost (localhost [127.0.0.1]) by bofh.nohats.ca (Postfix) with ESMTP id D74E81505812; Mon, 05 May 2025 12:25:46 -0400 (EDT)
Date: Mon, 05 May 2025 12:25:46 -0400
From: Paul Wouters <paul@nohats.ca>
To: Stephane Bortzmeyer <bortzmeyer=40nic.fr@dmarc.ietf.org>
In-Reply-To: <aBjCctAUGms4Tqil@nic.fr>
Message-ID: <be02a1b9-99f7-a603-c7b7-ce009850f245@nohats.ca>
References: <PH0PR11MB49666C9FAA1DC4C04EB7AEDBA98E2@PH0PR11MB4966.namprd11.prod.outlook.com> <aBjCctAUGms4Tqil@nic.fr>
MIME-Version: 1.0
Content-Type: text/plain; format="flowed"; charset="US-ASCII"
Message-ID-Hash: P5SKE2XKJP5RGHD3HJAH5BPNWLBTOICF
X-Message-ID-Hash: P5SKE2XKJP5RGHD3HJAH5BPNWLBTOICF
X-MailFrom: paul@nohats.ca
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-dnsop.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: "Eric Vyncke (evyncke)" <evyncke=40cisco.com@dmarc.ietf.org>, "dnsop@ietf.org" <dnsop@ietf.org>, last-call@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [DNSOP] Re: Comments from IETF Last Call about draft-ietf-dnsop-structured-dns-error
List-Id: IETF DNSOP WG mailing list <dnsop.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/dnsop/nSQrWxfeoEvD6_Fd8U7HpXvbbH4>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dnsop>
List-Help: <mailto:dnsop-request@ietf.org?subject=help>
List-Owner: <mailto:dnsop-owner@ietf.org>
List-Post: <mailto:dnsop@ietf.org>
List-Subscribe: <mailto:dnsop-join@ietf.org>
List-Unsubscribe: <mailto:dnsop-leave@ietf.org>

On Mon, 5 May 2025, Stephane Bortzmeyer wrote:

> On Mon, May 05, 2025 at 12:49:28PM +0000,
> Eric Vyncke (evyncke) <evyncke=40cisco.com@dmarc.ietf.org> wrote
> a message of 200 lines which said:
>
>>   *   Are full-text explanations better or worse from UX or security
>>       point of view ?
>
> Indeed, it was mentioned and I am quite surprised. Because DNS already
> has full-text explanations since 2020 (RFC 8914) and nobody
> complained. draft-ietf-dnsop-structured-dns-error-15 does not change
> that.

RFC 8914:

 	This information is intended for human consumption (not automated parsing)

draft-ietf-dnsop-structured-dns-error:

 	This document describes a format for computer-parsable data in the EXTRA-TEXT field of [RFC8914].


With the reason qualified as:

 	One of the other benefits of the approach described in this
 	document is to eliminate the need to "spoof" block pages for
 	HTTPS resources. This is achieved since clients implementing this
 	approach would be able to display a meaningful error message,
 	and would not need to connect to such a block page.

I am not sure why a JSON object for a browser would produce a more
"meaingful error message" than one that is possible with RFC 8914 ?

The example given is:

{
   "c": [
     "tel:+358-555-1234567",
     "sips:bob@bobphone.example.com"
   ],
   "j": "malware present for 23 days",
   "s": 1,
   "o": "example.net Filtering Service"
   "l": "tzm",
}

First of all, the contact details are completely untrusted (eg when
obtaining a DNS via DHCP) or superfluous (eg when the user configured
8.8.8.8 they already know they can go to dns.google.com for help)
On an Enterprise network, there is already a "contact IT" method in
place. On a Home network that auto-configured its CP device, you already
know to contact your ISP and don't need to get a copy of their phone
number, sips: or email address (or website).

Note that an attacker being able to give you an email address to use
is very dangerous - it will facilitate endusers to receive malicious
email responses from an attacker.

The text "malware present for 23 days" and "example.net Filtering Service"
could have already been placed in the EXTRA-TEXT field as per RFC8914.


The draft further states:

 	Whether the information provided in the "j" name is meaningful
 	or considered as garbage data (including empty values) is local
 	to each IT teams.

The draft seems the cherry-pick whether the content is meant for
endusers ("to eliminate the need to "spoof" block pages for HTTPS
resources") or when it is meant for IT teams. I think IT teams can
figure out who admins a DNS resolver on a certain IP already. The
non-admins are just vulnerable to misinformation.

And this:

 	This approach thus avoids the need to install a local root
 	certificate authority on those IT-managed devices.

Is clearly targetting endusers.


I believe this document is actually harmful to endusers, with no
meaningful gains for IT teams. If I was a browser vendor, I would
only allow displaying i18n text for EDE enums.


Now Mark Nottingham does a fair attempt at trying to contain the
problem of display free text for the enduser in draft-nottingham-public-resolver-errors
by constraining the EXTRA-TEXT to just two IDs that map to a DNS
provider and an incidence number. But that will lead us back to
attacker induced spoof pages, eg:

The network / attacker does a:

- redirecting major IPs port 53 to itself (eg 1.1.1.1, 8.8.8.8, 9.9.9.9)
   (and block DoT, DoH, DoQ)
- issuing DHCP DNS servers to itself.
- transparently run all port 53 through its own resolver.

then:

- Use a globally trusted ID from the DNS Resolver Identifier Registry, eg
   the one from Google DNS.
- Generate a filtered response with Extended DNS Error Code 17 (see [RFC8914])
   and an EXTRA-TEXT field containing:

   {
     "ro": "GoogleDNS", // or whatever they would have registered at IANAA
     "inc": "abc123" // or whatever format Google DNS would use
   }

Let's assume Google DNS has registered the template:

    https://resolver-report.dns.google.com/filtering-incidents/{inc}

then additionally:

- resolve resolver-report.dns.google.com to itself.
- generate some self signed cert for resolver-report.dns.google.com
- publish malicious / advertising content on any URL on resolver-report.dns.google.com


Since captive portals have already desensitized users into accepting
spoofed pages, this will still trick a percentage of users into going
to a malicious site (even if one cannot make it clickable, the text
can lure people to open a new tab/window and type in the name of the
website conveyed in the error msg, eg "visit www.fbi-arrests.io to
avoid an arrest warrant for trying to browse illegal content").

Furthermore, the incidents number can be customized for tracking or
deanonimising a user (eg one using Private Relay / MASQ). It would be
much better from a privacy perspective to only allow the QNAME to be
the incident number.

Note also that RFC 8914 warns of the dangerous of EXTRA-TEXT causing DNS
fragmentation when messages are used that are too long.

Mark's draft also causes more centalization of "well known/trusted DNS
servers".


I would suggest that instead of these solutions, draft-ietf-dnsop-structured-dns-error
restricts itself to extend the ENUMs to cover most cases, and leave the
user / browsers to try and give more details errors, without the IETF
centralizing it using an IANA Registry. I would like it to deprecate
EXTRA-TEXT.

If some kind of extra text option is _really_ needed, then extend RFC
9606 resinfo with a template field that points to the resolver operators
extended error website, that browsers can use by filling in the template
URI with only the QNAME as option so it is guaranteed each user trying
to go to the same blocked domain gets the same error message and cannot
be deanonimized or tracked.

Paul