<?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-rfc2629 version 1.5.25 (Ruby 2.7.0) -->
<?rfc strict="yes"?>
<?rfc toc="yes"?>
<?rfc tocdepth="3"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc iprnotified="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mattsson-core-coap-attacks-03" category="info" submissionType="IETF" obsoletes="" updates="" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.1 -->
  <front>
    <title abbrev="Attacks on CoAP">Attacks on the Constrained Application Protocol (CoAP)</title>
    <seriesInfo name="Internet-Draft" value="draft-mattsson-core-coap-attacks-latest"/>
    <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="February" day="04"/>
    <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>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <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" format="default"/>. Any
Internet-of-Things (IoT) deployment valuing security and privacy would
use a security protocol such as DTLS <xref target="I-D.ietf-tls-dtls13" format="default"/>, TLS <xref target="RFC8446" format="default"/>, or
OSCORE <xref target="RFC8613" format="default"/> 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" format="default"/> and the
use of CoAP over TCP and TLS is specified in <xref target="RFC8323" format="default"/>. OSCORE
protects CoAP end-to-end with the use of COSE <xref target="RFC8152" format="default"/> and the CoAP
Object-Security option <xref target="RFC8613" format="default"/>, and can therefore be used over any
transport.</t>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252" format="default"/> was designed
with the assumption that security could be provided on a separate
layer, in particular by using DTLS <xref target="RFC6347" format="default"/>. 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" format="default"/>) 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" format="default"/>)
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" format="default"/>) 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="I-D.ietf-core-echo-request-tag" format="default"/>.
This document is a companion document to <xref target="I-D.ietf-core-echo-request-tag" format="default"/>
giving more information on the attacks motivating the mechanisms.</t>
    </section>
    <section anchor="attacks-on-coap" numbered="true" toc="default">
      <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" numbered="true" toc="default">
        <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" name="" type="" alt=""><![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" name="" type="" alt=""><![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" numbered="true" toc="default">
        <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" format="default"/>.</t>
        <figure anchor="delayreq">
          <name>Delaying a request</name>
          <artwork align="center" name="" type="" alt=""><![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" format="default"/>).  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" format="default"/>). 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" name="" type="" alt=""><![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" format="default"/>) can be mitigated by
using a replay window of length zero, the first attack (<xref target="delayreq" format="default"/>)
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" format="default"/>) 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="I-D.ietf-core-echo-request-tag" format="default"/> unless another
application specific challenge-response or timestamp mechanism is used.</t>
      </section>
      <section anchor="resdelay" numbered="true" toc="default">
        <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" format="default"/> 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" format="default"/>.</t>
        <figure anchor="delayresPUT">
          <name>Delaying and mismatching response to PUT</name>
          <artwork align="center" name="" type="" alt=""><![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" format="default"/>, 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" name="" type="" alt=""><![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" format="default"/>, 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" name="" type="" alt=""><![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="I-D.ietf-core-echo-request-tag" format="default"/> formally updates the client token processing for CoAP <xref target="RFC7252" format="default"/>.
Following this updated processing mitigates the attack.</t>
      </section>
      <section anchor="fragment" numbered="true" toc="default">
        <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" numbered="true" toc="default">
          <name>Completing an Operation with an Earlier Final Block</name>
          <t>In this scenario (illustrated in <xref target="promotevaljean" format="default"/>), 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 name="" type="" align="left" alt=""><![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="I-D.ietf-core-echo-request-tag" format="default"/>. 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" numbered="true" toc="default">
          <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" format="default"/>.</t>
          <figure anchor="freethequeen">
            <name>Injecting a withheld first block</name>
            <artwork name="" type="" align="left" alt=""><![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" format="default"/> 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" numbered="true" toc="default">
          <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" format="default"/>),
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" numbered="true" toc="default">
        <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" format="default"/>. 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" name="" type="" alt=""><![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" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>The whole document can be seen as security considerations for CoAP.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <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="I-D.ietf-lake-edhoc" target="https://www.ietf.org/archive/id/draft-ietf-lake-edhoc-12.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="20" month="October" year="2021"/>
          <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-12"/>
      </reference>
      <reference anchor="I-D.ietf-tls-dtls13" target="https://www.ietf.org/archive/id/draft-ietf-tls-dtls13-43.txt">
        <front>
          <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
          <author fullname="Eric Rescorla">
            <organization>RTFM, Inc.</organization>
          </author>
          <author fullname="Hannes Tschofenig">
            <organization>Arm Limited</organization>
          </author>
          <author fullname="Nagendra Modadugu">
            <organization>Google, Inc.</organization>
          </author>
          <date day="30" month="April" year="2021"/>
          <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.

   The DTLS 1.3 protocol is intentionally 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.

   This document obsoletes RFC 6347.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-tls-dtls13-43"/>
      </reference>
      <reference anchor="I-D.ietf-core-echo-request-tag" target="https://www.ietf.org/archive/id/draft-ietf-core-echo-request-tag-14.txt">
        <front>
          <title>CoAP: Echo, Request-Tag, and Token Processing</title>
          <author fullname="Christian Amsüss">
	 </author>
          <author fullname="John Preuß Mattsson">
            <organization>Ericsson AB</organization>
          </author>
          <author fullname="Göran Selander">
            <organization>Ericsson AB</organization>
          </author>
          <date day="4" month="October" year="2021"/>
          <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 client
   Token processing requirements, forbidding non-secure reuse of Tokens
   to ensure binding of response to request when CoAP is used with a
   security protocol, and with respect to amplification mitigation,
   where the use of Echo is now recommended.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-core-echo-request-tag-14"/>
      </reference>
    </references>
    <section numbered="false" anchor="acknowledgements" toc="default">
      <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:
H4sIACo8/WEAA+19W28kR7LeOwH+hwT1MM093b1zk1aaPbsWNRdpdJvxkGOt
n4zsquzu0lRX9akLOa1ZHux/8JMBG4YBv5w/cJ78pn+yv8TxRUReqrvJoSRK
WAMeASLZXZWVGRkZ8cW1JpPJ4UHb2Sr/L7asK/fIdE3vDg+KdcO/tt39u3c/
uXv/8CCvs8qu6IK8sfNusrJd17Z1NcnqxtH/7HpCn9jsTTspbefa7vAgs90j
U1Tzmp7Qz1ZF2xZ11W3WNMbzp2fPDg/WxaPDA2ParikyuvTOxrV38EFXZ8O/
crfulvTRA/6g3awaN2+TS9q66bY+yurV2g5GpTnED6uaP6NlVnVXzAuX+w+7
oitphieyGFNXpls687iuaJq2qFxuTtbrsqDF0WrMy6am+dWlGT2uT14eHx7Y
2axx54P78Q190ThLz6AnXCzk55sL+Wn7blk3RIqJEQp/WS8xsut//J/mG6Uz
z7YqusKWtMwvp7KiRm7Yc23d0FOeEmHxgTn5DJ/5ufmPlfjOEUVOn07uffTQ
fHzXnNKC3izrciVk7Kuu2dD3Fy53fIdb2aJ8ZL6nSU49F3zqdMgpkXhrIc/q
pnJLlw9mnH7420x1rk+8Yqqf//jvja3MqSvpLLhmMNn0w199soua5jFt9ZFX
zPYZXZO5NrPmJR3b1Yw4Y8gQ6ae/+pTnfjbTtX/uFfN+vGyKlniYprFqf/w/
bTuYdfKZzLlyzWJjvrDNOQmUolqY07rsce7a5OnZ1K7a3rXtp46vX4bLp5ak
EARQQ3xanDuWNq+ePf7owcM/+N//cP/D++H3Tz78xP/+8b34+ccP7j8Ivz98
+FH4/aN78vnzyZNp4bo5ib43buLyJQmwwedd2U5y+t/29Sw8XbasJ437F1pD
N+nsgi45PDh3VS8TXjR1v340kECvnp6ezfuSCHReNHW1clXXQgK9enqMO5Qu
NPaneMqUiMkDFd2yn8U9f+VaZ5ts+XuR3lnX265uWjyddmwyISbBE7MOf3/m
QH87Kx0JZNO6rG9cuTEk1HITSEzsNW/qFX1dkUhux4NLMxL+DUnK8KCxIRYn
gVsbksHGVTx4XkAdzPqOlklcRuJuUs8nrWvOi8wZVTGGhKmhHad10wX0fGPN
Rd2UuannpHfqqnIZBqDxTeU6+uoNZt8t6f8tXd45LAsfXRBNaAok4dfLTUtS
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
TufGwyhlmaG2U059mgoH01734yxFt8GmT0rCYuGpREF8pwYMgww8+TSY/umm
hCrTpSSeSe70Tk89VIVyo8a0kJgohXYjylstkos3+69s+f1xvs1kMC6tmu+o
ICo540vSn7OCS8CQSyESSLqQMOz/HUHA33FuQTzRJimFgKiViGFriTVWszLp
CxIetyHCZJ02UdEgySNOF0mQqGua2re7kt1v/UFMEwwHngd+DUe9Ygd3dKxq
K2CJgXHZJVsjsuuEodGqhXtZ9EUXGBEvnfRv+Fn3YIZTcdfoDTJQ1tg2LYMD
lYl1IF4lLKEZznI1a4E1v63OhYoLfA3rj6mwU38Rdjut1mjrrAjh2KTKo1sO
tQq/eil5A1cq7IwtVvLGoYoY6QeOjELi6zkhC8qtUKfm32irb+ThbpLtH/1b
QeQ7LlfjREqkVnakTyWThN8XONjsopJF+0jNdjVBLOAr0gai6kT3mYO1bwOS
cBa/pGskZy2ovW2G91vKVpTQfyuszU4lzzvRTJJoG58JlEdVQfxrP6OQxOQd
VHyAfTFxMNyCEFJu4VcRzLjCillbFL62ilrx+yyYbDuGMXJnQkd+NQAJsa3T
tu56HMGSqBXxp1EVmXbQ3DLflV2r2minXVFRsXxL3jyZGJwu9Lm/sJKyf6rv
rBTpJPWjfeUzg1mTV4OQZCAvv3lrPlCle9FF64OeshcSqzZ4pTQmLx9ypA/B
v5bfaDcfMv+sL8rOv8uAXQTKeWLpFiu7CK8HgqAo3fD+wGHnfQl8gSpXFmB7
Ug2k6GJGg2dm7kJ7XP/KTi5nJR1CWlBLmWHUodDSLIs85/JjSSXT16KKN7rx
jeDHwwpO4V1RLdoJK+hOVlYoJlbENFySlpGl6QVIxKty5XH/FowYJYut8rnP
IVdi9rnHYLEANE0yODz4z9xeS1NqtKzvyiLPavDaBn1TQ+hH5akBshEkWCw4
1kskqLlGnc9O8PGE93KFrvjohws2QrMucTApfX3llOXU7VEUvsciTy2fhXUt
bby8rxLXoj/CKIm5HmvTVt9nk1udIqNcvNWuYj6zsRA7HUgdMZCSJ8mRQaMw
pDxEwjm8VY/bYwkMaEKIP+2536bto8e+N0jS8K3V15tI5hIqzQ1p1WVVl/Vi
w61G89rnCWkafNgKfXGaTv84VJBHdBDT7zM0Jxawk8e6SN1MOsQDr5zUwccX
Zbzf/9PIS3q07xsOtsYuPG25bNB3y9tT/by3t0cSd9GD3UicJS34bq/zNsm/
93ierrLS//xXTunjf/Ej/hcS9+6bEez3kN0NW344bPJRzJre1/Fny9x+b37z
tnkesuy+vHAvX90vHruPZ3f7t5zNLZTd5xjYXfxfvTclLv6vN80UTwt0dOS9
WeM3WH9cz6tvPi7uPfj84ycfns//8pUZ+eyhGywnOiD0fIrn4dXgfVrDk5Ke
seNrcwglV2xYw2NCCY94jFMTgB363Jm+xJuRFW7GVOMosqTITxKE0b8wFhzz
7RH68HHt0XG8Q7kM1D3qdcTyVJtyzRI2c4POCJ9rW4ykoEjrirnnzYT1vwqk
8KY+I8l0tuXkLNiu8y0RP3xdrd7loxASoMqGfWM0Jpu8wRFNG4b6JOqZpAcD
3Dcangw3o5Ge8283UqEqfTi40Dh97WewRNNHJy+gkpS6NI6CN8zqy/ZC++Zg
GceXRNKU8brb+FonS6P3K7yWRWtK4UyxsP4TqesgCR2/2Zrb1EijfenezJsQ
Iuxi6qCUSroTyU5xJOTbZ4/NCBxKc+kQGUTCHViN34eDT9AeUHGADwFLXwLf
TWHh6kVj10t212Q11wYzXh+xlSc6+vOXp8eeswe9hPzapQGR8kW6SlRnifUV
3XI8jO+H499mKODD76a+JHLjbeUI6gWH+us4/YpfhrgP9MrbfwYNwMNjiR2K
lX+7OjQyYBID/UVZz4gWlT33UKzFQSOjC4hDczZHn397SjRRj6hmRkagyumd
azoxsbuGV1sfxKZKj/XNlr4gXCTMBffETV9vlrbNHRQTxptD4nF4yvOTb0/2
PiF975n2AfdnFIPgvvAS+JniyQ/MSQazhIwbsRJaFrLiBHX5n44YQUQp6RGy
YHh5FQZnUlRvgB7ePSYDH31tP4OtW1WXl5dj/vyr0pJV/AXJ4DcufPilxVH7
slj9+G+V+yF8fNIU5ivX/Pi/KxcH+IaIvSxoVV/V52REZ8t4ebYka/yrhh4Q
PjsltnJubb7qyZqST/k9e7i8ypsf/1drvvnx35Z48dAlv8FLQT1euMbbLG+5
0xd5zYkpZ+Lm/b8uE0vLfIcAAA==

-->

</rfc>
