<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-t2trg-amplification-attacks-04" category="info" consensus="true" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="CoAP Amplification Attacks">Amplification Attacks Using the Constrained Application Protocol (CoAP)</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-t2trg-amplification-attacks-04"/>
    <author initials="J." surname="Preuß Mattsson" fullname="John Preuß Mattsson">
      <organization abbrev="Ericsson">Ericsson AB</organization>
      <address>
        <postal>
          <street>SE-164 80 Stockholm</street>
          <country>Sweden</country>
        </postal>
        <email>john.mattsson@ericsson.com</email>
      </address>
    </author>
    <author initials="G." surname="Selander" fullname="Göran Selander">
      <organization abbrev="Ericsson">Ericsson AB</organization>
      <address>
        <postal>
          <street>SE-164 80 Stockholm</street>
          <country>Sweden</country>
        </postal>
        <email>goran.selander@ericsson.com</email>
      </address>
    </author>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization>Energy Harvesting Solutions</organization>
      <address>
        <email>c.amsuess@energyharvesting.at</email>
      </address>
    </author>
    <date year="2024" month="December" day="09"/>
    <area>IRTF</area>
    <workgroup>Thing-to-Thing</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 72?>

<t>Protecting Internet of Things (IoT) devices against attacks is not enough.
IoT deployments need to make sure that they are not used for
Distributed Denial-of-Service (DDoS) attacks. DDoS attacks are
typically done with compromised devices or with amplification attacks
using a spoofed source address. This document gives examples of different
theoretical amplification attacks using the Constrained Application Protocol
(CoAP). The goal with this document is to raise awareness and
to motivate generic and protocol-specific recommendations on the usage of
CoAP. Some of the discussed attacks can be mitigated by not using
NoSec or by using the Echo option.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://t2trg.github.io/t2trg-amplification-attacks/draft-irtf-t2trg-amplification-attacks.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-irtf-t2trg-amplification-attacks/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Thing-to-Thing Research Group mailing list (<eref target="mailto:t2trg@irtf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/search/?email_list=t2trg"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/t2trg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/t2trg/t2trg-amplification-attacks"/>.</t>
    </note>
  </front>
  <middle>
    <?line 85?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>One important protocol used to interact with Internet of Things (IoT)
sensors and actuators is the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>.
CoAP can be used without security in the so called NoSec mode but any
Internet-of-Things (IoT) deployment valuing security and privacy would use a
security protocol such as DTLS <xref target="RFC9147"/>, TLS <xref target="RFC8446"/>, or OSCORE <xref target="RFC8613"/>
to protect CoAP, where the choice of security protocol depends on the transport
protocol and the presence of intermediaries. The use of CoAP over UDP and DTLS is
specified in <xref target="RFC7252"/> and the use of CoAP over TCP and TLS is specified in <xref target="RFC8323"/>.
OSCORE protects CoAP end-to-end with the use of COSE <xref target="RFC8152"/> and the CoAP
Object-Security option <xref target="RFC8613"/> and can therefore be used over any
transport. Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> can be used to
protect CoAP Group Communication <xref target="I-D.ietf-core-groupcomm-bis"/>.</t>
      <t>Protecting Internet of Things (IoT) devices against attacks is not enough.
IoT deployments need to make sure that they are not used for
Distributed Denial-of-Service (DDoS) attacks. DDoS attacks are
typically done with compromised devices or with amplification attacks
using a spoofed source address. DDoS attacks is a huge and
growing problem for services and critical infrastructure <xref target="DDoS-Infra"/>
and mitigations are costly.</t>
      <t>The document gives examples of different theoretical amplification attacks using CoAP.
When transported over UDP, the CoAP NoSec mode is susceptible to source
IP address spoofing and as a single request can result in multiple responses
from multiple servers, CoAP can have very large amplification factors.
The goal with this document is to raise awareness and understanding of amplification
attacks and to motivate mitigations suitable for constrained devices and networks. The
intent is not to suggest that CoAP is more vulnerable to amplification attacks than
other protocols.</t>
      <t>Some of the discussed attacks can be mitigated by not using
NoSec or by using the Echo option <xref target="RFC9175"/>.</t>
    </section>
    <section anchor="dos">
      <name>Amplification Attacks using CoAP</name>
      <t>In a Denial-of-Service (DoS) attack, an attacker sends a large number of requests
or responses to a target endpoint. The denial-of-service might be caused by
the target endpoint receiving a large amount of data, sending a large amount
of data, doing heavy processing, or using too much memory, etc. In a Distributed
Denial-of-Service (DDoS) attack, the request or responses come from a large
number of sources.</t>
      <t>In an amplification attack, the amplification factor is the ratio between the
total size of the data sent to the target and the total size of the data
received from the attacker. Note that in the presence of intermediaries, the
size of the data received by the target might be different than the size of
the data sent to the target and the size of the data received from the
attacker might be different than the size of the data sent from the attacker.</t>
      <t>In the attacks described in this section, the attacker sends one or more requests,
and the target receives one or more responses. By spoofing the source IP address of
the targeted victim and requesting as much information as possible from several
servers an attacker can multiply the amount of traffic and create a distributed
denial-of-service attack on the target. When transported over UDP, the CoAP NoSec
mode is susceptible to source IP address spoofing.</t>
      <t>The amplification factor and the bandwidth depend on the layer in the protocol stack that
is used for the calculation. The amplification factor and bandwidth can e.g., be calculated
using whole IP packets, UPD payloads, or CoAP payloads. The bandwidth decreases and the
amplification factor typically increases higher up in the protocol stack. The bandwidth
should be calculated using the layer that is considered to be under attack.</t>
      <t>The following sections give examples of different theoretical amplification attacks using CoAP.</t>
      <section anchor="simple-amplification-attacks">
        <name>Simple Amplification Attacks</name>
        <t>An amplification attack using a single response is illustrated in <xref target="ampsingle"/>.
If the response is c times larger than the request, the amplification factor is c.</t>
        <figure anchor="ampsingle">
          <name>Amplification attack using a single response</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="560" viewBox="0 0 560 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,224" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,104" fill="none" stroke="black"/>
                <path d="M 88,120 L 88,224" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,224" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 40,112 L 144,112" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,112 36,106.4 36,117.6" fill="black" transform="rotate(180,40,112)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="216" y="68">Code:</text>
                  <text x="260" y="68">0.01</text>
                  <text x="304" y="68">(GET)</text>
                  <text x="112" y="84">GET</text>
                  <text x="200" y="84">Uri-Path:</text>
                  <text x="268" y="84">random</text>
                  <text x="320" y="84">quote</text>
                  <text x="216" y="116">Code:</text>
                  <text x="260" y="116">2.05</text>
                  <text x="320" y="116">(Content)</text>
                  <text x="116" y="132">2.05</text>
                  <text x="204" y="132">Payload:</text>
                  <text x="264" y="132">"just</text>
                  <text x="320" y="132">because</text>
                  <text x="368" y="132">you</text>
                  <text x="400" y="132">own</text>
                  <text x="436" y="132">half</text>
                  <text x="472" y="132">the</text>
                  <text x="516" y="132">county</text>
                  <text x="280" y="148">doesn't</text>
                  <text x="332" y="148">mean</text>
                  <text x="372" y="148">that</text>
                  <text x="408" y="148">you</text>
                  <text x="444" y="148">have</text>
                  <text x="480" y="148">the</text>
                  <text x="520" y="148">power</text>
                  <text x="260" y="164">to</text>
                  <text x="288" y="164">run</text>
                  <text x="320" y="164">the</text>
                  <text x="356" y="164">rest</text>
                  <text x="388" y="164">of</text>
                  <text x="416" y="164">us.</text>
                  <text x="448" y="164">For</text>
                  <text x="496" y="164">twenty-</text>
                  <text x="272" y="180">three</text>
                  <text x="324" y="180">years,</text>
                  <text x="372" y="180">I've</text>
                  <text x="412" y="180">been</text>
                  <text x="456" y="180">dying</text>
                  <text x="492" y="180">to</text>
                  <text x="524" y="180">tell</text>
                  <text x="264" y="196">you</text>
                  <text x="300" y="196">what</text>
                  <text x="328" y="196">I</text>
                  <text x="368" y="196">thought</text>
                  <text x="412" y="196">of</text>
                  <text x="444" y="196">you!</text>
                  <text x="480" y="196">And</text>
                  <text x="524" y="196">now...</text>
                  <text x="272" y="212">well,</text>
                  <text x="320" y="212">being</text>
                  <text x="352" y="212">a</text>
                  <text x="400" y="212">Christian</text>
                  <text x="468" y="212">woman,</text>
                  <text x="504" y="212">I</text>
                  <text x="536" y="212">can't</text>
                  <text x="264" y="228">say</text>
                  <text x="300" y="228">it!"</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|      Code: 0.01 (GET)
   |      | GET  |  Uri-Path: random quote
   |      |      |
   |<------------+      Code: 2.05 (Content)
   |      | 2.05 |   Payload: "just because you own half the county
   |      |      |             doesn't mean that you have the power
   |      |      |             to run the rest of us. For twenty-
   |      |      |             three years, I've been dying to tell
   |      |      |             you what I thought of you! And now...
   |      |      |             well, being a Christian woman, I can't
   |      |      |             say it!"
]]></artwork>
          </artset>
        </figure>
        <t>An attacker can increase the bandwidth by sending several GET requests. If the server supports
PUT/POST and doesn't limit the payload size, an attacker may be able to increase the amplification factor
by creating or updating a resource. By creating new resources, an attacker may also increase the
size of /.well-known/core. An amplification attack where the attacker influences the amplification factor
is illustrated in <xref target="ampmulti_post"/>.</t>
        <figure anchor="ampmulti_post">
          <name>Amplification attack using several requests and a chosen amplification factor</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="392" viewBox="0 0 392 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,112" fill="none" stroke="black"/>
                <path d="M 32,144 L 32,320" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,112" fill="none" stroke="black"/>
                <path d="M 88,144 L 88,200" fill="none" stroke="black"/>
                <path d="M 88,216 L 88,296" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,112" fill="none" stroke="black"/>
                <path d="M 144,144 L 144,320" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 88,160 L 136,160" fill="none" stroke="black"/>
                <path d="M 40,208 L 144,208" fill="none" stroke="black"/>
                <path d="M 88,256 L 136,256" fill="none" stroke="black"/>
                <path d="M 40,304 L 144,304" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,256 132,250.4 132,261.6" fill="black" transform="rotate(0,136,256)"/>
                <polygon class="arrowhead" points="144,160 132,154.4 132,165.6" fill="black" transform="rotate(0,136,160)"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,304 36,298.4 36,309.6" fill="black" transform="rotate(180,40,304)"/>
                <polygon class="arrowhead" points="48,208 36,202.4 36,213.6" fill="black" transform="rotate(180,40,208)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="216" y="68">Code:</text>
                  <text x="260" y="68">0.02</text>
                  <text x="308" y="68">(POST)</text>
                  <text x="116" y="84">POST</text>
                  <text x="200" y="84">Uri-Path:</text>
                  <text x="268" y="84">member</text>
                  <text x="204" y="100">Payload:</text>
                  <text x="316" y="100">hampsterdance.hevc</text>
                  <text x="60" y="132">....</text>
                  <text x="116" y="132">....</text>
                  <text x="216" y="164">Code:</text>
                  <text x="260" y="164">0.02</text>
                  <text x="304" y="164">(GET)</text>
                  <text x="112" y="180">GET</text>
                  <text x="200" y="180">Uri-Path:</text>
                  <text x="268" y="180">member</text>
                  <text x="216" y="212">Code:</text>
                  <text x="260" y="212">2.05</text>
                  <text x="320" y="212">(Content)</text>
                  <text x="116" y="228">2.05</text>
                  <text x="204" y="228">Payload:</text>
                  <text x="316" y="228">hampsterdance.hevc</text>
                  <text x="216" y="260">Code:</text>
                  <text x="260" y="260">0.02</text>
                  <text x="304" y="260">(GET)</text>
                  <text x="112" y="276">GET</text>
                  <text x="200" y="276">Uri-Path:</text>
                  <text x="268" y="276">member</text>
                  <text x="216" y="308">Code:</text>
                  <text x="260" y="308">2.05</text>
                  <text x="320" y="308">(Content)</text>
                  <text x="88" y="324">|</text>
                  <text x="116" y="324">2.05</text>
                  <text x="204" y="324">Payload:</text>
                  <text x="316" y="324">hampsterdance.hevc</text>
                  <text x="60" y="340">....</text>
                  <text x="116" y="340">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|      Code: 0.02 (POST)
   |      | POST |  Uri-Path: member
   |      |      |   Payload: hampsterdance.hevc
   |      |      |
     ....   ....
   |      |      |
   |      +----->|      Code: 0.02 (GET)
   |      | GET  |  Uri-Path: member
   |      |      |
   |<------------+      Code: 2.05 (Content)
   |      | 2.05 |   Payload: hampsterdance.hevc
   |      |      |
   |      +----->|      Code: 0.02 (GET)
   |      | GET  |  Uri-Path: member
   |      |      |
   |<------------+      Code: 2.05 (Content)
   |      | 2.05 |   Payload: hampsterdance.hevc
     ....   ....
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="amplification-attacks-using-observe">
        <name>Amplification Attacks using Observe</name>
        <t>Amplification factors can be significantly worse when combined with observe <xref target="RFC7641"/>. As a single request can result in multiple responses from the server, the amplification factors can be very large.</t>
        <t>An amplification attack using observe is illustrated in
<xref target="ampmulti_obs"/>. If each notification response is c times larger than the registration
request and each request results in n notifications, the amplification factor is c <contact fullname="⋅"/> n.</t>
        <figure anchor="ampmulti_obs">
          <name>Amplification attack using observe</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="368" viewBox="0 0 368 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,128" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,240" fill="none" stroke="black"/>
                <path d="M 32,272 L 32,336" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,128" fill="none" stroke="black"/>
                <path d="M 88,184 L 88,240" fill="none" stroke="black"/>
                <path d="M 88,296 L 88,336" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,128" fill="none" stroke="black"/>
                <path d="M 144,160 L 144,240" fill="none" stroke="black"/>
                <path d="M 144,272 L 144,336" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 40,176 L 144,176" fill="none" stroke="black"/>
                <path d="M 40,288 L 144,288" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,288 36,282.4 36,293.6" fill="black" transform="rotate(180,40,288)"/>
                <polygon class="arrowhead" points="48,176 36,170.4 36,181.6" fill="black" transform="rotate(180,40,176)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="224" y="68">Code:</text>
                  <text x="268" y="68">0.01</text>
                  <text x="312" y="68">(GET)</text>
                  <text x="112" y="84">GET</text>
                  <text x="220" y="84">Token:</text>
                  <text x="268" y="84">0x83</text>
                  <text x="212" y="100">Observe:</text>
                  <text x="256" y="100">0</text>
                  <text x="208" y="116">Uri-Path:</text>
                  <text x="272" y="116">ozone</text>
                  <text x="60" y="148">....</text>
                  <text x="116" y="148">....</text>
                  <text x="88" y="164">|</text>
                  <text x="224" y="180">Code:</text>
                  <text x="268" y="180">2.05</text>
                  <text x="328" y="180">(Content)</text>
                  <text x="116" y="196">2.05</text>
                  <text x="220" y="196">Token:</text>
                  <text x="268" y="196">0x83</text>
                  <text x="212" y="212">Observe:</text>
                  <text x="272" y="212">80085</text>
                  <text x="212" y="228">Payload:</text>
                  <text x="272" y="228">"21.4</text>
                  <text x="320" y="228">ppbv"</text>
                  <text x="60" y="260">....</text>
                  <text x="116" y="260">....</text>
                  <text x="88" y="276">|</text>
                  <text x="224" y="292">Code:</text>
                  <text x="268" y="292">2.05</text>
                  <text x="328" y="292">(Content)</text>
                  <text x="116" y="308">2.05</text>
                  <text x="220" y="308">Token:</text>
                  <text x="268" y="308">0x84</text>
                  <text x="212" y="324">Observe:</text>
                  <text x="272" y="324">80086</text>
                  <text x="212" y="340">Payload:</text>
                  <text x="272" y="340">"21.5</text>
                  <text x="320" y="340">ppbv"</text>
                  <text x="60" y="356">....</text>
                  <text x="116" y="356">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|       Code: 0.01 (GET)
   |      | GET  |      Token: 0x83
   |      |      |    Observe: 0
   |      |      |   Uri-Path: ozone
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x83
   |      |      |    Observe: 80085
   |      |      |    Payload: "21.4 ppbv"
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x84
   |      |      |    Observe: 80086
   |      |      |    Payload: "21.5 ppbv"
     ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>A more advanced amplification attack using observe is illustrated in
<xref target="ampmulti_nk"/>. By registering the same client several times using different Tokens or port numbers,
the bandwidth can be increased. By updating the observed resource, the attacker
may trigger notifications and increase the size of the notifications.</t>
        <t>If the server supports the pmax conditional attribute <xref target="I-D.ietf-core-conditional-attributes"/> an attacker may
increase the frequency of notifications and therefore the amplification factor. The maximum period attribute pmax
indicates the maximum time, in seconds, between two consecutive notifications (whether or not the
resource state has changed). Servers should put limits on the pmax values they accept.</t>
        <t>If it is predictable when notifications are sent as confirmable and which Message ID
are used the acknowledgements may be spoofed.</t>
        <figure anchor="ampmulti_nk">
          <name>Amplification attack using observe, registering the same client several times, and requesting notifications at least 10 times every second</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="640" width="368" viewBox="0 0 368 640" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,240" fill="none" stroke="black"/>
                <path d="M 32,272 L 32,432" fill="none" stroke="black"/>
                <path d="M 32,464 L 32,608" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,240" fill="none" stroke="black"/>
                <path d="M 88,296 L 88,360" fill="none" stroke="black"/>
                <path d="M 88,376 L 88,432" fill="none" stroke="black"/>
                <path d="M 88,488 L 88,552" fill="none" stroke="black"/>
                <path d="M 88,568 L 88,608" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,240" fill="none" stroke="black"/>
                <path d="M 144,272 L 144,432" fill="none" stroke="black"/>
                <path d="M 144,464 L 144,608" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 88,160 L 136,160" fill="none" stroke="black"/>
                <path d="M 40,288 L 144,288" fill="none" stroke="black"/>
                <path d="M 40,368 L 144,368" fill="none" stroke="black"/>
                <path d="M 40,480 L 144,480" fill="none" stroke="black"/>
                <path d="M 40,560 L 144,560" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,160 132,154.4 132,165.6" fill="black" transform="rotate(0,136,160)"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,560 36,554.4 36,565.6" fill="black" transform="rotate(180,40,560)"/>
                <polygon class="arrowhead" points="48,480 36,474.4 36,485.6" fill="black" transform="rotate(180,40,480)"/>
                <polygon class="arrowhead" points="48,368 36,362.4 36,373.6" fill="black" transform="rotate(180,40,368)"/>
                <polygon class="arrowhead" points="48,288 36,282.4 36,293.6" fill="black" transform="rotate(180,40,288)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="224" y="68">Code:</text>
                  <text x="268" y="68">0.01</text>
                  <text x="312" y="68">(GET)</text>
                  <text x="112" y="84">GET</text>
                  <text x="220" y="84">Token:</text>
                  <text x="268" y="84">0x83</text>
                  <text x="212" y="100">Observe:</text>
                  <text x="256" y="100">0</text>
                  <text x="208" y="116">Uri-Path:</text>
                  <text x="296" y="116">temperature</text>
                  <text x="204" y="132">Uri-Query:</text>
                  <text x="292" y="132">pmax="0.1"</text>
                  <text x="224" y="164">Code:</text>
                  <text x="268" y="164">0.01</text>
                  <text x="312" y="164">(GET)</text>
                  <text x="112" y="180">GET</text>
                  <text x="220" y="180">Token:</text>
                  <text x="268" y="180">0x84</text>
                  <text x="212" y="196">Observe:</text>
                  <text x="256" y="196">0</text>
                  <text x="208" y="212">Uri-Path:</text>
                  <text x="296" y="212">temperature</text>
                  <text x="204" y="228">Uri-Query:</text>
                  <text x="292" y="228">pmax="0.1"</text>
                  <text x="60" y="260">....</text>
                  <text x="116" y="260">....</text>
                  <text x="88" y="276">|</text>
                  <text x="224" y="292">Code:</text>
                  <text x="268" y="292">2.05</text>
                  <text x="328" y="292">(Content)</text>
                  <text x="116" y="308">2.05</text>
                  <text x="220" y="308">Token:</text>
                  <text x="268" y="308">0x83</text>
                  <text x="212" y="324">Observe:</text>
                  <text x="276" y="324">217362</text>
                  <text x="212" y="340">Payload:</text>
                  <text x="276" y="340">"299.7</text>
                  <text x="316" y="340">K"</text>
                  <text x="224" y="372">Code:</text>
                  <text x="268" y="372">2.05</text>
                  <text x="328" y="372">(Content)</text>
                  <text x="116" y="388">2.05</text>
                  <text x="220" y="388">Token:</text>
                  <text x="268" y="388">0x84</text>
                  <text x="212" y="404">Observe:</text>
                  <text x="276" y="404">217362</text>
                  <text x="212" y="420">Payload:</text>
                  <text x="276" y="420">"299.7</text>
                  <text x="316" y="420">K"</text>
                  <text x="60" y="452">....</text>
                  <text x="116" y="452">....</text>
                  <text x="88" y="468">|</text>
                  <text x="224" y="484">Code:</text>
                  <text x="268" y="484">2.05</text>
                  <text x="328" y="484">(Content)</text>
                  <text x="116" y="500">2.05</text>
                  <text x="220" y="500">Token:</text>
                  <text x="268" y="500">0x83</text>
                  <text x="212" y="516">Observe:</text>
                  <text x="276" y="516">217363</text>
                  <text x="212" y="532">Payload:</text>
                  <text x="276" y="532">"299.7</text>
                  <text x="316" y="532">K"</text>
                  <text x="224" y="564">Code:</text>
                  <text x="268" y="564">2.05</text>
                  <text x="328" y="564">(Content)</text>
                  <text x="116" y="580">2.05</text>
                  <text x="220" y="580">Token:</text>
                  <text x="268" y="580">0x84</text>
                  <text x="212" y="596">Observe:</text>
                  <text x="276" y="596">217363</text>
                  <text x="212" y="612">Payload:</text>
                  <text x="276" y="612">"299.7</text>
                  <text x="316" y="612">K"</text>
                  <text x="60" y="628">....</text>
                  <text x="116" y="628">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|       Code: 0.01 (GET)
   |      | GET  |      Token: 0x83
   |      |      |    Observe: 0
   |      |      |   Uri-Path: temperature
   |      |      |  Uri-Query: pmax="0.1"
   |      |      |
   |      +----->|       Code: 0.01 (GET)
   |      | GET  |      Token: 0x84
   |      |      |    Observe: 0
   |      |      |   Uri-Path: temperature
   |      |      |  Uri-Query: pmax="0.1"
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x83
   |      |      |    Observe: 217362
   |      |      |    Payload: "299.7 K"
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x84
   |      |      |    Observe: 217362
   |      |      |    Payload: "299.7 K"
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x83
   |      |      |    Observe: 217363
   |      |      |    Payload: "299.7 K"
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x84
   |      |      |    Observe: 217363
   |      |      |    Payload: "299.7 K"
     ....   ....
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="amplification-attacks-using-group-requests">
        <name>Amplification Attacks using Group Requests</name>
        <t>Amplification factors can be significantly worse when combined with observe <xref target="RFC7641"/>. As a single request can result in responses from multiple servers, the amplification factors can be very large.</t>
        <t>As the group request is sent over multicast or broadcast the request has to be sent by a node on the local network. An attacker on a local network (e.g., a compromised node) might use local CoAP servers to attack targets on the Internet or on the local network. The servers might also be accessible through a gateway (GW) that transforms unicast requests into multicast request. In such architectures, amplification attacks using group requests might be possible to launch from the Internet.</t>
        <t>An amplification attack using a group request is illustrated in
<xref target="ampmulti_m"/>. A single unicast request results is transformed into
a multicast group request by the gateway and results in m responses
from m different servers. If each response is c times larger than the request,
the amplification factor is c <contact fullname="⋅"/> m. Note that the servers usually do not know
the variable m.</t>
        <figure anchor="ampmulti_m">
          <name>Amplification attack using multicast</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="440" viewBox="0 0 440 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,240" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,120" fill="none" stroke="black"/>
                <path d="M 88,136 L 88,184" fill="none" stroke="black"/>
                <path d="M 88,200 L 88,240" fill="none" stroke="black"/>
                <path d="M 144,72 L 144,120" fill="none" stroke="black"/>
                <path d="M 144,136 L 144,184" fill="none" stroke="black"/>
                <path d="M 144,200 L 144,240" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,72" fill="none" stroke="black"/>
                <path d="M 200,88 L 200,184" fill="none" stroke="black"/>
                <path d="M 200,200 L 200,240" fill="none" stroke="black"/>
                <path d="M 224,48 L 224,240" fill="none" stroke="black"/>
                <path d="M 88,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 176,80 L 216,80" fill="none" stroke="black"/>
                <path d="M 40,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 40,192 L 224,192" fill="none" stroke="black"/>
                <path d="M 176,80 C 167.16936,80 160,72.83064 160,64" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="224,80 212,74.4 212,85.6" fill="black" transform="rotate(0,216,80)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="48,192 36,186.4 36,197.6" fill="black" transform="rotate(180,40,192)"/>
                <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="140" y="36">GW</text>
                  <text x="208" y="36">Servers</text>
                  <text x="144" y="52">|</text>
                  <text x="296" y="68">Code:</text>
                  <text x="340" y="68">0.01</text>
                  <text x="384" y="68">(GET)</text>
                  <text x="292" y="84">Token:</text>
                  <text x="340" y="84">0x69</text>
                  <text x="168" y="100">GET</text>
                  <text x="280" y="100">Uri-Path:</text>
                  <text x="340" y="100">&lt;/c&gt;</text>
                  <text x="296" y="132">Code:</text>
                  <text x="340" y="132">2.05</text>
                  <text x="400" y="132">(Content)</text>
                  <text x="172" y="148">2.05</text>
                  <text x="292" y="148">Token:</text>
                  <text x="340" y="148">0x69</text>
                  <text x="284" y="164">Payload:</text>
                  <text x="328" y="164">{</text>
                  <text x="356" y="164">1721</text>
                  <text x="384" y="164">:</text>
                  <text x="400" y="164">{</text>
                  <text x="424" y="164">...</text>
                  <text x="296" y="196">Code:</text>
                  <text x="340" y="196">2.05</text>
                  <text x="400" y="196">(Content)</text>
                  <text x="172" y="212">2.05</text>
                  <text x="292" y="212">Token:</text>
                  <text x="340" y="212">0x69</text>
                  <text x="284" y="228">Payload:</text>
                  <text x="328" y="228">{</text>
                  <text x="356" y="228">1721</text>
                  <text x="384" y="228">:</text>
                  <text x="400" y="228">{</text>
                  <text x="424" y="228">...</text>
                  <text x="60" y="260">....</text>
                  <text x="116" y="260">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe    GW    Servers
   |      |      |      |  |
   |      +--------+--->|  |      Code: 0.01 (GET)
   |      |      |  '----->|     Token: 0x69
   |      |      | GET  |  |  Uri-Path: </c>
   |      |      |      |  |
   |<-------------------+  |      Code: 2.05 (Content)
   |      |      | 2.05 |  |     Token: 0x69
   |      |      |      |  |   Payload: { 1721 : { ...
   |      |      |      |  |
   |<----------------------+      Code: 2.05 (Content)
   |      |      | 2.05 |  |     Token: 0x69
   |      |      |      |  |   Payload: { 1721 : { ...
   |      |      |      |  |
     ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>Even higher amplification factors can be achieved when combining group requests
<xref target="I-D.ietf-core-groupcomm-bis"/> and observe <xref target="RFC7641"/>. In this case a single
request can result in multiple responses from multiple servers.</t>
        <t>An amplification attack using a multicast request and observe is
illustrated in <xref target="ampmulti_mn"/>. In this case a single request results
in n responses each from m different servers giving a total of n <contact fullname="⋅"/> m
responses. If each response is c times larger than the request,
the amplification factor is c <contact fullname="⋅"/> n <contact fullname="⋅"/> m.</t>
        <figure anchor="ampmulti_mn">
          <name>Amplification attack using multicast and observe</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="496" width="448" viewBox="0 0 448 496" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,464" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,120" fill="none" stroke="black"/>
                <path d="M 88,136 L 88,200" fill="none" stroke="black"/>
                <path d="M 88,216 L 88,272" fill="none" stroke="black"/>
                <path d="M 88,328 L 88,392" fill="none" stroke="black"/>
                <path d="M 88,408 L 88,464" fill="none" stroke="black"/>
                <path d="M 144,72 L 144,120" fill="none" stroke="black"/>
                <path d="M 144,136 L 144,200" fill="none" stroke="black"/>
                <path d="M 144,216 L 144,272" fill="none" stroke="black"/>
                <path d="M 144,328 L 144,392" fill="none" stroke="black"/>
                <path d="M 144,408 L 144,464" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,72" fill="none" stroke="black"/>
                <path d="M 200,88 L 200,200" fill="none" stroke="black"/>
                <path d="M 200,216 L 200,272" fill="none" stroke="black"/>
                <path d="M 200,304 L 200,392" fill="none" stroke="black"/>
                <path d="M 200,408 L 200,464" fill="none" stroke="black"/>
                <path d="M 224,48 L 224,272" fill="none" stroke="black"/>
                <path d="M 224,304 L 224,464" fill="none" stroke="black"/>
                <path d="M 88,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 176,80 L 216,80" fill="none" stroke="black"/>
                <path d="M 40,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 40,208 L 224,208" fill="none" stroke="black"/>
                <path d="M 40,320 L 200,320" fill="none" stroke="black"/>
                <path d="M 40,400 L 224,400" fill="none" stroke="black"/>
                <path d="M 176,80 C 167.16936,80 160,72.83064 160,64" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="224,80 212,74.4 212,85.6" fill="black" transform="rotate(0,216,80)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="48,400 36,394.4 36,405.6" fill="black" transform="rotate(180,40,400)"/>
                <polygon class="arrowhead" points="48,320 36,314.4 36,325.6" fill="black" transform="rotate(180,40,320)"/>
                <polygon class="arrowhead" points="48,208 36,202.4 36,213.6" fill="black" transform="rotate(180,40,208)"/>
                <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="140" y="36">GW</text>
                  <text x="208" y="36">Servers</text>
                  <text x="144" y="52">|</text>
                  <text x="296" y="68">Code:</text>
                  <text x="340" y="68">0.01</text>
                  <text x="384" y="68">(GET)</text>
                  <text x="292" y="84">Token:</text>
                  <text x="340" y="84">0x44</text>
                  <text x="168" y="100">GET</text>
                  <text x="280" y="100">Uri-Path:</text>
                  <text x="368" y="100">temperature</text>
                  <text x="304" y="132">Code:</text>
                  <text x="348" y="132">2.05</text>
                  <text x="408" y="132">(Content)</text>
                  <text x="172" y="148">2.05</text>
                  <text x="300" y="148">Token:</text>
                  <text x="348" y="148">0x44</text>
                  <text x="292" y="164">Observe:</text>
                  <text x="344" y="164">217</text>
                  <text x="292" y="180">Payload:</text>
                  <text x="356" y="180">"301.2</text>
                  <text x="396" y="180">K"</text>
                  <text x="304" y="212">Code:</text>
                  <text x="348" y="212">2.05</text>
                  <text x="408" y="212">(Content)</text>
                  <text x="172" y="228">2.05</text>
                  <text x="300" y="228">Token:</text>
                  <text x="348" y="228">0x44</text>
                  <text x="292" y="244">Observe:</text>
                  <text x="344" y="244">363</text>
                  <text x="292" y="260">Payload:</text>
                  <text x="356" y="260">"293.4</text>
                  <text x="396" y="260">K"</text>
                  <text x="60" y="292">....</text>
                  <text x="172" y="292">....</text>
                  <text x="88" y="308">|</text>
                  <text x="144" y="308">|</text>
                  <text x="304" y="324">Code:</text>
                  <text x="348" y="324">2.05</text>
                  <text x="408" y="324">(Content)</text>
                  <text x="172" y="340">2.05</text>
                  <text x="300" y="340">Token:</text>
                  <text x="348" y="340">0x44</text>
                  <text x="292" y="356">Observe:</text>
                  <text x="344" y="356">218</text>
                  <text x="292" y="372">Payload:</text>
                  <text x="356" y="372">"301.3</text>
                  <text x="396" y="372">K"</text>
                  <text x="304" y="404">Code:</text>
                  <text x="348" y="404">2.05</text>
                  <text x="408" y="404">(Content)</text>
                  <text x="172" y="420">2.05</text>
                  <text x="300" y="420">Token:</text>
                  <text x="348" y="420">0x44</text>
                  <text x="292" y="436">Observe:</text>
                  <text x="344" y="436">364</text>
                  <text x="292" y="452">Payload:</text>
                  <text x="356" y="452">"293.3</text>
                  <text x="396" y="452">K"</text>
                  <text x="60" y="484">....</text>
                  <text x="116" y="484">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe    GW    Servers
   |      |      |      |  |
   |      +--------+--->|  |      Code: 0.01 (GET)
   |      |      |  '----->|     Token: 0x44
   |      |      | GET  |  |  Uri-Path: temperature
   |      |      |      |  |
   |<-------------------+  |       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 217
   |      |      |      |  |    Payload: "301.2 K"
   |      |      |      |  |
   |<----------------------+       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 363
   |      |      |      |  |    Payload: "293.4 K"
   |      |      |      |  |
   | ....          ....
   |      |      |      |  |
   |<-------------------+  |       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 218
   |      |      |      |  |    Payload: "301.3 K"
   |      |      |      |  |
   |<----------------------+       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 364
   |      |      |      |  |    Payload: "293.3 K"
   |      |      |      |  |
     ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>An attacker can use the same techniques as in <xref target="ampmulti_nk"/> to increase the number of notifications.</t>
      </section>
      <section anchor="mitm-amplification-attacks">
        <name>MITM Amplification Attacks</name>
        <t>TLS and DTLS without Connection ID <xref target="RFC9146"/><xref target="RFC9147"/> validate the IP address and port of the other peer, binds them to the connection, and do not allow them to change. DTLS with Connection ID allows the IP address and port to change at any time. As the source address is not protected, an MITM attacker can change the address. Note that an MITM attacker is a more capable attacker then an attacker just spoofing the source address. It can be discussed if and how much such an attack is reasonable for DDoS, but DTLS 1.3 states that "This attack is of concern when there is a large asymmetry of request/response message sizes." <xref target="RFC9147"/>.</t>
        <t>DTLS 1.2 with Connection ID <xref target="RFC9146"/> requires that "the receiver MUST NOT replace the address" unless “there is a strategy for ensuring that the new peer address is able to receive and process DTLS records” but does not give more details than that. It seems like the receiver can start using the new peer address and test that it is able to receive and process DTLS records at some later point. DTLS 1.3 with Connection ID <xref target="RFC9147"/> requires that "implementations MUST NOT update the address" unless “they first perform some reachability test” but does not give more details than that. OSCORE <xref target="RFC8613"/> does not discuss address updates, but it can be assumed that most servers send responses to the address it received the request from without any reachability test. A difference between (D)TLS and OSCORE is that in DTLS the updated address is used for all future records, while in OSCORE a new address is only used for responses to a specific request.</t>
        <t>An MITM amplification attack updating the client's source address in an observe registration is illustrated in <xref target="amp_mitm_client"/>. This attack is possible in OSCORE and DTLS with Connection ID. The server will send notifications to the Victim until it at some unspecified point requires an acknowledgement <xref target="RFC7641"/>. In DTLS 1.2 the reachability test might be done at a later point. In OSCORE a reachability test is likely not done.</t>
        <figure anchor="amp_mitm_client">
          <name>MITM Amplification attack by updating the client's source address in a observe registration request</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="416" viewBox="0 0 416 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,160" fill="none" stroke="black"/>
                <path d="M 32,192 L 32,304" fill="none" stroke="black"/>
                <path d="M 88,72 L 88,120" fill="none" stroke="black"/>
                <path d="M 88,192 L 88,304" fill="none" stroke="black"/>
                <path d="M 144,80 L 144,112" fill="none" stroke="black"/>
                <path d="M 144,216 L 144,264" fill="none" stroke="black"/>
                <path d="M 144,280 L 144,304" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,160" fill="none" stroke="black"/>
                <path d="M 200,192 L 200,304" fill="none" stroke="black"/>
                <path d="M 32,64 L 128,64" fill="none" stroke="black"/>
                <path d="M 152,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 40,128 L 136,128" fill="none" stroke="black"/>
                <path d="M 160,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 32,144 L 128,144" fill="none" stroke="black"/>
                <path d="M 152,144 L 192,144" fill="none" stroke="black"/>
                <path d="M 96,208 L 200,208" fill="none" stroke="black"/>
                <path d="M 96,272 L 200,272" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="200,144 188,138.4 188,149.6" fill="black" transform="rotate(0,192,144)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="168,128 156,122.4 156,133.6" fill="black" transform="rotate(180,160,128)"/>
                <polygon class="arrowhead" points="136,144 124,138.4 124,149.6" fill="black" transform="rotate(0,128,144)"/>
                <polygon class="arrowhead" points="136,64 124,58.4 124,69.6" fill="black" transform="rotate(0,128,64)"/>
                <polygon class="arrowhead" points="104,272 92,266.4 92,277.6" fill="black" transform="rotate(180,96,272)"/>
                <polygon class="arrowhead" points="104,208 92,202.4 92,213.6" fill="black" transform="rotate(180,96,208)"/>
                <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="92" y="36">Victim</text>
                  <text x="144" y="36">Foe</text>
                  <text x="204" y="36">Server</text>
                  <text x="88" y="52">|</text>
                  <text x="144" y="52">|</text>
                  <text x="144" y="68">S</text>
                  <text x="272" y="68">Code:</text>
                  <text x="316" y="68">0.01</text>
                  <text x="360" y="68">(GET)</text>
                  <text x="56" y="84">GET</text>
                  <text x="260" y="84">Observe:</text>
                  <text x="304" y="84">0</text>
                  <text x="256" y="100">Uri-Path:</text>
                  <text x="332" y="100">humidity</text>
                  <text x="144" y="132">D</text>
                  <text x="268" y="132">Reachability</text>
                  <text x="340" y="132">test</text>
                  <text x="388" y="132">(DTLS)</text>
                  <text x="144" y="148">S</text>
                  <text x="88" y="164">|</text>
                  <text x="144" y="164">|</text>
                  <text x="60" y="180">....</text>
                  <text x="116" y="180">....</text>
                  <text x="172" y="180">....</text>
                  <text x="144" y="196">|</text>
                  <text x="272" y="212">Code:</text>
                  <text x="316" y="212">2.05</text>
                  <text x="376" y="212">(Content)</text>
                  <text x="172" y="228">2.05</text>
                  <text x="260" y="228">Observe:</text>
                  <text x="324" y="228">263712</text>
                  <text x="260" y="244">Payload:</text>
                  <text x="312" y="244">"68</text>
                  <text x="340" y="244">%"</text>
                  <text x="272" y="276">Code:</text>
                  <text x="316" y="276">2.05</text>
                  <text x="376" y="276">(Content)</text>
                  <text x="172" y="292">2.05</text>
                  <text x="260" y="292">Observe:</text>
                  <text x="324" y="292">263713</text>
                  <text x="260" y="308">Payload:</text>
                  <text x="312" y="308">"69</text>
                  <text x="340" y="308">%"</text>
                  <text x="60" y="324">....</text>
                  <text x="116" y="324">....</text>
                  <text x="172" y="324">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Client  Victim  Foe   Server
   |      |      |      |
   +-----------> S----->|      Code: 0.01 (GET)
   | GET  |      |      |   Observe: 0
   |      |      |      |  Uri-Path: humidity
   |      |      |      |
   |<------------D <----+  Reachability test (DTLS)
   +-----------> S----->|
   |      |      |      |
     ....   ....   ....
   |      |      |      |
   |      |<------------+      Code: 2.05 (Content)
   |      |      | 2.05 |   Observe: 263712
   |      |      |      |   Payload: "68 %"
   |      |      |      |
   |      |<------------+      Code: 2.05 (Content)
   |      |      | 2.05 |   Observe: 263713
   |      |      |      |   Payload: "69 %"
     ....   ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>Where 'S' means the MITM attacker is changing the source address of the message and 'D' means the MITM attacker is changing the destination address of the message.</t>
        <t>An MITM amplification attack updating the server's source address is illustrated in <xref target="amp_mitm_server"/>. This attack is possible in DTLS with Connection ID. In DTLS 1.2 the reachability test might be done at a later point.</t>
        <figure anchor="amp_mitm_server">
          <name>MITM Amplification attack by updating the server's source address in a response</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="480" viewBox="0 0 480 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 32,48 L 32,192" fill="none" stroke="black"/>
                <path d="M 32,224 L 32,336" fill="none" stroke="black"/>
                <path d="M 88,72 L 88,96" fill="none" stroke="black"/>
                <path d="M 88,128 L 88,144" fill="none" stroke="black"/>
                <path d="M 88,248 L 88,296" fill="none" stroke="black"/>
                <path d="M 88,312 L 88,336" fill="none" stroke="black"/>
                <path d="M 144,72 L 144,104" fill="none" stroke="black"/>
                <path d="M 144,120 L 144,152" fill="none" stroke="black"/>
                <path d="M 144,224 L 144,336" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,192" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,336" fill="none" stroke="black"/>
                <path d="M 32,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 40,112 L 80,112" fill="none" stroke="black"/>
                <path d="M 104,112 L 192,112" fill="none" stroke="black"/>
                <path d="M 32,160 L 72,160" fill="none" stroke="black"/>
                <path d="M 96,160 L 192,160" fill="none" stroke="black"/>
                <path d="M 40,176 L 80,176" fill="none" stroke="black"/>
                <path d="M 104,176 L 200,176" fill="none" stroke="black"/>
                <path d="M 32,240 L 136,240" fill="none" stroke="black"/>
                <path d="M 32,304 L 136,304" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="200,160 188,154.4 188,165.6" fill="black" transform="rotate(0,192,160)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="144,304 132,298.4 132,309.6" fill="black" transform="rotate(0,136,304)"/>
                <polygon class="arrowhead" points="144,240 132,234.4 132,245.6" fill="black" transform="rotate(0,136,240)"/>
                <polygon class="arrowhead" points="112,176 100,170.4 100,181.6" fill="black" transform="rotate(180,104,176)"/>
                <polygon class="arrowhead" points="112,112 100,106.4 100,117.6" fill="black" transform="rotate(180,104,112)"/>
                <polygon class="arrowhead" points="80,160 68,154.4 68,165.6" fill="black" transform="rotate(0,72,160)"/>
                <polygon class="arrowhead" points="48,176 36,170.4 36,181.6" fill="black" transform="rotate(180,40,176)"/>
                <polygon class="arrowhead" points="48,112 36,106.4 36,117.6" fill="black" transform="rotate(180,40,112)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="88" y="36">Foe</text>
                  <text x="140" y="36">Victim</text>
                  <text x="204" y="36">Server</text>
                  <text x="88" y="52">|</text>
                  <text x="144" y="52">|</text>
                  <text x="272" y="68">Code:</text>
                  <text x="316" y="68">0.01</text>
                  <text x="364" y="68">(POST)</text>
                  <text x="60" y="84">POST</text>
                  <text x="256" y="84">Uri-Path:</text>
                  <text x="320" y="84">video</text>
                  <text x="88" y="116">S</text>
                  <text x="272" y="116">Code:</text>
                  <text x="316" y="116">2.01</text>
                  <text x="376" y="116">(Created)</text>
                  <text x="172" y="132">2.01</text>
                  <text x="88" y="164">D</text>
                  <text x="268" y="164">Reachability</text>
                  <text x="340" y="164">test</text>
                  <text x="388" y="164">(DTLS)</text>
                  <text x="88" y="180">S</text>
                  <text x="88" y="196">|</text>
                  <text x="144" y="196">|</text>
                  <text x="60" y="212">....</text>
                  <text x="116" y="212">....</text>
                  <text x="172" y="212">....</text>
                  <text x="88" y="228">|</text>
                  <text x="272" y="244">Code:</text>
                  <text x="316" y="244">0.01</text>
                  <text x="364" y="244">(POST)</text>
                  <text x="60" y="260">POST</text>
                  <text x="256" y="260">Uri-Path:</text>
                  <text x="320" y="260">video</text>
                  <text x="260" y="276">Payload:</text>
                  <text x="388" y="276">surveillance_1139.hevc</text>
                  <text x="272" y="308">Code:</text>
                  <text x="316" y="308">0.01</text>
                  <text x="364" y="308">(POST)</text>
                  <text x="60" y="324">POST</text>
                  <text x="256" y="324">Uri-Path:</text>
                  <text x="320" y="324">video</text>
                  <text x="260" y="340">Payload:</text>
                  <text x="388" y="340">surveillance_1140.hevc</text>
                  <text x="60" y="356">....</text>
                  <text x="116" y="356">....</text>
                  <text x="172" y="356">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Client   Foe  Victim  Server
   |      |      |      |
   +------------------->|      Code: 0.01 (POST)
   | POST |      |      |  Uri-Path: video
   |      |      |      |
   |<-----S <-----------|      Code: 2.01 (Created)
   |      |      | 2.01 |
   |      |      |      |
   +----> D------------>|  Reachability test (DTLS)
   |<-----S <-----------+
   |      |      |      |
     ....   ....   ....
   |      |      |      |
   +------------>|      |      Code: 0.01 (POST)
   | POST |      |      |  Uri-Path: video
   |      |      |      |   Payload: surveillance_1139.hevc
   |      |      |      |
   +------------>|      |      Code: 0.01 (POST)
   | POST |      |      |  Uri-Path: video
   |      |      |      |   Payload: surveillance_1140.hevc
     ....   ....   ....
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="summary">
      <name>Summary</name>
      <t>CoAP has always considered amplification attacks, but most of the requirements in
<xref target="RFC7252"/>, <xref target="RFC7641"/>, <xref target="RFC9175"/>, and
<xref target="I-D.ietf-core-groupcomm-bis"/> are "SHOULD" instead of "MUST", it is
undefined what a "large amplification factor" is, <xref target="RFC7641"/> does not specify
how many notifications that can be sent before a potentially spoofable
acknowledgement must be sent, and in several cases the "SHOULD" level is
further softened by “If possible" and "generally". <xref target="I-D.ietf-core-conditional-attributes"/>
does not have any amplification attack considerations.</t>
      <t>QUIC <xref target="RFC9000"/> mandates that ”an endpoint MUST limit the amount of data it sends
to the unvalidated address to three times the amount of data received from that
address” without any exceptions. This approach should be seen as current best practice
for non-constrained devices.</t>
      <t>While it is clear when a QUIC implementation violates the requirement in <xref target="RFC9000"/>, it
is not clear when a CoAP implementation violates the requirement in <xref target="RFC7252"/>,
<xref target="RFC7641"/>, <xref target="RFC9175"/>, and <xref target="I-D.ietf-core-groupcomm-bis"/>.</t>
      <t>In CoAP, an address can be validated with a security protocol or by using the Echo Option <xref target="RFC9175"/>. Restricting the bandwidth per server is not enough as the number of servers the attacker can use is typically unknown. For multicast requests, anti-amplification limits and the Echo Option do not really work unless the number of servers sending responses is known. Even if the responses have the same size as the request, the amplification factor from m servers is m, where m is typically unknown. While DoS attacks from CoAP servers accessible over the Internet pose the largest threat, an attacker on a local network (e.g., a compromised node) might use local CoAP servers to attack targets on the Internet or on the local network.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The whole document can be seen as security considerations for CoAP.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-informative-references">
      <name>Informative References</name>
      <reference anchor="RFC7252">
        <front>
          <title>The Constrained Application Protocol (CoAP)</title>
          <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
          <author fullname="K. Hartke" initials="K." surname="Hartke"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <date month="June" year="2014"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
            <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7252"/>
        <seriesInfo name="DOI" value="10.17487/RFC7252"/>
      </reference>
      <reference anchor="RFC7641">
        <front>
          <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
          <author fullname="K. Hartke" initials="K." surname="Hartke"/>
          <date month="September" year="2015"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7641"/>
        <seriesInfo name="DOI" value="10.17487/RFC7641"/>
      </reference>
      <reference anchor="RFC8152">
        <front>
          <title>CBOR Object Signing and Encryption (COSE)</title>
          <author fullname="J. Schaad" initials="J." surname="Schaad"/>
          <date month="July" year="2017"/>
          <abstract>
            <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need for the ability to have basic security services defined for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8152"/>
        <seriesInfo name="DOI" value="10.17487/RFC8152"/>
      </reference>
      <reference anchor="RFC8323">
        <front>
          <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <author fullname="S. Lemay" initials="S." surname="Lemay"/>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
          <author fullname="K. Hartke" initials="K." surname="Hartke"/>
          <author fullname="B. Silverajan" initials="B." surname="Silverajan"/>
          <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor"/>
          <date month="February" year="2018"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP), although inspired by HTTP, was designed to use UDP instead of TCP. The message layer of CoAP over UDP includes support for reliable delivery, simple congestion control, and flow control.</t>
            <t>Some environments benefit from the availability of CoAP carried over reliable transports such as TCP or Transport Layer Security (TLS). This document outlines the changes required to use CoAP over TCP, TLS, and WebSockets transports. It also formally updates RFC 7641 for use with these transports and RFC 7959 to enable the use of larger messages over a reliable transport.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8323"/>
        <seriesInfo name="DOI" value="10.17487/RFC8323"/>
      </reference>
      <reference anchor="RFC8446">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <date month="August" year="2018"/>
          <abstract>
            <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8446"/>
        <seriesInfo name="DOI" value="10.17487/RFC8446"/>
      </reference>
      <reference anchor="RFC8613">
        <front>
          <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
          <author fullname="G. Selander" initials="G." surname="Selander"/>
          <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
          <author fullname="F. Palombini" initials="F." surname="Palombini"/>
          <author fullname="L. Seitz" initials="L." surname="Seitz"/>
          <date month="July" year="2019"/>
          <abstract>
            <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
            <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8613"/>
        <seriesInfo name="DOI" value="10.17487/RFC8613"/>
      </reference>
      <reference anchor="RFC9000">
        <front>
          <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
          <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
          <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
          <date month="May" year="2021"/>
          <abstract>
            <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9000"/>
        <seriesInfo name="DOI" value="10.17487/RFC9000"/>
      </reference>
      <reference anchor="RFC9146">
        <front>
          <title>Connection Identifier for DTLS 1.2</title>
          <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
          <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig"/>
          <author fullname="T. Fossati" initials="T." surname="Fossati"/>
          <author fullname="A. Kraus" initials="A." surname="Kraus"/>
          <date month="March" year="2022"/>
          <abstract>
            <t>This document specifies the Connection ID (CID) construct for the Datagram Transport Layer Security (DTLS) protocol version 1.2.</t>
            <t>A CID is an identifier carried in the record layer header that gives the recipient additional information for selecting the appropriate security association. In "classical" DTLS, selecting a security association of an incoming DTLS record is accomplished with the help of the 5-tuple. If the source IP address and/or source port changes during the lifetime of an ongoing DTLS session, then the receiver will be unable to locate the correct security context.</t>
            <t>The new ciphertext record format with the CID also provides content type encryption and record layer padding.</t>
            <t>This document updates RFC 6347.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9146"/>
        <seriesInfo name="DOI" value="10.17487/RFC9146"/>
      </reference>
      <reference anchor="RFC9147">
        <front>
          <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
          <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
          <date month="April" year="2022"/>
          <abstract>
            <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
            <t>This document obsoletes RFC 6347.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9147"/>
        <seriesInfo name="DOI" value="10.17487/RFC9147"/>
      </reference>
      <reference anchor="RFC9175">
        <front>
          <title>Constrained Application Protocol (CoAP): Echo, Request-Tag, and Token Processing</title>
          <author fullname="C. Amsüss" initials="C." surname="Amsüss"/>
          <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
          <author fullname="G. Selander" initials="G." surname="Selander"/>
          <date month="February" year="2022"/>
          <abstract>
            <t>This document specifies enhancements to the Constrained Application Protocol (CoAP) that mitigate security issues in particular use cases. The Echo option enables a CoAP server to verify the freshness of a request or to force a client to demonstrate reachability at its claimed network address. The Request-Tag option allows the CoAP server to match block-wise message fragments belonging to the same request. This document updates RFC 7252 with respect to the following: processing requirements for client Tokens, forbidding non-secure reuse of Tokens to ensure response-to-request binding when CoAP is used with a security protocol, and amplification mitigation (where the use of the Echo option is now recommended).</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9175"/>
        <seriesInfo name="DOI" value="10.17487/RFC9175"/>
      </reference>
      <reference anchor="I-D.ietf-core-conditional-attributes">
        <front>
          <title>Conditional Attributes for Constrained RESTful Environments</title>
          <author fullname="Bill Silverajan" initials="B." surname="Silverajan">
            <organization>Tampere University</organization>
          </author>
          <author fullname="Michael Koster" initials="M." surname="Koster">
            <organization>Dogtiger Labs</organization>
          </author>
          <author fullname="Alan Soloway" initials="A." surname="Soloway">
            <organization>Qualcomm Technologies</organization>
          </author>
          <date day="17" month="October" year="2024"/>
          <abstract>
            <t>   This specification defines Conditional Notification and Control
   Attributes that work with CoAP Observe (RFC7641).

Editor note

   The git repository for the draft is found at https://github.com/core-
   wg/conditional-attributes/

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-core-conditional-attributes-08"/>
      </reference>
      <reference anchor="I-D.ietf-core-groupcomm-bis">
        <front>
          <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
          <author fullname="Esko Dijk" initials="E." surname="Dijk">
            <organization>IoTconsultancy.nl</organization>
          </author>
          <author fullname="Chonggang Wang" initials="C." surname="Wang">
            <organization>InterDigital</organization>
          </author>
          <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
            <organization>RISE AB</organization>
          </author>
          <date day="21" month="October" year="2024"/>
          <abstract>
            <t>   This document specifies the use of the Constrained Application
   Protocol (CoAP) for group communication, including the use of UDP/IP
   multicast as the default underlying data transport.  Both unsecured
   and secured CoAP group communication are specified.  Security is
   achieved by use of the Group Object Security for Constrained RESTful
   Environments (Group OSCORE) protocol.  The target application area of
   this specification is any group communication use cases that involve
   resource-constrained devices or networks that support CoAP.  This
   document replaces and obsoletes RFC 7390, while it updates RFC 7252
   and RFC 7641.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-12"/>
      </reference>
      <reference anchor="I-D.ietf-core-oscore-groupcomm">
        <front>
          <title>Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
          <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
            <organization>RISE AB</organization>
          </author>
          <author fullname="Göran Selander" initials="G." surname="Selander">
            <organization>Ericsson AB</organization>
          </author>
          <author fullname="Francesca Palombini" initials="F." surname="Palombini">
            <organization>Ericsson AB</organization>
          </author>
          <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
            <organization>Ericsson AB</organization>
          </author>
          <author fullname="Rikard Höglund" initials="R." surname="Höglund">
            <organization>RISE AB</organization>
          </author>
          <date day="26" month="September" year="2024"/>
          <abstract>
            <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of CoAP messages exchanged between members of a group, e.g.,
   sent over IP multicast.  In particular, the described protocol
   defines how OSCORE is used in a group communication setting to
   provide source authentication for CoAP group requests, sent by a
   client to multiple servers, and for protection of the corresponding
   CoAP responses.  Group OSCORE also defines a pairwise mode where each
   member of the group can efficiently derive a symmetric pairwise key
   with any other member of the group for pairwise OSCORE communication.
   Group OSCORE can be used between endpoints communicating with CoAP or
   CoAP-mappable HTTP.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-23"/>
      </reference>
      <reference anchor="DDoS-Infra" target="https://www.darkreading.com/cyberattacks-data-breaches/critical-infrastructure-under-attack">
        <front>
          <title>Critical Infrastructure Under Attack</title>
          <author>
            <organization/>
          </author>
          <date year="2021" month="November"/>
        </front>
        <seriesInfo name="Dark Reading" value=""/>
      </reference>
    </references>
    <?line 462?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank
<contact fullname="Sultan Alshehri"/>,
<contact fullname="Carsten Bormann"/>,
<contact fullname="Klaus Hartke"/>,
<contact fullname="Jaime Jiménez"/>,
<contact fullname="Ari Keränen"/>,
<contact fullname="Matthias Kovatsch"/>,
<contact fullname="Achim Kraus"/>,
<contact fullname="Sandeep Kumar"/>,
and
<contact fullname="András Méhes"/>
for their valuable comments and feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
