<?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.6.9 (Ruby 2.7.0) -->
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc iprnotified="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-attacks-on-coap-00" category="info" submissionType="IETF" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.5 -->
  <front>
    <title abbrev="Attacks on CoAP">Attacks on the Constrained Application Protocol (CoAP)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-attacks-on-coap-00"/>
    <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="J." surname="Fornehed" fullname="John Fornehed">
      <organization abbrev="Ericsson">Ericsson AB</organization>
      <address>
        <postal>
          <street>SE-164 80 Stockholm</street>
          <country>Sweden</country>
        </postal>
        <email>john.fornehed@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="F." surname="Palombini" fullname="Francesca Palombini">
      <organization abbrev="Ericsson">Ericsson AB</organization>
      <address>
        <postal>
          <street>SE-164 80 Stockholm</street>
          <country>Sweden</country>
        </postal>
        <email>francesca.palombini@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="2022" month="May" day="09"/>
    <area/>
    <workgroup/>
    <keyword/>
    <abstract>
      <t>Being able to securely read information from sensors, to securely control actuators, and
to not enable distributed denial-of-service attacks are essential in a world of
connected and networking things interacting with
the physical world. This document summarizes a number of known attacks on CoAP and
show that just using CoAP with a security protocol like DTLS, TLS, or OSCORE is not
enough for secure operation. Several of the
discussed attacks can be mitigated with the solutions in
draft-ietf-core-echo-request-tag.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-core-attacks-on-coap/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Constrained RESTful Environments (CoRE) Working Group mailing list (<eref target="mailto:core@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/EricssonResearch/coap-actuators"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Being able to securely read information from sensors and to securely control actuators
are essential in a world of connected and networking things interacting with
the physical world. One protocol used to interact with sensors and actuators
is the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>. 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.</t>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> was designed
with the assumption that security could be provided on a separate
layer, in particular by using DTLS <xref target="RFC6347"/>. The four properties
traditionally provided by security protocols are:</t>
      <ul spacing="normal">
        <li>Data confidentiality</li>
        <li>Data origin authentication</li>
        <li>Data integrity checking</li>
        <li>Replay protection</li>
      </ul>
      <t>In this document we show that protecting CoAP with a security protocol on
another layer is not nearly enough to securely control actuators (and in
many cases sensors) and that secure operation often demands far more than
the four properties traditionally provided by security protocols. We describe
several serious attacks any on-path attacker (i.e., not only "trusted intermediaries")
can do and discusses tougher requirements and mechanisms to mitigate the
attacks. In general, secure operation of actuators also requires the three
properties:</t>
      <ul spacing="normal">
        <li>Data-to-data binding</li>
        <li>Data-to-space binding</li>
        <li>Data-to-time binding</li>
      </ul>
      <t>"Data-to-data binding" is e.g., binding of responses to a request or binding
of data fragments to each other. "Data-to-space binding" is the binding of
data to an absolute or relative point in space (i.e., a location) and may
in the relative case be referred to as proximity. "Data-to-time binding"
is the binding of data to an absolute or relative point in time and may in
the relative case be referred to as freshness. The two last properties may
be bundled together as "Data-to-spacetime binding".</t>
      <t>Freshness is a measure of when a message was sent on a timescale of
the recipient.  A client or server that receives a message can either
verify that the message is fresh or determine that it cannot be
verified that the message is fresh.  What is considered fresh is
application dependent.  Freshness is completely different from replay
protection, but most replay protection mechanism use a sequence
number.  Assuming the client is well-behaving, such a sequence number
that can be used by the server as a relative measure of when a
message was sent on a timescale of the sender.  Replay protection is
mandatory in TLS and OSCORE and optional in DTLS.  DTLS and TLS
use sequence numbers for both requests and responses. In TLS the
sequence numbers are implicit and not sent in the record.
OSCORE use sequence numbers for requests and some responses.
Most OSCORE responses are bound to the request and therefore,
enable the client to determine if the response is fresh or not.</t>
      <t>The request delay attack (valid for DTLS, TLS, and OSCORE and
described in <xref target="reqdelay"/>) lets an attacker control an actuator at a
much later time than the client anticipated. The response delay and
mismatch attack (valid for DTLS and TLS and described in <xref target="resdelay"/>)
lets an attacker respond to a client with a response meant for an
older request. The request fragment rearrangement attack (valid for
DTLS, TLS, and OSCORE and described in <xref target="fragment"/>) lets an attacker
cause unauthorized operations to be performed on the server, and
responses to unauthorized operations to be mistaken for responses to
authorized operations.</t>
      <t>The goal with this document is motivating generic
and protocol-specific recommendations on the usage of CoAP.
Mechanisms mitigating some of the attacks discussed in this document can
be found in <xref target="RFC9175"/>. This document is a companion document to <xref target="RFC9175"/>
giving more information on the attacks motivating the mechanisms.</t>
    </section>
    <section anchor="attacks-on-coap">
      <name>Attacks on CoAP</name>
      <t>Internet-of-Things (IoT) deployments valuing security and privacy, need to use
a security protocol such as DTLS, TLS, or OSCORE to protect CoAP. This is
especially true for deployments of actuators where attacks often (but not
always) have serious consequences. The attacks described in this section
are made under the assumption that CoAP is already protected with a security
protocol such as DTLS, TLS, or OSCORE, as an attacker otherwise can easily
forge false requests and responses.</t>
      <section anchor="the-block-attack">
        <name>The Block Attack</name>
        <t>An on-path attacker can block the delivery of any number of requests or responses.
The attack can also be performed by an attacker jamming the lower layer radio
protocol. This is true even if a security protocol like DTLS, TLS, or OSCORE
is used. Encryption makes selective blocking of messages harder, but not
impossible or even infeasible. With DTLS and TLS, proxies can read
the complete CoAP message, and with OSCORE, the CoAP header and several CoAP
options are not encrypted. In all three security protocols, the IP-addresses,
ports, and CoAP message lengths are available to all on-path attackers, which
may be enough to determine the server, resource, and command.  The block
attack is illustrated in Figures <xref target="blockreq" format="counter"/> and <xref target="blockres" format="counter"/>.</t>
        <figure anchor="blockreq">
          <name>Blocking a request</name>
          <artwork align="center"><![CDATA[
Client   Foe   Server
   |      |      |
   +----->X      |      Code: 0.03 (PUT)
   | PUT  |      |     Token: 0x47
   |      |      |  Uri-Path: lock
   |      |      |   Payload: 1 (Lock)
   |      |      |
]]></artwork>
        </figure>
        <t>Where 'X' means the attacker is blocking delivery of the message.</t>
        <figure anchor="blockres">
          <name>Blocking a response</name>
          <artwork align="center"><![CDATA[
Client   Foe   Server
   |      |      |
   +------------>|      Code: 0.03 (PUT)
   |      | PUT  |     Token: 0x47
   |      |      |  Uri-Path: lock
   |      |      |   Payload: 1 (Lock)
   |      |      |
   |      X<-----+      Code: 2.04 (Changed)
   |      | 2.04 |     Token: 0x47
   |      |      |
]]></artwork>
        </figure>
        <t>While blocking requests to, or responses from, a sensor is just a denial-of-service attack,
blocking a request to, or a response from, an actuator
results in the client losing information about the server's status. If the
actuator e.g., is a lock (door, car, etc.), the attack results in the client
not knowing (except by using out-of-band information) whether the lock is
unlocked or locked, just like the observer in the famous <contact fullname="Schrödinger’s"/> cat
thought experiment. Due to the nature of the attack, the client cannot distinguish
the attack from connectivity problems, offline servers, or unexpected behavior
from middle boxes such as NATs and firewalls.</t>
        <t>Remedy: Any IoT deployment of actuators where synchronized state is important need to
use confirmable messages and the client need to take appropriate actions when a response
is not received and it therefore loses information about the server's status.</t>
      </section>
      <section anchor="reqdelay">
        <name>The Request Delay Attack</name>
        <t>An on-path attacker may not only block packets, but can also delay the delivery
of any packet (request or response) by a chosen amount of time. If CoAP is
used over a reliable and ordered transport such as TCP with TLS or OSCORE (with
TLS-like sequence number handling), no messages can be delivered before the
delayed message. If CoAP is used
over an unreliable and unordered transport such as UDP with DTLS or OSCORE,
other messages can be delivered before the delayed message as long as the
delayed packet is delivered inside the replay window. When CoAP is used over
UDP, both DTLS and OSCORE allow out-of-order delivery and uses sequence numbers
together with a replay window to protect against replay attacks against requests.
The replay window has a default length of 64 in DTLS and 32 in OSCORE. The attacker
can influence the replay window state by blocking and delaying packets. By first
delaying a request, and then later, after delivery, blocking the response
to the request, the client is not made aware of the delayed delivery except
by the missing response. In general, the server has no way of knowing that
the request was delayed and will therefore happily process the request.
Note that delays can also happen for other reasons than a malicious attacker.</t>
        <t>If some wireless low-level protocol is used, the attack can also be performed
by the attacker simultaneously recording what the client transmits while
at the same time jamming the server. The request delay attack is illustrated
in <xref target="delayreq"/>.</t>
        <figure anchor="delayreq">
          <name>Delaying a request</name>
          <artwork align="center"><![CDATA[
Client   Foe   Server
   |      |      |
   +----->@      |      Code: 0.03 (PUT)
   | PUT  |      |     Token: 0x9c
   |      |      |  Uri-Path: lock
   |      |      |   Payload: 0 (Unlock)
   |      |      |
     ....   ....
   |      |      |
   |      @----->|      Code: 0.03 (PUT)
   |      | PUT  |     Token: 0x9c
   |      |      |  Uri-Path: lock
   |      |      |   Payload: 0 (Unlock)
   |      |      |
   |      X<-----+      Code: 2.04 (Changed)
   |      | 2.04 |     Token: 0x9c
   |      |      |
]]></artwork>
        </figure>
        <t>Where '@' means the attacker is storing and later forwarding the message
(@ may alternatively be seen as a wormhole connecting two points in time).</t>
        <t>While an attacker delaying a request to a sensor is often not a security
problem, an attacker delaying a request to an actuator performing an action
is often a serious problem. A request to an actuator (for example a request
to unlock a lock) is often only meant to be valid for a short time frame,
and if the request does not reach the actuator during this short timeframe,
the request should not be fulfilled. In the unlock example, if the client
does not get any response and does not physically see the lock opening, the
user is likely to walk away, calling the locksmith (or the IT-support).</t>
        <t>If a non-zero replay window is used (the default when CoAP is used
over UDP), the attacker can let the client interact with the actuator
before delivering the delayed request to the server (illustrated in
<xref target="delayreqreorder"/>).  In the lock example, the attacker may store the
first "unlock" request for later use.  The client will likely resend
the request with the same token.  If DTLS is used, the resent packet
will have a different sequence number and the attacker can forward
it. If OSCORE is used, resent packets will have the same sequence
number and the attacker must block them all until the client sends a
new message with a new sequence number (not shown in
<xref target="delayreqreorder"/>). After a while when the client has locked the
door again, the attacker can deliver the delayed "unlock" message to
the door, a very serious attack.</t>
        <figure anchor="delayreqreorder">
          <name>Delaying request with reordering</name>
          <artwork align="center"><![CDATA[
Client   Foe   Server
   |      |      |
   +----->@      |      Code: 0.03 (PUT)
   | PUT  |      |     Token: 0x9c
   |      |      |  Uri-Path: lock
   |      |      |   Payload: 0 (Unlock)
   |      |      |
   +------------>|      Code: 0.03 (PUT)
   | PUT  |      |     Token: 0x9c
   |      |      |  Uri-Path: lock
   |      |      |   Payload: 0 (Unlock)
   |      |      |
   <-------------+      Code: 2.04 (Changed)
   |      | 2.04 |     Token: 0x9c
   |      |      |
     ....   ....
   |      |      |
   +------------>|      Code: 0.03 (PUT)
   | PUT  |      |     Token: 0x7a
   |      |      |  Uri-Path: lock
   |      |      |   Payload: 1 (Lock)
   |      |      |
   <-------------+      Code: 2.04 (Changed)
   |      | 2.04 |     Token: 0x7a
   |      |      |
   |      @----->|      Code: 0.03 (PUT)
   |      | PUT  |     Token: 0x9c
   |      |      |  Uri-Path: lock
   |      |      |   Payload: 0 (Unlock)
   |      |      |
   |      X<-----+      Code: 2.04 (Changed)
   |      | 2.04 |     Token: 0x9c
   |      |      |
]]></artwork>
        </figure>
        <t>While the second attack (<xref target="delayreqreorder"/>) can be mitigated by
using a replay window of length zero, the first attack (<xref target="delayreq"/>)
cannot. A solution must enable the server to verify that the request
was received within a certain time frame after it was sent or enable
the server to securely determine an absolute point in time when the
request is to be executed. This can be accomplished with either a
challenge-response pattern, by exchanging timestamps between client
and server, or by only allowing requests a short period after client
authentication.</t>
        <t>Requiring a fresh client authentication (such as a new TLS/DTLS handshake
or an EDHOC key exchange <xref target="I-D.ietf-lake-edhoc"/>) mitigates the
problem, but requires larger messages and more processing
than a dedicated solution. Security solutions based on exchanging timestamps
require exactly synchronized time between client and server, and this may
be hard to control with complications such as time zones and daylight saving.
Wall clock time is not monotonic, may reveal that the endpoints will accept
expired certificates, or reveal the endpoint's
location. Use of non-monotonic clocks is problematic as the server will accept
requests if the clock is moved backward and reject requests if the clock
is moved forward. Even if the clocks are synchronized at one point in time,
they may easily get out-of-sync and an attacker may even be able to affect
the client or the server time in various ways such as setting up a fake NTP
server, broadcasting false time signals to radio-controlled clocks, or exposing
one of them to a strong gravity field. As soon as client falsely believes
it is time synchronized with the server, delay attacks are possible. A challenge
response mechanism where the server does not need to synchronize its time
with the client is easier to analyze but require more roundtrips. The challenges,
responses, and timestamps may be sent in a CoAP option or in the CoAP payload.</t>
        <t>Remedy: Any IoT deployment of actuators where freshness is important should use
the mechanisms specified in <xref target="RFC9175"/> unless another
application specific challenge-response or timestamp mechanism is used.</t>
      </section>
      <section anchor="resdelay">
        <name>The Response Delay and Mismatch Attack</name>
        <t>The following attack can be performed if CoAP is protected by a security
protocol where the response is not bound to the request in any way except
by the CoAP token. This would include most general security protocols, such
as DTLS, TLS, and IPsec, but not OSCORE. CoAP <xref target="RFC7252"/> uses a
client generated token that the server echoes to match responses to
request, but does not give any guidelines for the use of token with DTLS
and TLS, except that the tokens currently "in use" SHOULD (not SHALL) be
unique. In HTTPS, this type of binding is always assured by the ordered
and reliable delivery, as well as mandating that the server sends
responses in the same order that the requests were received.</t>
        <t>The attacker performs the attack by delaying delivery of a response
until the client sends a request with the same token, the response will be
accepted by the client as a valid response to the later request. If CoAP
is used over a reliable and ordered transport such as TCP with TLS, no messages
can be delivered before the delayed message. If CoAP is used over an unreliable
and unordered transport such as UDP with DTLS, other messages can be delivered
before the delayed message as long as the delayed packet is delivered inside
the replay window. Note that mismatches can also happen for other reasons
than a malicious attacker, e.g., delayed delivery or a server sending notifications
to an uninterested client.</t>
        <t>The attack can be performed by an attacker on the wire, or an attacker simultaneously
recording what the server transmits while at the same time jamming the client.
As (D)TLS encrypts the Token, the attacker needs to predict when the Token is resused.
How hard that is depends on the CoAP library, but some implementations are known
to omit the Token as much as possible and others lets the application chose the
Token. If the response is a "piggybacked response", the client may additionally check
the Message ID and drop it on mismatch. That doesn't make the attack impossible,
but lowers the probability.</t>
        <t>The response delay and mismatch attack is illustrated in <xref target="delayresPUT"/>.</t>
        <figure anchor="delayresPUT">
          <name>Delaying and mismatching response to PUT</name>
          <artwork align="center"><![CDATA[
Client   Foe   Server
   |      |      |
   +------------>|      Code: 0.03 (PUT)
   | PUT  |      |     Token: 0x77
   |      |      |  Uri-Path: lock
   |      |      |   Payload: 0 (Unlock)
   |      |      |
   |      @<-----+      Code: 2.04 (Changed)
   |      | 2.04 |     Token: 0x77
   |      |      |
     ....   ....
   |      |      |
   +----->X      |      Code: 0.03 (PUT)
   | PUT  |      |     Token: 0x77
   |      |      |  Uri-Path: lock
   |      |      |   Payload: 0 (Lock)
   |      |      |
   <------@      |      Code: 2.04 (Changed)
   | 2.04 |      |     Token: 0x77
   |      |      |
]]></artwork>
        </figure>
        <t>If we once again take a lock as an example, the security consequences may
be severe as the client receives a response message likely to be interpreted
as confirmation of a locked door, while the received response message is
in fact confirming an earlier unlock of the door. As the client is likely
to leave the (believed to be locked) door unattended, the attacker may enter
the home, enterprise, or car protected by the lock.</t>
        <t>The same attack may be performed on sensors. As illustrated in <xref target="delayresGET"/>, an attacker may convince the client
that the lock is locked, when it in fact is not. The "Unlock" request
may be also be sent by another client authorized to control the lock.</t>
        <figure anchor="delayresGET">
          <name>Delaying and mismatching response to GET</name>
          <artwork align="center"><![CDATA[
Client   Foe   Server
   |      |      |
   +------------>|      Code: 0.01 (GET)
   | GET  |      |     Token: 0x77
   |      |      |  Uri-Path: lock
   |      |      |
   |      @<-----+      Code: 2.05 (Content)
   |      | 2.05 |     Token: 0x77
   |      |      |   Payload: 1 (Locked)
   |      |      |
   +------------>|      Code: 0.03 (PUT)
   | PUT  |      |     Token: 0x34
   |      |      |  Uri-Path: lock
   |      |      |   Payload: 1 (Unlock)
   |      |      |
   |      X<-----+      Code: 2.04 (Changed)
   |      | 2.04 |     Token: 0x34
   |      |      |
   +----->X      |      Code: 0.01 (GET)
   | GET  |      |     Token: 0x77
   |      |      |  Uri-Path: lock
   |      |      |
   <------@      |      Code: 2.05 (Content)
   | 2.05 |      |     Token: 0x77
   |      |      |   Payload: 1 (Locked)
   |      |      |
]]></artwork>
        </figure>
        <t>As illustrated in <xref target="delayresother"/>, an attacker may even mix
responses from different resources as long as the two resources share
the same (D)TLS connection on some part of the path towards the
client. This can happen if the resources are located behind a common
gateway, or are served by the same CoAP proxy. An on-path attacker
(not necessarily a (D)TLS endpoint such as a proxy) may e.g., deceive a
client that the living room is on fire by responding with an earlier
delayed response from the oven (temperatures in degree Celsius).</t>
        <figure anchor="delayresother">
          <name>Delaying and mismatching response from other resource</name>
          <artwork align="center"><![CDATA[
Client   Foe   Server
   |      |      |
   +------------>|      Code: 0.01 (GET)
   | GET  |      |     Token: 0x77
   |      |      |  Uri-Path: oven/temperature
   |      |      |
   |      @<-----+      Code: 2.05 (Content)
   |      | 2.05 |     Token: 0x77
   |      |      |   Payload: 225
   |      |      |
     ....   ....
   |      |      |
   +----->X      |      Code: 0.01 (GET)
   | GET  |      |     Token: 0x77
   |      |      |  Uri-Path: livingroom/temperature
   |      |      |
   <------@      |      Code: 2.05 (Content)
   | 2.05 |      |     Token: 0x77
   |      |      |   Payload: 225
   |      |      |
]]></artwork>
        </figure>
        <t>Remedy: Section 4.2 of <xref target="RFC9175"/> formally updates the client token processing for CoAP <xref target="RFC7252"/>.
Following this updated processing mitigates the attack.</t>
      </section>
      <section anchor="fragment">
        <name>The Request Fragment Rearrangement Attack</name>
        <t>These attack scenarios show that the Request Delay and Block Attacks can
be
used against block-wise transfers to cause unauthorized operations to be
performed on the server, and responses to unauthorized operations to be
mistaken for responses to authorized operations.
The combination of these attacks is described as a separate attack because
it makes the Request Delay Attack
relevant to systems that are otherwise not time-dependent, which means that
they could disregard the Request Delay Attack.</t>
        <t>This attack works even if the individual request/response pairs are encrypted,
authenticated and protected against the Response Delay and Mismatch Attack,
provided the attacker is on the network path and can correctly guess which
operations the respective packages belong to.</t>
        <t>The attacks can be performed on any security protocol where the attacker can
delay the delivery of a message unnoticed. This incluses DTLS, IPsec, and most OSCORE
configurations. The attacks does not work on TCP with TLS or OSCORE (with
TLS-like sequence number handling) as in these cases no messages can be
delivered before the delayed message.</t>
        <section anchor="fragment-earlierfinal">
          <name>Completing an Operation with an Earlier Final Block</name>
          <t>In this scenario (illustrated in <xref target="promotevaljean"/>), blocks from two
operations on a POST-accepting resource are combined to make the
server execute an action that was not intended by the authorized
client. This works only if the client attempts a second operation
after the first operation failed (due to what the attacker made appear
like a network outage) within the replay window. The client does not
receive a confirmation on the second operation either, but, by the
time the client acts on it, the server has already executed the
unauthorized action.</t>
          <figure anchor="promotevaljean">
            <name>Completing an operation with an earlier final block</name>
            <artwork><![CDATA[
Client   Foe   Server
   |      |      |
   +------------->    POST "incarcerate" (Block1: 0, more to come)
   |      |      |
   <-------------+    2.31 Continue (Block1: 0 received, send more)
   |      |      |
   +----->@      |    POST "valjean" (Block1: 1, last block)
   |      |      |
   +----->X      |    All retransmissions dropped
   |      |      |

(Client: Odd, but let's go on and promote Javert)

   |      |      |
   +------------->    POST "promote" (Block1: 0, more to come)
   |      |      |
   |      X<-----+    2.31 Continue (Block1: 0 received, send more)
   |      |      |
   |      @------>    POST "valjean" (Block1: 1, last block)
   |      |      |
   |      X<-----+    2.04 Valjean Promoted
   |      |      |
]]></artwork>
          </figure>
          <t>Remedy: If a client starts new block-wise operations on a security
context that has lost packets, it needs to label the fragments in
such a way that the server will not mix them up.</t>
          <t>A mechanism to that effect is described as Request-Tag
<xref target="RFC9175"/>. Had it been in place in the
example and used for body integrity protection, the client would have
set the Request-Tag option in the "promote" request.
Depending on the server's capabilities and setup, either of four
outcomes could have occurred:</t>
          <ol spacing="normal" type="1"><li>The server could have processed the reinjected POST "valjean" as belonging
to the original "incarcerate" block; that's the expected case when the server
can handle simultaneous block transfers.</li>
            <li>The server could respond 5.03 Service Unavailable, including a Max-Age option
indicating how
long it prefers not to take any requests that force it to overwrite the state
kept for the "incarcerate" request.</li>
            <li>The server could decide to drop the state kept for the
"incarcerate" request's state, and process the "promote"
request. The reinjected POST "valjean" will then fail with 4.08
Request Entity incomplete, indicating that the server does not have
the start of the operation any more.</li>
          </ol>
        </section>
        <section anchor="injecting-a-withheld-first-block">
          <name>Injecting a Withheld First Block</name>
          <t>If the first block of a request is withheld by the attacker for later use,
it can be used to have the server process a different request body than
intended by the client. Unlike in the previous scenario, it will return a
response based on that body to the client.</t>
          <t>Again, a first operation (that would go like "Girl stole
apple. What shall we do with her?" - "Set her free.") is aborted by
the proxy, and a part of that operation is later used in a different
operation to prime the server for responding leniently to another
operation that would originally have been "Evil Queen poisoned apple. What
shall we do with her?" - "Lock her up.". The attack is illustrated in
<xref target="freethequeen"/>.</t>
          <figure anchor="freethequeen">
            <name>Injecting a withheld first block</name>
            <artwork><![CDATA[
Client   Foe   Server
   |      |      |
   +----->@      |    POST "Girl stole apple. Wh"
   |      |      |        (Block1: 0, more to come)

(Client: We'll try that one later again; for now, we have something
more urgent:)

   |      |      |
   +------------->    POST "Evil Queen poisened apple. Wh"
   |      |      |        (Block1: 0, more to come)
   |      |      |
   |      @<-----+    2.31 Continue (Block1: 0 received, send more)
   |      |      |
   |      @------>    POST "Girl stole apple. Wh"
   |      |      |        (Block1: 0, more to come)
   |      |      |
   |      X<-----+    2.31 Continue (Block1: 0 received, send more)
   |      |      |
   <------@      |    2.31 Continue (Block1: 0 received, send more)
   |      |      |
   +------------->    POST "at shall we do with her?"
   |      |      |        (Block1: 1, last block)
   |      |      |
   <-------------+    2.05 "Set her free."
   |      |      |        (Block1: 1 received and this is the result)
]]></artwork>
          </figure>
          <t>The remedy described in <xref target="fragment-earlierfinal"/> works also for this case.
Note that merely requiring that blocks of an operation should have incrementing sequence numbers
would be insufficient to remedy this attack.</t>
        </section>
        <section anchor="attack-difficulty">
          <name>Attack difficulty</name>
          <t>The success of any fragment rearrangement attack has multiple prerequisites:</t>
          <ul spacing="normal">
            <li>
              <t>A client sends different block-wise requests that are only distinguished by their content.  </t>
              <t>
This is generally rare in typical CoRE applications,
but can happen when the bodies of FETCH requests exceed the fragmentation threshold,
or when SOAP patterns are emulated.</t>
            </li>
            <li>
              <t>A client starts later block-wise operations after an earlier one has failed.  </t>
              <t>
This happens regularly as a consequence of operating in a low-power and lossy network:
Losses can cause failed operation (especially when the network is unavailable for time exceeding the "few expected round-trips" they may be limited to per <xref target="RFC7959"/>),
and the cost of reestablishing a security context.</t>
            </li>
            <li>
              <t>The attacker needs to be able to determine which packets contain which fragments.  </t>
              <t>
This can be achieved by an on-path attacker by observing request timing,
or simply by observing request sizes in the case when a body is split into precisely two blocks.</t>
            </li>
          </ul>
          <t>It is <em>not</em> a prerequisite that the resulting misassembled request body is syntactically correct:
As the server erroneously expects the body to be integrity protected from an authorized source,
it might be using a parser not suitable for untrusted input.
Such a parser might crash the server in extreme cases,
but might also produce a valid but incorrect response to the request the client associates the response with.
Note that many constrained applications aim to minimize traffic and thus employ compact data formats;
that compactness leaves little room for syntactically invalid messages.</t>
          <t>The attack is easier if the attacker has control over the request bodies
(which would be the case when a trusted proxy validates the attacker's authorization to perform two given requests,
and an attack on the path between the proxy and the server recombines the blocks to a semantically different request).
Attacks of that shape can easily result in reassembled bodies chosen by the attacker,
but no services are currently known that operate in this way.</t>
          <t>Summarizing,
it is unlikely that an attacker can perform any of the fragment rearrangement attacks on any given system --
but given the diversity of applications built on CoAP, it is easily to imagine that single applications would be vulnerable.
As block-wise transfer is a basic feature of CoAP and its details are sometimes hidden behind abstractions or proxies,
application authors can not be expected to design their applications with these attacks in mind,
and mitigation on the protocol level is prudent.</t>
        </section>
      </section>
      <section anchor="the-relay-attack">
        <name>The Relay Attack</name>
        <t>Yet another type of attack can be performed in deployments where actuator
actions are triggered automatically based on proximity and without any user
interaction, e.g., a car (the client) constantly polling for the car key (the
server) and unlocking both doors and engine as soon as the car key responds.
An attacker (or pair of attackers) may simply relay the CoAP messages out-of-band,
using for examples some other radio technology. By doing this, the actuator
(i.e., the car) believes that the client is close by and performs actions
based on that false assumption. The attack is illustrated in
<xref target="relay"/>. In this example the car is using an application specific
challenge-response mechanism transferred as CoAP payloads.</t>
        <figure anchor="relay">
          <name>Relay attack (the client is the actuator)</name>
          <artwork align="center"><![CDATA[
Client   Foe         Foe   Server
   |      |           |      |
   +----->| ......... +----->|      Code: 0.02 (POST)
   | POST |           | POST |     Token: 0x3a
   |      |           |      |  Uri-Path: lock
   |      |           |      |   Payload: JwePR2iCe8b0ux (Challenge)
   |      |           |      |
   |<-----+ ......... |<-----+      Code: 2.04 (Changed)
   | 2.04 |           | 2.04 |     Token: 0x3a
   |      |           |      |   Payload: RM8i13G8D5vfXK (Response)
   |      |           |      |
]]></artwork>
        </figure>
        <t>The consequences may be severe, and in the case of a car, lead to the attacker
unlocking and driving away with the car, an attack that unfortunately is
happening in practice.</t>
        <t>Remedy: Getting a response over a short-range radio cannot be taken as
proof of proximity and can therefore not be used to take actions based on
such proximity. Any automatically triggered mechanisms relying on proximity
need to use other stronger mechanisms to establish proximity. Mechanisms that
can be used are: measuring the round-trip time and calculating the maximum
possible distance based on the speed of light, or using radio with an extremely
short range like NFC (centimeters instead of meters). Another option is to
include geographical coordinates (from e.g., GPS) in the messages and calculate
proximity based on these, but in this case the location measurements need to be
very precise and the system need to make sure that an attacker cannot
influence the location estimation. Some types of global navigation satellite
systems (GNSS) receivers are vulnerable to spoofing attacks.</t>
      </section>
    </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>
      <name>Informative References</name>
      <reference anchor="RFC6347" target="https://www.rfc-editor.org/info/rfc6347">
        <front>
          <title>Datagram Transport Layer Security Version 1.2</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla">
            <organization/>
          </author>
          <author fullname="N. Modadugu" initials="N." surname="Modadugu">
            <organization/>
          </author>
          <date month="January" year="2012"/>
          <abstract>
            <t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.  This document updates DTLS 1.0 to work with TLS version 1.2.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6347"/>
        <seriesInfo name="DOI" value="10.17487/RFC6347"/>
      </reference>
      <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
        <front>
          <title>The Constrained Application Protocol (CoAP)</title>
          <author fullname="Z. Shelby" initials="Z." surname="Shelby">
            <organization/>
          </author>
          <author fullname="K. Hartke" initials="K." surname="Hartke">
            <organization/>
          </author>
          <author fullname="C. Bormann" initials="C." surname="Bormann">
            <organization/>
          </author>
          <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="RFC7959" target="https://www.rfc-editor.org/info/rfc7959">
        <front>
          <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
          <author fullname="C. Bormann" initials="C." surname="Bormann">
            <organization/>
          </author>
          <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby">
            <organization/>
          </author>
          <date month="August" year="2016"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks.  Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates.  In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS).  These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
            <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs.  In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers.  Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
            <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations.  Therefore, this specification updates RFC 7252.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7959"/>
        <seriesInfo name="DOI" value="10.17487/RFC7959"/>
      </reference>
      <reference anchor="RFC8152" target="https://www.rfc-editor.org/info/rfc8152">
        <front>
          <title>CBOR Object Signing and Encryption (COSE)</title>
          <author fullname="J. Schaad" initials="J." surname="Schaad">
            <organization/>
          </author>
          <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" target="https://www.rfc-editor.org/info/rfc8323">
        <front>
          <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
          <author fullname="C. Bormann" initials="C." surname="Bormann">
            <organization/>
          </author>
          <author fullname="S. Lemay" initials="S." surname="Lemay">
            <organization/>
          </author>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
            <organization/>
          </author>
          <author fullname="K. Hartke" initials="K." surname="Hartke">
            <organization/>
          </author>
          <author fullname="B. Silverajan" initials="B." surname="Silverajan">
            <organization/>
          </author>
          <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor">
            <organization/>
          </author>
          <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" target="https://www.rfc-editor.org/info/rfc8446">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla">
            <organization/>
          </author>
          <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" target="https://www.rfc-editor.org/info/rfc8613">
        <front>
          <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
          <author fullname="G. Selander" initials="G." surname="Selander">
            <organization/>
          </author>
          <author fullname="J. Mattsson" initials="J." surname="Mattsson">
            <organization/>
          </author>
          <author fullname="F. Palombini" initials="F." surname="Palombini">
            <organization/>
          </author>
          <author fullname="L. Seitz" initials="L." surname="Seitz">
            <organization/>
          </author>
          <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="RFC9147" target="https://www.rfc-editor.org/info/rfc9147">
        <front>
          <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla">
            <organization/>
          </author>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
            <organization/>
          </author>
          <author fullname="N. Modadugu" initials="N." surname="Modadugu">
            <organization/>
          </author>
          <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" target="https://www.rfc-editor.org/info/rfc9175">
        <front>
          <title>Constrained Application Protocol (CoAP): Echo, Request-Tag, and Token Processing</title>
          <author fullname="C. Amsüss" initials="C." surname="Amsüss">
            <organization/>
          </author>
          <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson">
            <organization/>
          </author>
          <author fullname="G. Selander" initials="G." surname="Selander">
            <organization/>
          </author>
          <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-lake-edhoc" target="https://www.ietf.org/archive/id/draft-ietf-lake-edhoc-13.txt">
        <front>
          <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
          <author fullname="Göran Selander">
            <organization>Ericsson AB</organization>
          </author>
          <author fullname="John Preuß Mattsson">
            <organization>Ericsson AB</organization>
          </author>
          <author fullname="Francesca Palombini">
            <organization>Ericsson AB</organization>
          </author>
          <date day="18" month="April" year="2022"/>
          <abstract>
            <t>   This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a
   very compact and lightweight authenticated Diffie-Hellman key
   exchange with ephemeral keys.  EDHOC provides mutual authentication,
   forward secrecy, and identity protection.  EDHOC is intended for
   usage in constrained scenarios and a main use case is to establish an
   OSCORE security context.  By reusing COSE for cryptography, CBOR for
   encoding, and CoAP for transport, the additional code size can be
   kept very low.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-lake-edhoc-13"/>
      </reference>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank
<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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
vP8XVcXYddSGAAA=

-->

</rfc>
