RFC 5363 PROPOSED STANDARD SIP · REQUEST FAN-OUT · SECURITY

SIP URI-List Framework: Framework and Security Considerations for Session Initiation Protocol (SIP) URI-List Services

How one SIP request can be turned into a request to every member of a list, without overloading the sender's link.

On rfc-editor.org ↗
PUBLISHED
October 2008
AUTHORS
G. Camarillo, A.B. Roach
STREAM
IETF
CONTENT-DISPOSITION TYPE
recipient-list
REQUEST-CONTAINED LIST REQUIREMENTS
2 (REQ 1 and REQ 2)
GENERAL REQUIREMENTS
4 (GEN 1 to GEN 4)
DUPLICATED URI IN A LIST
Treated as a single URI
PER-SERVICE SPECIFICATIONS CITED
3 (INVITE, MESSAGE and SUBSCRIBE)
DOI
10.17487/RFC5363

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                       G. Camarillo
Request for Comments: 5363                                      Ericsson
Category: Standards Track                                     A.B. Roach
                                                                 Tekelec
                                                            October 2008


               Framework and Security Considerations for
          Session Initiation Protocol (SIP) URI-List Services

Status of This Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   This document describes the need for SIP URI-list services and
   provides requirements for their invocation.  Additionally, it defines
   a framework for SIP URI-list services, which includes security
   considerations applicable to these services.

Table of Contents

   1. Introduction ....................................................2
   2. Terminology .....................................................2
   3. Requirements ....................................................2
      3.1. Requirements for URI-List Services Using
           Request-Contained Lists ....................................3
      3.2. General Requirements for URI-List Services .................3
   4. Framework .......................................................3
      4.1. Carrying URI Lists in SIP ..................................3
      4.2. Processing of URI Lists ....................................4
      4.3. Results ....................................................5
   5. Security Considerations .........................................5
      5.1. List Integrity and Confidentiality .........................5
      5.2. Amplification Attacks ......................................5
      5.3. General Issues .............................................7
   6. IANA Considerations .............................................7
   7. Acknowledgements ................................................8
   8. References ......................................................8
      8.1. Normative References .......................................8
      8.2. Informative References .....................................8

1.  Introduction

   Some applications require that, at a given moment, a SIP [RFC3261] UA
   (User Agent) performs a similar transaction with a number of remote
   UAs.  For example, an instant messaging application that needs to
   send a particular message (e.g., "Hello folks") to n receivers needs
   to send n MESSAGE requests; one to each receiver.

   When the transaction that needs to be repeated consists of a large
   request, or when the number of recipients is high, or both, the
   access network of the UA needs to carry a considerable amount of
   traffic.  Completing all the transactions on a low-bandwidth access
   would require a long time.  This is unacceptable for a number of
   applications.

   A solution to this problem consists of introducing URI-list services
   in the network.  The task of a SIP URI-list service is to receive a
   request that contains or references a URI list (i.e., a list of one
   or more URIs) and send a number of similar requests to the
   destinations in this list.  Once the requests are sent, the URI-list
   service typically informs the UA about their status.  Effectively,
   the URI-list service behaves as a B2BUA (Back-to-Back-User-Agent).

   A given URI-list service can take as an input a URI list contained in
   the SIP request sent by the client or an external URI list (e.g., the
   Request-URI is a SIP URI that is associated with a URI list at the
   server).  External URI lists are typically set up using out-of-band
   mechanisms (e.g., XML Configuration Access Protocol (XCAP)
   [RFC4825]).  An example of a URI-list service for SUBSCRIBE requests
   that uses stored URI lists is described in [RFC4662].

   The remainder of this document provides requirements and a framework
   for URI-list services using request-contained URI lists, external URI
   lists, or both.

2.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

3.  Requirements

   Section 3.1 discusses requirements that only apply to URI-list
   services that use request-contained lists, and Section 3.2 discusses
   requirements that also apply to services using external lists.

3.1.  Requirements for URI-List Services Using Request-Contained Lists

   REQ 1:  The URI-list service invocation mechanism MUST allow the
           invoker to provide a list of destination URIs to the URI-list
           service.

   REQ 2:  The invocation mechanism SHOULD NOT require more than one
           transaction.

3.2.  General Requirements for URI-List Services

   GEN 1:  A URI-list service MAY include services beyond sending
           requests to the URIs in the URI list.  That is, URI-list
           services can be modeled as application servers.  For example,
           a URI-list service handling INVITE requests may behave as a
           conference server and perform media mixing for all the
           participants.

   GEN 2:  The interpretation of the meaning of the URI list sent by the
           invoker MUST be at the discretion of the application to which
           the list is sent.

   GEN 3:  It MUST be possible for the invoker to find out about the
           result of the operations performed by the URI-list service
           with the URI list.  An invoker may, for instance, be
           interested in the status of the transactions initiated by the
           URI-list service.

   GEN 4:  URI-list services MUST NOT send requests to any destination
           without authenticating the invoker.

4.  Framework

   This framework is not restricted to application servers that only
   provide request fan-out services.  Per GEN 1, this framework also
   deals with application servers that provide a particular service that
   includes a request fan-out (e.g., a conference server that INVITEs
   several participants that are chosen by a user agent).

4.1.  Carrying URI Lists in SIP

   The requirements related to URI-list services that use request-
   contained lists identify the need for a mechanism to provide a SIP
   URI-list service with a URI list in a single transaction.  We define
   a new disposition type [RFC2183] for the Content-Disposition header
   field: recipient-list.  Both requests and responses MAY carry
   recipient-list bodies.  Bodies whose disposition type is recipient-
   list carry a list of URIs that contains the final recipients of the
   requests to be generated by a URI-list service.

   The default format for recipient-list bodies is service specific.
   So, URI-list services specifications MUST specify a default format
   for recipient-list bodies used within a particular service.  In any
   case, clients SHOULD NOT include any particular URI more than once in
   a given URI list.

   A UA server receiving a request with more than one recipient-list
   body parts (e.g., each body part using a different URI-list format)
   MUST behave as if it had received a single URI list that contains all
   the URIs present in the different body parts.

   A UA server receiving a recipient-list URI list that contains a URI
   more than once MUST behave as if that URI appeared in the URI list
   only once.  The UA server uses the comparison rules specific to the
   URI scheme of each of the URIs in the URI list to determine if there
   is any URI that appears more than once.  Additionally, Section 4 of
   "Extensible Markup Language (XML) Format Extension for Representing
   Copy Control Attributes in Resource Lists" [RFC5364] discusses cases
   where duplicated URI entries are tagged with different values of the
   'copyControl' attribute.  Naturally, URI-list services using the
   'copyControl' attribute defined in [RFC5364] need to follow the
   recommendations in [RFC5364] with respect to avoiding sending
   duplicated requests.

   The way a UA server interprets a URI list that it has received is
   service specific, as described in Section 4.2.

4.2.  Processing of URI Lists

   According to GEN 1 and GEN 2, URI-list services can behave as
   application servers.  That is, taking a URI list as an input, they
   can provide arbitrary services.  So, the interpretation of the URI
   list by the server depends on the service to be provided.  For
   example, for a conference server, the URIs in the list may identify
   the initial set of participants.  On the other hand, for a server
   dealing with MESSAGEs, the URIs in the list may identify the
   recipients of an instant message.

   At the SIP level, this implies that the behavior of application
   servers receiving requests with URI lists SHOULD be specified on a
   per-service basis.  Examples of such specifications are [RFC5366] for
   INVITE, [RFC5365] for MESSAGE, and [RFC5367] for SUBSCRIBE.

4.3.  Results

   According to GEN 3, user agents should have a way to obtain
   information about the operations performed by the application server.
   Since these operations are service specific, the way user agents are
   kept informed is also service specific.  For example, a user agent
   establishing an ad hoc conference with an INVITE with a URI list may
   discover which participants were successfully brought into the
   conference by using the conference package [RFC4575].

5.  Security Considerations

   Security plays an important role in the implementation of any URI-
   list service.  In fact, it is the most important common area across
   all types of URI-list services.

   By definition, a URI-list service takes one request in and sends a
   potentially large number of them out.  Attackers may attempt to use
   URI-list services as traffic amplifiers to launch DoS (denial-of-
   service) attacks.  This section provides guidelines to avoid these
   attacks.

5.1.  List Integrity and Confidentiality

   Attackers may attempt to modify URI lists sent from clients to
   servers.  This would cause a different behavior at the server than
   expected by the client (e.g., requests being sent to different
   recipients than the ones specified by the client).  To prevent this
   attack, clients SHOULD integrity protect URI lists using end-to-end
   mechanisms such as S/MIME or, if not available, hop-by-hop mechanisms
   such as TLS.  Both S/MIME and TLS can also provide URI-list
   confidentiality if needed.

5.2.  Amplification Attacks

   URI-list services take a request in and send a potentially large
   number of them out.  Given that URI-list services are typically
   implemented on top of powerful servers with high-bandwidth access
   links, we should be careful to keep attackers from using them as
   amplification tools to launch DoS attacks.

   Attackers may attempt to send a URI list containing URIs whose host
   parts route to the victims of the DoS attack.  These victims do not
   need to be SIP nodes; they can be non-SIP endpoints or even routers.
   If this attack is successful, the result is that an attacker can
   flood a set of nodes, or a single node, with traffic without needing
   to generate a high volume of traffic itself.

      In any case, note that this problem is not specific to SIP URI-
      list services; it also appears in scenarios that relate to
      multihoming where a server needs to contact a set of IP addresses
      provided by a client.

   There are several measures that need to be taken to prevent this type
   of attack.  The first one is keeping unauthorized users from using
   URI-list services.  So, URI-list services MUST NOT perform any
   request explosion for an unauthorized user.  URI-list services MUST
   authenticate users and check whether they are authorized to request
   the service before performing any request fan-out.

   Note that the risk of this attack also exists when a client uses
   stored URI lists.  Application servers MUST use authentication and
   authorization mechanisms with equivalent security properties when
   dealing with stored and request-contained URI lists.

   Even though the previous rule keeps unauthorized users from using
   URI-list services, authorized users may still launch attacks using
   these services.  To prevent these attacks, we introduce the concept
   of opt-in lists.  That is, URI-list services should not allow a
   client to place a user (identified by his or her URI) in a URI list
   unless the user has previously agreed to be placed in such a URI
   list.  So, URI-list services MUST NOT send a request to a destination
   that has not agreed to receive requests from the URI-list service
   beforehand.  Users can agree to receive requests from a URI-list
   service in several ways, such as filling a web page, sending an
   email, signing a contract, or using "A Framework for Consent-Based
   Communications in the Session Initiation Protocol (SIP)" [RFC5360],
   whose requirements are discussed in [RFC4453].  Additionally, users
   MUST be able to further describe the requests they are willing to
   receive.  For example, a user may only want to receive requests from
   a particular URI-list service on behalf of a particular user.
   Effectively, these rules make URI lists that used by URI-list
   services into opt-in lists.

   When a URI-list service receives a request with a URI list from a
   client, the URI-list service checks whether all the destinations have
   agreed beforehand to receive requests from the service on behalf of
   this client.  If the URI list has permission to send requests to all
   of the targets in the request, it does so.  If not, it does not send
   any request at all.

   The Framework for Consent-Based Communications in SIP [RFC5360]
   specifies a means for the URI-list service to inform the client that
   some permissions were missing and how to request them.

      Note that the mechanism used to obtain permissions should not
      create opportunities to launch DoS amplification attacks.  These
      attacks would be possible if, for instance, the URI-list service
      automatically contacted the full set of targets for which it did
      not have permissions in order to request permissions.  The URI-
      list service would be receiving one SIP request and sending out a
      number of authorization request messages.  The Framework for
      Consent-Based Communications in SIP [RFC5360] avoids this type of
      attack by having the client generate roughly the same amount of
      traffic towards the URI-list service as the service generates
      towards the destinations.

   In order to have an interoperable way to meet the requirements
   related to opt-in lists described in this section, URI-list services
   MUST implement and SHOULD use "A Framework for Consent-Based
   Communications in SIP" [RFC5360].

5.3.  General Issues

   URI-list services MAY have policies that limit the number of URIs in
   the lists they accept, as a very long list could be used in a
   denial-of-service attack to place a large burden on the URI-list
   service to send a large number of SIP requests.

   A URI-list service generates a set of requests from a URI list.
   Section 19.1.5 of [RFC3261] provides recommendations that need to be
   taken into consideration when forming a request from a URI.
   Naturally, those recommendations apply to all SIP URI-list services.

   The general requirement GEN 4, which states that URI-list services
   need to authenticate their clients, and the previous rules apply to
   URI-list services in general.  In addition, specifications dealing
   with individual methods MUST describe the security issues that relate
   to each particular method.

6.  IANA Considerations

   This document defines a new Content-Disposition header field
   disposition type (recipient-list) in Section 4.1.  This value has
   been registered in the IANA registry for Mail Content Disposition
   Values and Parameters with the following description:

   recipient-list    The body includes a list of URIs to which URI-list
                     services are to be applied.

7.  Acknowledgements

   Duncan Mills and Miguel A. Garcia-Martin supported the idea of 1 to n
   MESSAGE requests.  Jon Peterson, Dean Willis, and Jonathan Rosenberg
   provided useful comments.

8.  References

8.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC2183]  Troost, R., Dorner, S., and K. Moore, "Communicating
              Presentation Information in Internet Messages: The
              Content-Disposition Header Field", RFC 2183, August 1997.

   [RFC3261]  Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
              A., Peterson, J., Sparks, R., Handley, M., and E.
              Schooler, "SIP: Session Initiation Protocol", RFC 3261,
              June 2002.

   [RFC5360]  Rosenberg, J., Camarillo, G., Ed., and D. Willis, "A
              Framework for Consent-Based Communications in the Session
              Initiation Protocol (SIP)", RFC 5360, October 2008.

8.2.  Informative References

   [RFC4453]  Rosenberg, J., Camarillo, G., and D. Willis, "Requirements
              for Consent-Based Communications in the Session Initiation
              Protocol (SIP)", RFC 4453, April 2006.

   [RFC4575]  Rosenberg, J., Schulzrinne, H., and O. Levin, "A Session
              Initiation Protocol (SIP) Event Package for Conference
              State", RFC 4575, August 2006.

   [RFC4662]  Roach, A.B., Campbell, B., and J. Rosenberg, "A Session
              Initiation Protocol (SIP) Event Notification Extension for
              Resource Lists", RFC 4662, August 2006.

   [RFC4825]  Rosenberg, J., "The Extensible Markup Language (XML)
              Configuration Access Protocol (XCAP)", RFC 4825, May 2007.

   [RFC5364]  Garcia-Martin, M. and G. Camarillo, "Extensible Markup
              Language (XML) Format Extension for Representing Copy
              Control Attributes in Resource Lists", RFC 5364, October
              2008.

   [RFC5365]  Garcia-Martin, M. and G. Camarillo, "Multiple-Recipient
              MESSAGE Requests in the Session Initiation Protocol
              (SIP)", RFC 5365, October 2008.

   [RFC5366]  Camarillo, G. and A. Johnston, "Conference Establishment
              Using Request-Contained Lists in the Session Initiation
              Protocol (SIP)", RFC 5366, October 2008.

   [RFC5367]  Camarillo, G., Roach, A.B., and O. Levin, "Subscriptions
              to Request-Contained Resource Lists in the Session
              Initiation  Protocol (SIP)", RFC 5367, October 2008.

Authors' Addresses

   Gonzalo Camarillo
   Ericsson
   Hirsalantie 11
   Jorvas  02420
   Finland

   EMail: Gonzalo.Camarillo@ericsson.com


   Adam Roach
   Tekelec
   17210 Campbell Rd Ste 250
   Dallas, TX  75252
   USA

   EMail: Adam.Roach@tekelec.com

Full Copyright Statement

   Copyright (C) The IETF Trust (2008).

   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.

ISO Plain Language

On this page
PROBLEMAn application that has to do the same thing to many recipients, such as sending the same instant message to a group, makes one transaction per recipient. On a slow access link that can take a long time, and a single request that names hundreds of recipients can be used to flood a third party.
MECHANISMA URI-list service takes one request that contains or points at a list of URIs and sends a similar request to each of them, behaving as a back-to-back user agent. The list travels in a request body with the new content disposition type recipient-list, or lives at the server. The RFC states the requirements such a service must meet, above all that it authenticate the caller and only send to destinations that agreed in advance to receive such requests.
WHY IT MATTERSThe result is a common framework that the per-method specifications build on, with the fan-out moved off the caller's link and the rules that keep it from becoming an amplifier. The RFC says the mechanism for obtaining consent must be the consent framework of RFC 5360.

§1Introduction

Some applications need a SIP user agent to perform a similar transaction with a number of remote user agents at a given moment. An instant messaging application that needs to send a particular message, for example "Hello folks", to n receivers needs to send n MESSAGE requests, one to each receiver. When the repeated transaction consists of a large request, or the number of recipients is high, or both, the access network of the user agent has to carry a considerable amount of traffic, and completing all the transactions on a low-bandwidth access would take a long time. That is unacceptable for a number of applications.

The solution introduced in this document is a URI-list service in the network. The task of a URI-list service is to receive a request that contains or references a URI list, that is, a list of one or more URIs, and to send a number of similar requests to the destinations in that list. Once the requests are sent, the service typically informs the user agent about their status. Effectively the URI-list service behaves as a back-to-back user agent.

A URI-list service can take as its input a URI list contained in the SIP request sent by the client, or an external URI list, where the Request-URI is a SIP URI associated with a URI list at the server. External URI lists are typically set up using out-of-band mechanisms, for example the XML Configuration Access Protocol. The RFC gives requirements and a framework for URI-list services using request-contained lists, external lists, or both.

Instead of a program sending a hundred separate messages, it sends one request to a server that holds a list, and the server sends the hundred messages. The sender's link carries one request instead of a hundred, and the server can report back how each one went.

REQUEST FAN-OUT THROUGH A URI-LIST SERVICE (ILLUSTRATIVE, NOT FROM THE RFC)
User agentURI-list serviceDestinations
  1. INVITE with a recipient-list bodyOne transaction carries the list of destination URIs.
  2. INVITE to the first URI
  3. INVITE to the second URI
  4. INVITE to each remaining URIThe service checks that every destination agreed beforehand to receive requests from it.
  5. Status of the transactionsHow the outcome is reported is decided per service.
ONE REQUEST PER RECIPIENT, OR A URI-LIST SERVICE
AspectOne request per recipientA URI-list service
Traffic on the caller's access networkOne transaction for each recipientOne transaction to start with
Where the fan-out happensAt the user agentAt the service, which behaves as a back-to-back user agent
Example from the RFCAn instant messaging application sends n MESSAGE requestsThe service sends one similar request per URI in the list and typically reports the status back

§3Requirements

Two requirements apply to services that use request-contained lists. The first is that the invocation mechanism must allow the invoker to provide a list of destination URIs to the URI-list service. The second is that the invocation mechanism should not require more than one transaction.

Four further requirements apply to all URI-list services. A URI-list service may include services beyond sending requests to the URIs in the list, so it can be modelled as an application server; for example, a service handling INVITE requests may behave as a conference server and mix media for all the participants. The interpretation of the meaning of the URI list sent by the invoker is at the discretion of the application to which the list is sent. It must be possible for the invoker to find out about the result of the operations the service performed with the list, for instance the status of the transactions the service started. And a URI-list service must not send requests to any destination without authenticating the invoker.

The service must be reachable in a single transaction, must let the caller find out what happened, and must not send anything on behalf of a caller it has not authenticated. What the list means is up to the application that receives it.

THE REQUIREMENTS OF A URI-LIST SERVICE
  • REQ 1The invocation mechanism must allow the invoker to provide a list of destination URIs to the service.
  • REQ 2The invocation mechanism should not require more than one transaction.
  • GEN 1A service may provide more than request fan-out, so it can be modelled as an application server.
  • GEN 2The meaning of the list is at the discretion of the application to which the list is sent.
  • GEN 3The invoker must be able to find out about the result of the operations the service performed.
  • GEN 4A service must not send requests to any destination without authenticating the invoker.

§4.1Carrying URI Lists in SIP

To give a URI-list service a URI list in a single transaction, the RFC defines a new disposition type for the Content-Disposition header field, called recipient-list. Both requests and responses may carry recipient-list bodies, and a body whose disposition type is recipient-list carries a list of URIs that contains the final recipients of the requests to be generated by the service.

The default format for recipient-list bodies is service specific, so specifications for URI-list services must state a default format for the recipient-list bodies used within a particular service. In any case, clients should not include any particular URI more than once in a given URI list.

A server receiving a request with more than one recipient-list body part, for example parts in different URI-list formats, must behave as if it had received a single URI list containing all the URIs present in the different body parts. A server receiving a recipient-list URI list that contains a URI more than once must behave as if that URI appeared in the list only once, using the comparison rules specific to the URI scheme of each URI in the list to decide whether a URI appears more than once. A related document defines a copy-control attribute for resource lists, which can tag duplicated entries with different values; URI-list services that use it have to follow its recommendations about avoiding sending duplicated requests.

The list travels in the body of the request, marked as a recipient-list, and the format of that body is decided by the service that will use it. If the same address is listed twice, the server treats it as one address and sends one request to it.

§4.2Processing URI Lists and Reporting Results

Because a URI-list service can behave as an application server, taking a URI list as an input and providing arbitrary services, the way a server interprets a URI list depends on the service to be provided. For a conference server, the URIs in the list may identify the initial set of participants, while for a server dealing with MESSAGE requests they may identify the recipients of an instant message. At the SIP level, the behaviour of application servers receiving requests with URI lists should therefore be specified on a per-service basis, and the RFC names the specifications that do this for INVITE, for MESSAGE and for SUBSCRIBE.

How the user agent finds out about the operations the application server performed is also service specific. A user agent establishing an ad hoc conference with an INVITE carrying a URI list may discover which participants were successfully brought into the conference by using the conference event package.

What the list means depends on the service: for a conference it names the first participants, for messaging it names the recipients. Each method therefore has its own rules, and each has its own way of telling the caller what happened.

§5Security Considerations

Security plays an important role in the implementation of any URI-list service, and it is the most important common area across all types of them. By definition a URI-list service takes one request in and sends a potentially large number out, so attackers may try to use them as traffic amplifiers to launch denial-of-service attacks.

Attackers may also modify URI lists sent from clients to servers, which would cause a different behaviour at the server than the client expected, for example requests being sent to different recipients than the ones specified. To prevent this, clients should integrity protect URI lists with end-to-end mechanisms such as S/MIME, or, if that is not available, hop-by-hop mechanisms such as TLS. Both S/MIME and TLS can also provide confidentiality for the list if that is needed.

The amplification attack itself works like this. An attacker sends a URI list whose host parts route to the victims of the denial-of-service attack, and those victims need not be SIP nodes; they can be non-SIP endpoints or even routers. If the attack succeeds, the attacker can flood a set of nodes, or a single node, with traffic without generating a high volume of traffic itself. The problem is not specific to SIP URI-list services; it also appears in multihoming scenarios where a server has to contact a set of IP addresses provided by a client.

Several measures have to be taken. The first is to keep unauthorized users from using URI-list services at all: a service must not perform any request explosion for an unauthorized user, and must authenticate users and check that they are authorized to request the service before performing any fan-out. The same risk exists when a client uses stored URI lists, so application servers must use authentication and authorization mechanisms with equivalent security properties for stored and request-contained lists.

Authorized users can still cause trouble, so the RFC introduces the concept of opt-in lists. A service should not allow a client to place a user in a URI list unless that user has previously agreed to be placed in such a list, and a service must not send a request to a destination that has not agreed to receive requests from the service beforehand. Users can agree in several ways, such as filling in a web page, sending an email, signing a contract, or using the framework for consent-based communications in SIP. Users must also be able to describe further which requests they are willing to receive, for example only requests from a particular URI-list service on behalf of a particular user.

When a service receives a request with a URI list, it checks whether all the destinations have agreed beforehand to receive requests from the service on behalf of this client. If the list has permission to send requests to all of its targets, it does so, and if not, it sends no request at all. The mechanism used to obtain permissions should not itself create opportunities for amplification: a service must not automatically contact the full set of targets for which it lacks permission, because it would then be receiving one request and sending out a number of authorization request messages. The consent framework avoids this by having the client generate roughly the same amount of traffic towards the service as the service generates towards the destinations, and URI-list services must implement and should use that framework.

Finally, a service may have policies that limit the number of URIs in the lists it accepts, because a very long list could be used in a denial-of-service attack to place a large burden on the service. The recommendations of section 19.1.5 of the SIP specification for forming a request from a URI apply to all URI-list services, and specifications dealing with individual methods must describe the security issues that relate to each particular method.

One request turning into many is exactly what an attacker wants, so the service has to check who is asking, and only send to people who agreed beforehand to receive such requests. The way that agreement is asked for must not itself become an amplifier.

§6References

[RFC2183]RFC 2183Troost, R., Dorner, S. and K. Moore, "Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field", RFC 2183, August 1997.August 1997[RFC3261]RFC 3261Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M. and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, June 2002.July 2002[RFC5360]RFC 5360Rosenberg, J., Camarillo, G., Ed. and D. Willis, "A Framework for Consent-Based Communications in the Session Initiation Protocol (SIP)", RFC 5360, October 2008.October 2008[RFC4453]RFC 4453Rosenberg, J., Camarillo, G. and D. Willis, "Requirements for Consent-Based Communications in the Session Initiation Protocol (SIP)", RFC 4453, April 2006.April 2006[RFC4575]RFC 4575Rosenberg, J., Schulzrinne, H. and O. Levin, "A Session Initiation Protocol (SIP) Event Package for Conference State", RFC 4575, August 2006.August 2006[RFC4825]RFC 4825Rosenberg, J., "The Extensible Markup Language (XML) Configuration Access Protocol (XCAP)", RFC 4825, May 2007.May 2007[RFC5364]RFC 5364Garcia-Martin, M. and G. Camarillo, "Extensible Markup Language (XML) Format Extension for Representing Copy Control Attributes in Resource Lists", RFC 5364, October 2008.October 2008[RFC5365]RFC 5365Garcia-Martin, M. and G. Camarillo, "Multiple-Recipient MESSAGE Requests in the Session Initiation Protocol (SIP)", RFC 5365, October 2008.October 2008[RFC5366]RFC 5366Camarillo, G. and A. Johnston, "Conference Establishment Using Request-Contained Lists in the Session Initiation Protocol (SIP)", RFC 5366, October 2008.October 2008[RFC5367]RFC 5367Camarillo, G., Roach, A. B. and O. Levin, "Subscriptions to Request-Contained Resource Lists in the Session Initiation Protocol (SIP)", RFC 5367, October 2008.October 2008