RFC 5080 PROPOSED STANDARD RADIUS · AUTHENTICATION · INTEROPERABILITY

RADIUS Issues: Common Remote Authentication Dial In User Service (RADIUS) Implementation Issues and Suggested Fixes

Common RADIUS implementation problems and the fixes the IETF settled on.

On rfc-editor.org ↗
PUBLISHED
December 2007
AUTHORS
D. Nelson, A. DeKok
STREAM
IETF
BUILDS ON
RFC 2865 — RADIUS, RFC 2866 — RADIUS accounting, RFC 2869 — RADIUS extensions, RFC 3579 — RADIUS EAP
INITIAL RETRANSMISSION TIME
2 seconds
MAXIMUM RETRANSMISSION COUNT
5 attempts
MAXIMUM RETRANSMISSION TIME
16 seconds
MAXIMUM RETRANSMISSION DURATION
30 seconds
DUPLICATE CACHE ENTRY LIFETIME
No less than 5 and no more than 30 seconds
RANDOMIZATION FACTOR
Uniform between -0.1 and +0.1
DOI
10.17487/RFC5080
ERRATA
Reported errata

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                          D. Nelson
Request for Comments: 5080                          Elbrys Networks, Inc
Updates: 2865, 2866, 2869, 3579                                 A. DeKok
Category: Standards Track                                     FreeRADIUS
                                                           December 2007


       Common Remote Authentication Dial In User Service (RADIUS)
               Implementation Issues and Suggested Fixes

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 common issues seen in Remote Authentication
   Dial In User Service (RADIUS) implementations and suggests some
   fixes.  Where applicable, ambiguities and errors in previous RADIUS
   specifications are clarified.

Table of Contents

   1. Introduction ....................................................2
      1.1. Terminology ................................................3
      1.2. Requirements Language ......................................3
   2. Issues ..........................................................3
      2.1. Session Definition .........................................3
           2.1.1. State Attribute .....................................3
           2.1.2. Request-ID Supplementation ..........................6
      2.2. Overload Conditions ........................................7
           2.2.1. Retransmission Behavior .............................7
           2.2.2. Duplicate Detection and Orderly Delivery ...........10
           2.2.3. Server Response to Overload ........................11
      2.3. Accounting Issues .........................................12
           2.3.1. Attributes Allowed in an Interim Update ............12
           2.3.2. Acct-Session-Id and Acct-Multi-Session-Id ..........12
           2.3.3. Request Authenticator ..............................13
           2.3.4. Interim-Accounting-Interval ........................13
           2.3.5. Counter Values in the RADIUS Management
                  Information Base (MIB) .............................14
      2.4. Multiple Filter-ID Attributes .............................15
      2.5. Mandatory and Optional Attributes .........................16
      2.6. Interpretation of Access-Reject ...........................18
           2.6.1. Improper Use of Access-Reject ......................18
           2.6.2. Service Request Denial .............................19
      2.7. Addressing ................................................20
           2.7.1. Link-Local Addresses ...............................20
           2.7.2. Multiple Addresses .................................20
      2.8. Idle-Timeout ..............................................21
      2.9. Unknown Identity ..........................................21
      2.10. Responses After Retransmissions ..........................22
      2.11. Framed-IPv6-Prefix .......................................23
   3. Security Considerations ........................................24
   4. References .....................................................25
      4.1. Normative References ......................................25
      4.2. Informative References ....................................25

1.  Introduction

   The last few years have seen an increase in the deployment of RADIUS
   clients and servers.  This document describes common issues seen in
   RADIUS implementations and suggests some fixes.  Where applicable,
   ambiguities and errors in previous RADIUS specifications are
   clarified.

1.1.  Terminology

   This document uses the following terms:

   Network Access Server (NAS)
      The device providing access to the network.  Also known as the
      Authenticator in IEEE 802.1X or Extensible Authentication Protocol
      (EAP) terminology, or RADIUS client.

   service
      The NAS provides a service to the user, such as network access via
      802.11 or Point to Point Protocol (PPP).

   session
      Each service provided by the NAS to a peer constitutes a session,
      with the beginning of the session defined as the point where
      service is first provided, and the end of the session is defined
      as the point where service is ended.  A peer may have multiple
      sessions in parallel or series if the NAS supports that, with each
      session generating a separate start and stop accounting record.

   silently discard
      This means the implementation discards the packet without further
      processing.  The implementation SHOULD provide the capability of
      logging the error, including the contents of the silently
      discarded packet, and SHOULD record the event in a statistics
      counter.

1.2.  Requirements Language

   In this document, several words are used to signify the requirements
   of the specification.  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].

2.  Issues

2.1.  Session Definition

2.1.1.  State Attribute

   Regarding the State attribute, [RFC2865] Section 5.24 states:

      This Attribute is available to be sent by the server to the client
      in an Access-Challenge and MUST be sent unmodified from the client
      to the server in the new Access-Request reply to that challenge,
      if any.

      This Attribute is available to be sent by the server to the client
      in an Access-Accept that also includes a Termination-Action
      Attribute with the value of RADIUS-Request.  If the NAS performs
      the Termination-Action by sending a new Access-Request upon
      termination of the current session, it MUST include the State
      attribute unchanged in that Access-Request.

   Some RADIUS client implementations do not properly use the State
   attribute in order to distinguish a restarted EAP authentication
   process from the continuation of an ongoing process (by the same user
   on the same NAS and port).  Where an EAP-Message attribute is
   included in an Access-Challenge or Access-Accept attribute, RADIUS
   servers SHOULD also include a State attribute.  See Section 2.1.2 on
   Request ID supplementation for additional benefits to using the State
   attribute in this fashion.

   As defined in [RFC2865] Table 5.44, Access-Request packets may
   contain a State attribute.  The table does not qualify this
   statement, while the text in Section 5.24 (quoted above) adds other
   requirements not specified in that table.

   We extend the requirements of [RFC2865] to say that Access-Requests
   that are part of an ongoing Access-Request / Access-Challenge
   authentication process SHOULD contain a State attribute.  It is the
   responsibility of the server, to send a State attribute in an
   Access-Challenge packet, if that server needs a State attribute in a
   subsequent Access-Request to tie multiple Access-Requests together
   into one authentication session.  As defined in [RFC2865] Section
   5.24, the State MUST be sent unmodified from the client to the server
   in the new Access-Request reply to that challenge, if any.

   While most server implementations require the presence of a State
   attribute in an Access-Challenge packet, some challenge-response
   systems can distinguish the initial request from the response to the
   challenge without using a State attribute to track an authentication
   session.  The Access-Challenge and subsequent Access-Request packets
   for those systems do not need to contain a State attribute.

   Other authentication mechanisms need to tie a sequence of Access-
   Request / Access-Challenge packets together into one ongoing
   authentication session.  Servers implementing those authentication
   mechanisms SHOULD include a State attribute in Access-Challenge
   packets.

   In general, if the authentication process involves one or more
   Access-Request / Access-Challenge sequences, the State attribute
   SHOULD be sent by the server in the Access-Challenge packets.  Using
   the State attribute to create a multi-packet session is the simplest
   method available in RADIUS today.  While other methods of creating
   multi-packet sessions are possible (e.g., [RFC3579] Section 2.6.1),
   those methods are NOT RECOMMENDED.

   The only permissible values for a State attribute are values provided
   in an Access-Accept, Access-Challenge, CoA-Request or Disconnect-
   Request packet.  A RADIUS client MUST use only those values for the
   State attribute that it has previously received from a server.  An
   Access-Request sent as a result of a new or restarted authentication
   run MUST NOT include the State attribute, even if a State attribute
   has previously been received in an Access-Challenge for the same user
   and port.

   Access-Request packets that contain a Service-Type attribute with the
   value Authorize Only (17) MUST contain a State attribute.  Access-
   Request packets that contain a Service-Type attribute with value Call
   Check (10) SHOULD NOT contain a State attribute.  Any other Access-
   Request packet that performs authorization checks MUST contain a
   State attribute.  This last requirement often means that an Access-
   Accept needs to contain a State attribute, which can then be used in
   a later Access-Request that performs authorization checks.

   The standard use case for Call Check is pre-screening authentication
   based solely on the end-point identifier information, such as phone
   number or Media Access Control (MAC) address in Calling-Station-ID
   and optionally Called-Station-ID.  In this use case, the NAS has no
   way to obtain a State attribute suitable for inclusion in an Access-
   Request.  Other, non-standard, uses of Call Check may require or
   permit the use of a State attribute, but are beyond the scope of this
   document.

   In an Access-Request with a Service-Type Attribute with value Call
   Check, it is NOT RECOMMENDED for the User-Name and User-Password
   attributes to contain the same values (e.g., a MAC address).
   Implementing MAC address checking without using a Service-Type of
   Call Check is NOT RECOMMENDED.  This practice gives an attacker both
   the clear-text and cipher-text of the User-Password field, which
   permits many attacks on the security of the RADIUS protocol.  For
   example, if the Request Authenticator does not satisfy the [RFC2865]
   requirements on global and temporal uniqueness, the practice
   described above may lead to the compromise of the User-Password
   attribute in other Access-Requests for unrelated users.  Access to
   the cipher-text enables offline dictionary attacks, potentially
   exposing the shared secret and compromising the entire RADIUS
   protocol.

   Any Access-Request packet that performs authorization checks,
   including Call Check, SHOULD contain a Message-Authenticator
   attribute.  Any response to an Access-Request performing an
   authorization check MUST NOT contain confidential information about
   any user (such as Tunnel-Password), unless that Access-Request
   contains a State attribute.  The use of State here permits the
   authorization check to be tied to an earlier user authentication.  In
   that case, the server MAY respond to the NAS with confidential
   information about that user.  The server MUST NOT respond to that
   authorization check with confidential information about any other
   user.

   For an Access-Request packet performing an authorization check that
   does not contain a State attribute, the server MUST respond with an
   Access-Reject.

2.1.2.  Request-ID Supplementation

   [RFC3579] Section 2.6.1 states:

      In EAP, each session has its own unique Identifier space.  RADIUS
      server implementations MUST be able to distinguish between EAP
      packets with the same Identifier existing within distinct
      sessions, originating on the same NAS.  For this purpose, sessions
      can be distinguished based on NAS and session identification
      attributes.  NAS identification attributes include NAS-Identifier,
      NAS-IPv6-Address and NAS-IPv4-Address.  Session identification
      attributes include User-Name, NAS-Port, NAS-Port-Type, NAS-Port-
      Id, Called-Station-Id, Calling-Station-Id and Originating-Line-
      Info.

   There are issues with the suggested algorithm.  Since proxies may
   modify Access-Request attributes such as NAS-IP-Address, depending on
   any attribute under control of the NAS to distinguish request
   identifiers can result in deployment problems.

   The FreeRADIUS implementation does not track EAP identifiers by NAS-
   IP-Address or other non-EAP attributes sent by the NAS.  Instead, it
   uses the EAP identifier, source Internet Protocol (IP) address, and
   the State attribute as a "key" to uniquely identify each EAP session.
   Since the State attribute is under the control of the RADIUS server,
   the uniqueness of each session is controlled by the server, not the
   NAS.  The algorithm used in FreeRADIUS is as follows:

      if (EAP start, or EAP identity) {
        allocate unique State Attribute
        insert session into "active session" table with
             key=(EAP identifier, State, source IP)
      } else {
        look up active session in table, with above key
      }

   This algorithm appears to work well in a variety of situations,
   including situations where home servers receive messages via
   intermediate RADIUS proxies.

   Implementations that do not use this algorithm are often restricted
   to having an EAP Identifier space per NAS, or perhaps one that is
   global to the implementation.  These restrictions are unnecessary
   when the above algorithm is used, which gives each session a unique
   EAP Identifier space.  The above algorithm SHOULD be used to track
   EAP sessions in preference to any other method.

2.2.  Overload Conditions

2.2.1.  Retransmission Behavior

   [RFC2865] Section 2.4 describes the retransmission requirements for
   RADIUS clients:

      At one extreme, RADIUS does not require a "responsive" detection
      of lost data.  The user is willing to wait several seconds for the
      authentication to complete.  The generally aggressive Transmission
      Control Protocol (TCP) retransmission (based on average round trip
      time) is not required, nor is the acknowledgment overhead of TCP.

      At the other extreme, the user is not willing to wait several
      minutes for authentication.  Therefore the reliable delivery of
      TCP data two minutes later is not useful.  The faster use of an
      alternate server allows the user to gain access before giving up.

   Some existing RADIUS clients implement excessively aggressive
   retransmission behavior, utilizing default retransmission timeouts of
   one second or less without support for congestive backoff.  When
   deployed at a large scale, these implementations are susceptible to
   congestive collapse.  For example, as the result of a power failure,
   a network with 3,000 NAS devices with a fixed retransmission timer of
   one second will continuously generate 3,000 RADIUS Access-Requests
   per second.  This is sufficient to overwhelm most RADIUS servers.

   Suggested solutions include:

      [a]   Jitter.  To avoid synchronization, a RADIUS client SHOULD
            incorporate induced jitter within its retransmission
            algorithm, as specified below.

      [b]   Congestive backoff.  While it is not necessary for RADIUS
            client implementations to implement complex retransmission
            algorithms, implementations SHOULD support congestive
            backoff.

   RADIUS retransmission timers are based on the model used in Dynamic
   Host Configuration Protocol for IPv6 (DHCPv6) [RFC3315].  Variables
   used here are also borrowed from this specification.  RADIUS is a
   request/response-based protocol.  The message exchange terminates
   when the requester successfully receives the answer, or the message
   exchange is considered to have failed according to the RECOMMENDED
   retransmission mechanism described below.  Other retransmission
   mechanisms are possible, as long as they satisfy the requirements on
   jitter and congestive backoff.

   The following algorithms apply to any client that originates RADIUS
   packets, including but not limited to Access-Request, Accounting-
   Request, Disconnect-Request, and CoA-Request [RFC3576].

   The retransmission behavior is controlled and described by the
   following variables:

         RT     Retransmission timeout

         IRT    Initial retransmission time  (default 2 seconds)

         MRC    Maximum retransmission count (default 5 attempts)

         MRT    Maximum retransmission time (default 16 seconds)

         MRD    Maximum retransmission duration (default 30 seconds)

         RAND   Randomization factor

   With each message transmission or retransmission, the sender sets RT
   according to the rules given below.  If RT expires before the message
   exchange terminates, the sender re-computes RT and retransmits the
   message.

   Each of the computations of a new RT include a randomization factor
   (RAND), which is a random number chosen with a uniform distribution
   between -0.1 and +0.1.  The randomization factor is included to
   minimize the synchronization of messages.

   The algorithm for choosing a random number does not need to be
   cryptographically sound.  The algorithm SHOULD produce a different
   sequence of random numbers from each invocation.

   RT for the first message transmission is based on IRT:

         RT = IRT + RAND*IRT

   RT for each subsequent message retransmission is based on the
   previous value of RT:

         RT = 2*RTprev + RAND*RTprev

   MRT specifies an upper bound on the value of RT (disregarding the
   randomization added by the use of RAND).  If MRT has a value of 0,
   there is no upper limit on the value of RT.  Otherwise:

         if (RT > MRT)
            RT = MRT + RAND*MRT

   MRD specifies an upper bound on the length of time a sender may
   retransmit a message.  The message exchange fails once MRD seconds
   have elapsed since the client first transmitted the message.  MRD
   MUST be set, and SHOULD have a value between 5 and 30 seconds.  These
   values mirror the values for a server's duplicate detection cache, as
   described in the next section.

   MRC specifies an upper bound on the number of times a sender may
   retransmit a message.  If MRC is zero, the message exchange fails
   once MRD seconds have elapsed since the client first transmitted the
   message.  If MRC is non-zero, the message exchange fails when either
   the sender has transmitted the message MRC times, or when MRD seconds
   have elapsed since the client first transmitted the message.

   For Accounting-Request packets, the default values for MRC, MRD, and
   MRT SHOULD be zero.  These settings will enable a RADIUS client to
   continue sending accounting requests to a RADIUS server until the
   request is acknowledged.  If any of MRC, MRD, or MRT are non-zero,
   then the accounting information could potentially be discarded
   without being recorded.

2.2.2.  Duplicate Detection and Orderly Delivery

   When packets are retransmitted by a client, the server may receive
   duplicate requests.  The limitations of the transport protocol used
   by RADIUS, the User Datagram Protocol (UDP), means that the Access-
   Request packets may be received, and potentially processed, in an
   order different from the order in which the packets were sent.
   However, the discussion of the Identifier field in Section 3 of
   [RFC2865] says:

      The RADIUS server can detect a duplicate request if it has the
      same client source IP address and source UDP port and Identifier
      within a short span of time.

   Also, Section 7 of [RFC4669] defines a
   radiusAuthServDupAccessRequests object as:

      The number of duplicate Access-Request packets received.

   This text has a number of implications.  First, without duplicate
   detection, a RADIUS server may process an authentication request
   twice, leading to an erroneous conclusion that a user has logged in
   twice.  That behavior is undesirable, so duplicate detection is
   desirable.  Second, the server may track not only the duplicate
   request, but also the replies to those requests.  This behavior
   permits the server to send duplicate replies in response to duplicate
   requests, increasing network stability.

   Since Access-Request packets may also be sent by the client in
   response to an Access-Challenge from the server, those packets form a
   logically ordered stream, and, therefore have additional ordering
   requirements over Access-Request packets for different sessions.
   Implementing duplicate detection results in new packets being
   processed only once, ensuring order.

   RADIUS servers MUST therefore implement duplicate detection for
   Access-Request packets, as described in Section 3 of [RFC2865].
   Implementations MUST also cache the Responses (Access-Accept,
   Access-Challenge, or Access-Reject) that they send in response to
   Access-Request packets.  If a server receives a valid duplicate
   Access-Request for which it has already sent a Response, it MUST
   resend its original Response without reprocessing the request.  The
   server MUST silently discard any duplicate Access-Requests for which
   a Response has not yet been sent.

   Each cache entry SHOULD be purged after a period of time.  This time
   SHOULD be no less than 5 seconds, and no more than 30 seconds.  After
   about 30 seconds, most RADIUS clients and end users will have given
   up on the authentication request.  Therefore, there is little value
   in having a larger cache timeout.

   Cache entries MUST also be purged if the server receives a valid
   Access-Request packet that matches a cached Access-Request packet in
   source address, source port, RADIUS Identifier, and receiving socket,
   but where the Request Authenticator field is different from the one
   in the cached packet.  If the request contains a Message-
   Authenticator attribute, the request MUST be processed as described
   in [RFC3580] Section 3.2.  Packets with invalid Message-
   Authenticators MUST NOT affect the cache in any way.

   However, Access-Request packets not containing a Message-
   Authenticator attribute always affect the cache, even though they may
   be trivially forged.  To avoid this issue, server implementations may
   be configured to require the presence of a Message-Authenticator
   attribute in Access-Request packets.  Requests not containing a
   Message-Authenticator attribute MAY then be silently discarded.

   Client implementations SHOULD include a Message-Authenticator
   attribute in every Access-Request to further help mitigate this
   issue.

   When sending requests, RADIUS clients MUST NOT reuse Identifiers for
   a source IP address and source UDP port until either a valid response
   has been received, or the request has timed out.  Clients SHOULD
   allocate Identifiers via a least-recently-used (LRU) method for a
   particular source IP address and source UDP port.

   RADIUS clients do not have to perform duplicate detection.  When a
   client sends a request, it processes the first response that has a
   valid Response Authenticator as defined in [RFC2865] Section 3.  Any
   later responses MUST be silently discarded, as they do not match a
   pending request.  That is, later responses are treated exactly the
   same as unsolicited responses, and are silently discarded.

2.2.3.  Server Response to Overload

   Some RADIUS server implementations are not robust in response to
   overload, dropping packets with even probability across multiple
   sessions.  In an overload situation, this results in a high failure
   rate for multi-round authentication protocols such as EAP [RFC3579].
   Typically, users will continually retry in an attempt to gain access,
   increasing the load even further.

   A more sensible approach is for a RADIUS server to preferentially
   accept RADIUS Access-Request packets containing a valid State
   attribute, so that multi-round authentication conversations, once
   begun, will be more likely to succeed.  Similarly, a server that is
   proxying requests should preferentially process Access-Accept,
   Access-Challenge, or Access-Reject packets from home servers before
   processing new requests from a NAS.

   These methods will allow some users to gain access to the network,
   reducing the load created by ongoing access attempts.

2.3.  Accounting Issues

2.3.1.  Attributes Allowed in an Interim Update

   [RFC2866] indicates that Acct-Input-Octets, Acct-Output-Octets,
   Acct-Session-Time, Acct-Input-Packets, Acct-Output-Packets and Acct-
   Terminate-Cause attributes "can only be present in Accounting-Request
   records where the Acct-Status-Type is set to Stop".

   However [RFC2869] Section 2.1 states:

      It is envisioned that an Interim Accounting record (with Acct-
      Status-Type = Interim-Update (3)) would contain all of the
      attributes normally found in an Accounting Stop message with the
      exception of the Acct-Term-Cause attribute.

   Although [RFC2869] does not indicate that it updates [RFC2866], this
   is an oversight, and the above attributes are allowable in an Interim
   Accounting record.

2.3.2.  Acct-Session-Id and Acct-Multi-Session-Id

   [RFC2866] Section 5.5 describes Acct-Session-Id as Text within the
   figure summarizing the attribute format, but then goes on to state
   that "The String field SHOULD be a string of UTF-8 encoded 10646
   characters".

   [RFC2865] defines the Text type as "containing UTF-8 encoded 10646
   characters", which is compatible with the description of Acct-
   Session-Id.  Since other attributes are consistently described as
   "Text" within both the figure summarizing the attribute format, and
   the following attribute definition, it appears that this is a
   typographical error, and that Acct-Session-Id is of type Text, and
   not of type String.

   The definition of the Acct-Multi-Session-Id attribute also has
   typographical errors.  It says:

      A summary of the Acct-Session-Id attribute format ...

   This text should read:

      A summary of the Acct-Multi-Session-Id attribute format ...

   The Acct-Multi-Session-Id attribute is also defined as being of type
   String.  However, the language in the text strongly recommends that
   implementors consider the attribute as being of type Text.  It is
   unclear why the type String was chosen for this attribute when the
   type Text would be sufficient.  This attribute SHOULD be treated as
   Text.

2.3.3.  Request Authenticator

   [RFC2866] Section 4.1 states:

      The Request Authenticator of an Accounting-Request contains a 16-
      octet MD5 hash value calculated according to the method described
      in "Request Authenticator" above.

   However, the text does not indicate any action to take when an
   Accounting-Request packet contains an invalid Request Authenticator.
   The following text should be considered to be part of the above
   description:

      The Request Authenticator field MUST contain the correct data, as
      given by the above calculation.  Invalid packets are silently
      discarded.  Note that some early implementations always set the
      Request Authenticator to all zeros.  New implementations of RADIUS
      clients MUST use the above algorithm to calculate the Request
      Authenticator field.  New RADIUS server implementations MUST
      silently discard invalid packets.

2.3.4.  Interim-Accounting-Interval

   [RFC2869] Section 2.1 states:

      It is also possible to statically configure an interim value on
      the NAS itself.  Note that a locally configured value on the NAS
      MUST override the value found in an Access-Accept.

   This requirement may be phrased too strongly.  It is conceivable that
   a NAS implementation has a setting for a "minimum" value of Interim-
   Accounting-Interval, based on resource constraints in the NAS, and
   network loading in the local environment of the NAS.  In such cases,
   the value administratively provisioned in the NAS should not be
   over-ridden by a smaller value from an Access-Accept message.  The
   NAS's value could be over-ridden by a larger one, however.  The
   intent is that the NAS sends accounting information at fixed
   intervals that are short enough so that the potential loss of
   billable revenue is limited, but also that the accounting updates are
   infrequent enough so that the NAS, network, and RADIUS server are not
   overloaded.

2.3.5.  Counter Values in the RADIUS Management Information Base (MIB)

   The RADIUS Authentication and Authorization Client MIB module
   ([RFC2618] [RFC4668]) includes counters of packet statistics.  In the
   descriptive text of the MIB module, formulas are provided for certain
   counter objects.  Implementors have noted apparent inconsistencies in
   the formulas that could result in negative values.

   Since the original MIB module specified in [RFC2618] had been widely
   implemented, the RADEXT WG chose not to change the object definitions
   or to create new ones within the revised MIB module [RFC4668].
   However, this section explains the issues and provides guidance for
   implementors regarding the interpretation of the textual description
   and comments for certain MIB objects.

   The issues raised can be summarized as follows:

   Issue (1):

   -- TotalIncomingPackets = Accepts + Rejects + Challenges +
   UnknownTypes
   --
   -- TotalIncomingPackets - MalformedResponses - BadAuthenticators -
   -- UnknownTypes - PacketsDropped = Successfully received
   --
   -- AccessRequests + PendingRequests + ClientTimeouts =
   -- Successfully Received

   It appears that the value of "Successfully Received" could be
   negative, since various counters are subtracted from
   TotalIncomingPackets that are not included in the calculation of
   TotalIncomingPackets.

   It also appears that "AccessRequests + PendingRequests +
   ClientTimeouts = Successfully Received" should read "AccessRequests +
   PendingRequests + ClientTimeouts = Successfully Transmitted".

   "TotalIncomingPackets" and "Successfully Received" are temporary
   variables, i.e., not objects within the MIB module.  The comment text
   in the MIB modules is intended, therefore, to aid in understanding.
   What's of consequence is the consistency of values of the objects in
   the MIB module, and that does not appear to be impacted by the
   inconsistencies noted above.  It does appear, however, that the
   "Successfully Received" variable should be labeled "Successfully
   Transmitted".

   In addition, the definition of Accept, Reject or Challenge counters
   indicates that they MUST be incremented before the message is
   validated.  If the message is invalid, one of MalformedResponses,
   BadAuthenticators, or PacketsDropped counters will be additionally
   incremented.  In that case, the first two equations are consistent,
   i.e., "Successfully Received" could not be negative.

   Issue (2):

   It appears that the radiusAuthClientPendingRequests counter is
   decremented upon retransmission.  That would mean a retransmitted
   packet is not considered as being pending, although such
   retransmissions can still be considered as being pending requests.

   The definition of this MIB object in [RFC2618] is as follows:

      The number of RADIUS Access-Request packets destined for this
      server that have not yet timed out or received a response.  This
      variable is incremented when an Access-Request is sent and
      decremented due to receipt of an Access-Accept, Access-Reject or
      Access-Challenge, a timeout or retransmission.

   This object purports to count the number of pending request packets.
   It is open to interpretation whether or not retransmissions of a
   request are to be counted as additional pending packets.  In either
   event, it seems appropriate to treat retransmissions consistently
   with respect to incrementing and decrementing this counter.

2.4.  Multiple Filter-ID Attributes

   [RFC2865] Section 5.11 states:

      Zero or more Filter-Id attributes MAY be sent in an Access-Accept
      packet.

   In practice, the behavior of a RADIUS client receiving multiple
   Filter-ID attributes is implementation dependent.  For example, some
   implementations treat multiple instances of the Filter-ID attribute
   as alternative filters; the first Filter-ID attribute having a name
   matching a locally defined filter is used, and the remaining ones are
   discarded.  Other implementations may combine matching filters.

   As a result, the interpretation of multiple Filter-ID attributes is
   undefined within RADIUS.  The sending of multiple Filter-ID
   attributes within an Access-Accept SHOULD be avoided within
   heterogeneous deployments and roaming scenarios, where it is likely
   to produce unpredictable results.

2.5.  Mandatory and Optional Attributes

   RADIUS attributes do not explicitly state whether they are optional
   or mandatory.  Nevertheless, there are instances where RADIUS
   attributes need to be treated as mandatory.

   [RFC2865] Section 1.1 states:

      A NAS that does not implement a given service MUST NOT implement
      the RADIUS attributes for that service.  For example, a NAS that
      is unable to offer Apple Remote Access Protocol (ARAP) service
      MUST NOT implement the RADIUS attributes for ARAP.  A NAS MUST
      treat a RADIUS access-accept authorizing an unavailable service as
      an access-reject instead.

   With respect to the Service-Type attribute, [RFC2865] Section 5.6
   says:

      This Attribute indicates the type of service the user has
      requested, or the type of service to be provided.  It MAY be used
      in both Access-Request and Access-Accept packets.  A NAS is not
      required to implement all of these service types, and MUST treat
      unknown or unsupported Service-Types as though an Access-Reject
      had been received instead.

   [RFC2865] Section 5 states:

      A RADIUS server MAY ignore Attributes with an unknown Type.

      A RADIUS client MAY ignore Attributes with an unknown Type.

   With respect to Vendor-Specific Attributes (VSAs), [RFC2865] Section
   5.26 states:

      Servers not equipped to interpret the vendor-specific information
      sent by a client MUST ignore it (although it may be reported).
      Clients which do not receive desired vendor-specific information
      SHOULD make an attempt to operate without it, although they may do
      so (and report they are doing so) in a degraded mode.

   It is possible for either a standard attribute or a VSA to represent
   a request for an unavailable service.  However, where the Type,
   Vendor-ID, or Vendor-Type is unknown, a RADIUS client will not know
   whether or not the attribute defines a service.

   In general, it is best for a RADIUS client to err on the side of
   caution.  On receiving an Access-Accept including an attribute of
   known Type for an unimplemented service, a RADIUS client MUST treat
   it as an Access-Reject, as directed in [RFC2865] Section 1.1.  On
   receiving an Access-Accept including an attribute of unknown Type, a
   RADIUS client SHOULD assume that it is a potential service
   definition, and treat it as an Access-Reject.  Unknown VSAs SHOULD be
   ignored by RADIUS clients.

   In order to avoid introducing changes in default behavior, existing
   implementations that do not obey this recommendation should make the
   behavior configurable, with the legacy behavior being enabled by
   default.  A configuration flag such as "treat unknown attributes as
   reject" can be exposed to the system administrator.  If the flag is
   set to true, then Access-Accepts containing unknown attributes are
   treated as Access-Rejects.  If the flag is set to false, then unknown
   attributes in Access-Accepts are silently ignored.

   On receiving a packet including an attribute of unknown Type, RADIUS
   authentication server implementations SHOULD ignore such attributes.
   However, RADIUS accounting server implementations typically do not
   need to understand attributes in order to write them to stable
   storage or pass them to the billing engine.  Therefore, accounting
   server implementations SHOULD be equipped to handle unknown
   attributes.

   To avoid misinterpretation of service requests encoded within VSAs,
   RADIUS servers SHOULD NOT send VSAs containing service requests to
   RADIUS clients that are not known to understand them.  For example, a
   RADIUS server should not send a VSA encoding a filter without
   knowledge that the RADIUS client supports the VSA.

2.6.  Interpretation of Access-Reject

2.6.1.  Improper Use of Access-Reject

   The intent of an Access-Reject is to deny access to the requested
   service.  [RFC2865] Section 2 states:

      If any condition is not met, the RADIUS server sends an "Access-
      Reject" response indicating that this user request is invalid.  If
      desired, the server MAY include a text message in the Access-
      Reject which MAY be displayed by the client to the user.  No other
      Attributes (except Proxy-State) are permitted in an Access-Reject.

   This text makes it clear that RADIUS does not allow the provisioning
   of services within an Access-Reject.  If the desire is to allow
   limited access, then an Access-Accept can be sent with attributes
   provisioning limited access.  Attributes within an Access-Reject are
   restricted to those necessary to route the message (e.g., Proxy-
   State), attributes providing the user with an indication that access
   has been denied (e.g., an EAP-Message attribute containing an EAP-
   Failure), or attributes conveying an error message (e.g., a Reply-
   Message or Error-Cause attribute).

   Unfortunately, there are examples where this requirement has been
   misunderstood.  [RFC2869] Section 2.2 states:

      If that authentication fails, the RADIUS server should return an
      Access-Reject packet to the NAS, with optional Password-Retry and
      Reply-Messages attributes.  The presence of Password-Retry
      indicates the ARAP NAS MAY choose to initiate another challenge-
      response cycle...

   This paragraph is problematic from two perspectives.  Firstly, a
   Password-Retry attribute is being returned in an Access-Reject; this
   attribute does not fit into the categories established in [RFC2865].
   Secondly, an Access-Reject packet is being sent in the context of a
   continuing authentication conversation; [RFC2865] requires use of an
   Access-Challenge for this.  [RFC2869] uses the phrase "challenge-
   response" to describe this use of Access-Reject, indicating that the
   semantics of Access-Challenge are being used.

   [RFC2865] Section 4.4 addresses the semantics of Access-Challenge
   being equivalent to Access-Reject in some cases:

      If the NAS does not support challenge/response, it MUST treat an
      Access-Challenge as though it had received an Access-Reject
      instead.

   While it is difficult to correct existing deployments of [RFC2869],
   we make the following recommendations:

      [1]   New RADIUS specifications and implementations MUST NOT use
            Access-Reject where the semantics of Access-Challenge are
            intended.

      [2]   Access-Reject MUST mean denial of access to the requested
            service.  In response to an Access-Reject, the NAS MUST NOT
            send any additional Access-Request packets for that user
            session.

      [3]   New deployments of ARAP [RFC2869] SHOULD use Access-
            Challenge instead of Access-Reject packets in the
            conversations described in [RFC2869] Section 2.2.

   We also note that the table of attributes in [RFC2869] Section 5.19
   has an error for the Password-Retry attribute.  It says:

   Request  Accept  Reject  Challenge   #    Attribute
   0        0       0-1     0           75   Password-Retry

   However, the text in [RFC2869], Section 2.3.2 says that Password-
   Retry can be included within an Access-Challenge packet for EAP
   authentication sessions.  We recommend a correction to the table that
   removes the "0-1" from the Reject column, and moves it to the
   Challenge column.  We also add a "Note 2" to follow the existing
   "Note 1" in the document to clarify the use of this attribute.

   Request  Accept  Reject  Challenge   #    Attribute
   0        0       0       0-1         75   Password-Retry [Note 2]

   [Note 2] As per RFC 3579, the use of the Password-Retry in EAP
   authentications is deprecated.  The Password-Retry attribute can be
   used only for ARAP authentication.

2.6.2.  Service Request Denial

   RADIUS has been deployed for purposes outside network access
   authentication, authorization, and accounting.  For example, RADIUS
   has been deployed as a "back-end" for authenticating Voice Over IP
   (VOIP) connections, Hypertext Transfer Protocol (HTTP) sessions
   (e.g., Apache), File Transfer Protocol (FTP) sessions (e.g.,
   proftpd), and machine logins for multiple operating systems (e.g.,
   bsdi, pam, and gina).  In those contexts, an Access-Reject sent to
   the RADIUS client MUST be interpreted as a rejection of the request
   for service, and the RADIUS client MUST NOT offer that service to the
   user.

   For example, when an authentication failure occurs in the context of
   an FTP session, the normal semantics for rejecting FTP services
   apply.  The rejection does not necessarily cause the FTP server to
   terminate the underlying TCP connection, but the FTP server MUST NOT
   offer any services protected by user authentication.

   Users may request multiple services from the NAS.  Where those
   services are independent, the deployment MUST treat the RADIUS
   sessions as being independent.

   For example, a NAS may offer multi-link services where a user may
   have multiple simultaneous network connections.  In that case, an
   Access-Reject for a later multi-link connection request does not
   necessarily mean that earlier multi-link connections are torn down.
   Similarly, if a NAS offers both dialup and VOIP services, the
   rejection of a VOIP attempt does not mean that the dialup session is
   torn down.

2.7.  Addressing

2.7.1.  Link-Local Addresses

   Since Link-Local addresses are unique only on the local link, if the
   NAS and RADIUS server are not on the same link, then an IPv6 Link-
   Local address [RFC4862] or an IPv4 Link-Local Address [RFC3927]
   cannot be used to uniquely identify the NAS.  A NAS SHOULD NOT
   utilize a link-scope address within a NAS-IPv6-Address or NAS-IP-
   Address attribute.  A RADIUS server receiving a NAS-IPv6-Address or
   NAS-IP-Address attribute containing a Link-Local address SHOULD NOT
   count such an attribute toward satisfying the requirements of
   [RFC3162] Section 2.1:

      NAS-IPv6-Address and/or NAS-IP-Address MAY be present in an
      Access-Request packet; however, if neither attribute is present
      then NAS-Identifier MUST be present.

2.7.2.  Multiple Addresses

   There are situations in which a RADIUS client or server may have
   multiple addresses.  For example, a dual stack host can have both
   IPv4 and IPv6 addresses; a host that is a member of multiple VLANs
   could have IPv4 and/or IPv6 addresses on each VLAN; a host can have
   multiple IPv4 or IPv6 addresses on a single interface.  However,
   [RFC2865] Section 5.44 only permits zero or one NAS-IP-Address
   attributes within an Access-Request, and [RFC3162] Section 3 only
   permits zero or one NAS-IPv6-Address attributes within an Access-
   Request.  When a NAS has more than one global address and no ability
   to determine which is used for identification in a particular
   request, it is RECOMMENDED that the NAS include the NAS-Identifier
   attribute in an Access-Request in order to identify itself to the
   RADIUS server.

   [RFC2865] Section 3 states:

      A RADIUS server MUST use the source IP address of the RADIUS UDP
      packet to decide which shared secret to use, so that RADIUS
      requests can be proxied.

   Therefore, if a RADIUS client sends packets from more than one source
   address, a shared secret will need to be configured on both the
   client and server for each source address.

2.8.  Idle-Timeout

   With respect to the Idle-Timeout attribute, [RFC2865] Section 5.28
   states:

      This Attribute sets the maximum number of consecutive seconds of
      idle connection allowed to the user before termination of the
      session or prompt.  This Attribute is available to be sent by the
      server to the client in an Access-Accept or Access-Challenge.

   [RFC3580] Section 3.12 states:

      The Idle-Timeout attribute is described in [RFC2865].  For IEEE
      802 media other than 802.11 the media are always on.  As a result
      the Idle-Timeout attribute is typically only used with wireless
      media such as IEEE 802.11.  It is possible for a wireless device
      to wander out of range of all Access Points.  In this case, the
      Idle-Timeout attribute indicates the maximum time that a wireless
      device may remain idle.

   In the above paragraphs "idle" may not necessarily mean "no traffic";
   the NAS may support filters defining what traffic is included in the
   idle time determination.  As a result, an "idle connection" is
   defined by local policy in the absence of other attributes.

2.9.  Unknown Identity

   [RFC3748] Section 5.1 states:

      If the Identity is unknown, the Identity Response field should be
      zero bytes in length.

   However, [RFC2865] Section 5.1 describes the User-Name attribute as
   follows:

      The String field is one or more octets.

   How should the RADIUS client behave if it receives an EAP-
   Response/Identity that is zero octets in length?

   [RFC2865] Section 5.1 states:

      This Attribute indicates the name of the user to be authenticated.
      It MUST be sent in Access-Request packets if available.

   This suggests that the User-Name attribute may be omitted if it is
   unavailable.

   However, [RFC3579] Section 2.1 states:

      In order to permit non-EAP aware RADIUS proxies to forward the
      Access-Request packet, if the NAS initially sends an EAP-
      Request/Identity message to the peer, the NAS MUST copy the
      contents of the Type-Data field of the EAP-Response/Identity
      received from the peer into the User-Name attribute and MUST
      include the Type-Data field of the EAP-Response/Identity in the
      User-Name attribute in every subsequent Access-Request.

   This suggests that the User-Name attribute should contain the
   contents of the Type-Data field of the EAP-Response/Identity, even if
   it is zero octets in length.

   Note that [RFC4282] does not permit a Network Access Identifier (NAI)
   of zero octets, so that an EAP-Response/Identity with a Type-Data
   field of zero octets MUST NOT be construed as a request for privacy
   (e.g., anonymous NAI).

   When a NAS receives an EAP-Response/Identity with a Type-Data field
   that is zero octets in length, it is RECOMMENDED that it either omit
   the User-Name attribute in the Access-Request or include the
   Calling-Station-Id in the User-Name attribute, along with a Calling-
   Station-Id attribute.

2.10.  Responses After Retransmissions

   Some implementations do not correctly handle the receipt of RADIUS
   responses after retransmissions. [RFC2865] Section 2.5 states:

      If the NAS is retransmitting a RADIUS request to the same server
      as before, and the attributes haven't changed, you MUST use the
      same Request Authenticator, ID, and source port.  If any
      attributes have changed, you MUST use a new Request Authenticator
      and ID.

   Note that changing the Request ID for a retransmission may have
   undesirable side effects.  Since RADIUS does not have a clear
   definition of a "session", it is perfectly valid for a RADIUS server
   to treat a retransmission as a new session request, and to reject it
   due to, for example, the enforcement of restrictions on multiple
   simultaneous logins.

   In that situation, the NAS may receive a belated Access-Accept for
   the first request, and an Access-Reject for the retransmitted
   request, both of which apply to the same "session".

   We suggest that the contents of Access-Request packets SHOULD NOT be
   changed during retransmissions.  If they must be changed due to the
   inclusion of an Event-Timestamp attribute, for example, then
   responses to earlier transmissions MUST be silently discarded.  Any
   response to the current request MUST be treated as the definitive
   response, even if as noted above, it disagrees with earlier
   responses.

   This problem can be made worse by implementations that use a fixed
   retransmission timeout (30 seconds is common).  We reiterate the
   suggestions in Section 2.1 about using congestive backoff.  In that
   case, responses to earlier transmissions MAY be used as data points
   for congestive backoff, even if their contents are discarded.

2.11.  Framed-IPv6-Prefix

   [RFC3162] Section 2.3 says:

      This Attribute indicates an IPv6 prefix (and corresponding route)
      to be configured for the user.  It MAY be used in Access-Accept
      packets, and can appear multiple times.  It MAY be used in an
      Access-Request packet as a hint by the NAS to the server that it
      would prefer these prefix(es), but the server is not required to
      honor the hint.  Since it is assumed that the NAS will plumb a
      route corresponding to the prefix, it is not necessary for the
      server to also send a Framed-IPv6-Route attribute for the same
      prefix.

   An Internet Service Provider (ISP) may desire to support Prefix
   Delegation [RFC4818] at the same time that it would like to assign a
   prefix for the link between the NAS and the user.  The intent of the
   paragraph was to enable the NAS to advertise the prefix (such as via
   a Router Advertisement).  If the Framed-Routing attribute is used, it
   is also possible that the prefix would be advertised in a routing
   protocol such as Routing Information Protocol Next Generation
   (RIPNG).  RFC 2865 Section 5.10 describes the purpose of Framed-
   Routing:

      This Attribute indicates the routing method for the user, when the
      user is a router to a network.  It is only used in Access-Accept
      packets.

   The description of the Prefix-Length field in RFC 3162 indicates
   excessively wide latitude:

      The length of the prefix, in bits.  At least 0 and no larger than
      128.

   This length appears too broad, because it is not clear what a NAS
   should do with a prefix of greater granularity than /64.  For
   example, the Framed-IPv6-Prefix may contain a /128.  This does not
   imply that the NAS should assign an IPv6 address to the end user,
   because RFC 3162 already defines a Framed-IPv6-Identifier attribute
   to handle the Identifier portion.

   It appears that the Framed-IPv6-Prefix is used for the link between
   the NAS and Customer Premises Equipment (CPE) only if a /64 prefix is
   assigned.  When a /64 or larger prefix is sent, the intent is for the
   NAS to send a routing advertisement containing the information
   present in the Framed-IPv6-Prefix attribute.

   The CPE may also require a delegated prefix for its own use, if it is
   decrementing the Hop Limit field of IP headers.  In that case, it
   should be delegated a prefix by the NAS via the Delegated-IPv6-Prefix
   attribute [RFC4818].  If the CPE is not decrementing Hop Limit, it
   does not require a delegated prefix.

3.  Security Considerations

   The contents of the State attribute are available to both the RADIUS
   client and observers of the RADIUS protocol.  RADIUS server
   implementations should ensure that the State attribute does not
   disclose sensitive information to a RADIUS client or third parties
   observing the RADIUS protocol.

   The cache mechanism described in Section 2.2.2 is vulnerable to
   attacks when Access-Request packets do not contain a Message-
   Authenticator attribute.  If the server accepts requests without a
   Message-Authenticator, then RADIUS packets can be trivially forged by
   an attacker.  Cache entries can then be forcibly expired, negating
   the utility of the cache.  This attack can be mitigated by following
   the suggestions in [RFC3579] Section 4, or by requiring the presence
   of Message-Authenticator, as described in Sections 2.1.1 and 2.2.2.

   Since this document describes the use of RADIUS for purposes of
   authentication, authorization, and accounting in a wide variety of
   networks, applications using these specifications are vulnerable to
   all of the threats that are present in other RADIUS applications.
   For a discussion of these threats, see [RFC2865], [RFC2607],
   [RFC3162], [RFC3579], and [RFC3580].

4.  References

4.1.  Normative References

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

   [RFC2865]   Rigney, C., Willens, S., Rubens, A., and W. Simpson,
               "Remote Authentication Dial In User Service (RADIUS)",
               RFC 2865, June 2000.

   [RFC4818]   Salowey, J. and R. Droms, "RADIUS Delegated-IPv6-Prefix
               Attribute", RFC 4818, April 2007.

4.2.  Informative References

   [RFC2607]   Aboba, B. and J. Vollbrecht, "Proxy Chaining and Policy
               Implementation in Roaming", RFC 2607, June 1999.

   [RFC2618]   Aboba, B. and G. Zorn, "RADIUS Authentication Client
               MIB", RFC 2618, June 1999.

   [RFC2866]   Rigney, C., "RADIUS Accounting", RFC 2866, June 2000.

   [RFC2869]   Rigney, C., Willats, W., and P. Calhoun, "RADIUS
               Extensions", RFC 2869, June 2000.

   [RFC3162]   Aboba, B., Zorn, G., and D. Mitton, "RADIUS and IPv6",
               RFC 3162, August 2001.

   [RFC3315]   Droms, R., Ed., Bound, J., Volz, B., Lemon, T., Perkins,
               C., and M. Carney, "Dynamic Host Configuration Protocol
               for IPv6 (DHCPv6)", RFC 3315, July 2003.

   [RFC3576]   Chiba, M., Dommety, G., Eklund, M., Mitton, D., and B.
               Aboba, "Dynamic Authorization Extensions to Remote
               Authentication Dial In User Service (RADIUS)", RFC 3576,
               July 2003.

   [RFC3579]   Aboba, B. and P. Calhoun, "RADIUS (Remote Authentication
               Dial In User Service) Support For Extensible
               Authentication Protocol (EAP)", RFC 3579, September 2003.

   [RFC3580]   Congdon, P., Aboba, B., Smith, A., Zorn, G., and J.
               Roese, "IEEE 802.1X Remote Authentication Dial In User
               Service (RADIUS) Usage Guidelines", RFC 3580, September
               2003.

   [RFC3748]   Aboba, B., Blunk, L., Vollbrecht, J., Carlson, J., and H.
               Levkowetz, Ed., "Extensible Authentication Protocol
               (EAP)", RFC 3748, June 2004.

   [RFC3927]   Cheshire, S., Aboba, B., and E. Guttman, "Dynamic
               Configuration of IPv4 Link-Local Addresses", RFC 3927,
               May 2005.

   [RFC4282]   Aboba, B., Beadles, M., Arkko, J., and P. Eronen, "The
               Network Access Identifier", RFC 4282, December 2005.

   [RFC4668]   Nelson, D., "RADIUS Authentication Client MIB for IPv6",
               RFC 4668, August 2006.

   [RFC4669]   Nelson, D., "RADIUS Authentication Server MIB for IPv6",
               RFC 4669, August 2006.

   [RFC4862]   Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless
               Address Autoconfiguration", RFC 4862, September 2007.

   [PANA]      Forsberg, D., Ohba, Y.,Ed., Patil, B., Tschofenig, H.,
               and A. Yegin, "Protocol for Carrying Authentication for
               Network Access (PANA)", Work in Progress.

Acknowledgments

   The authors would like to acknowledge Glen Zorn and Bernard Aboba for
   contributions to this document.

   The alternate algorithm to [RFC3579] Section 2.6.1 that is described
   in Section 2.1.2 of this document was designed by Raghu Dendukuri.

   The text discussing retransmissions in Section 2.2.1 is taken with
   minor edits from Section 9 of" Protocol for Carrying Authentication
   for Network Access (PANA)" [PANA].

   Alan DeKok wishes to acknowledge the support of Quiconnect Inc.,
   where he was employed during much of the work on this document.

   David Nelson wishes to acknowledge the support of Enterasys Networks,
   where he was employed during much of the work on this document.

Authors' Addresses

   David B. Nelson
   Elbrys Networks, Inc.
   75 Rochester Ave., Unit 3
   Portsmouth, N.H. 03801 USA

   Phone: +1.603.570.2636
   EMail: dnelson@elbrysnetworks.com


   Alan DeKok
   The FreeRADIUS Server Project
   http://freeradius.org/

   EMail: aland@freeradius.org

Full Copyright Statement

   Copyright (C) The IETF Trust (2007).

   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
PROBLEMRADIUS has been deployed for years and its specifications contain ambiguities, errors and gaps, so implementations of the same protocol do not always behave the same way.
MECHANISMThe RFC walks through the problems seen in practice, from the State attribute to retransmission timers, duplicate detection, accounting attributes and the meaning of Access-Reject, and states what each side should do instead.
WHY IT MATTERSThe document clarifies and updates four earlier RADIUS specifications and gives implementers concrete rules that make different RADIUS deployments behave more alike.

§1Why RADIUS Implementations Disagree

RADIUS clients and servers are deployed in growing numbers, and the original specifications leave room for different readings. This document describes the issues that show up in practice and suggests fixes, clarifying ambiguities and errors in the earlier RADIUS specifications where that applies.

The terms used throughout come from the protocol itself. A Network Access Server (NAS) is the device that gives a user access to the network; it is also the authenticator in IEEE 802.1X terms, or the RADIUS client. A service is what the NAS offers the user, such as network access over 802.11 or over PPP. Each service the NAS provides is a session, which starts when service is first provided and ends when service stops, and each session generates its own start and stop accounting record. To silently discard a packet means to drop it without further processing, though the implementation SHOULD be able to log the error and record the event in a statistics counter.

Different teams built RADIUS servers and clients from the same written specification, and the specification was loose in places. This RFC gathers the disagreements that came out of that and gives one answer for each.

§2.1.1The State Attribute and Multi-Round Logins

The State attribute ties several Access-Request and Access-Challenge packets into one authentication session. The server sends it in an Access-Challenge, and the client MUST send it back unmodified in the Access-Request that answers the challenge.

Some clients did not use State to tell a restarted Extensible Authentication Protocol (EAP) exchange apart from the continuation of an ongoing one. The RFC therefore says that Access-Requests which are part of an ongoing Access-Request and Access-Challenge process SHOULD contain a State attribute, and that servers implementing authentication mechanisms that need several rounds SHOULD include one in their Access-Challenge packets.

The rules on when State must, must not and should not appear are precise. Only values that the client received from a server in an Access-Accept, Access-Challenge, CoA-Request or Disconnect-Request may be used. An Access-Request that starts a new or restarted authentication run MUST NOT contain State, even if the same user and port received one earlier. An Access-Request with a Service-Type of Authorize Only (17) MUST contain State, one with a Service-Type of Call Check (10) SHOULD NOT contain it, and any other Access-Request that performs authorization checks MUST contain State.

Call Check is the case of pre-screening on the endpoint identifier alone, such as a phone number or a Media Access Control (MAC) address. The NAS has no way to obtain a suitable State value there, and reusing the User-Name and User-Password with the same value, such as a MAC address, is NOT RECOMMENDED, because it hands an attacker both the clear text and the cipher text of the password field.

Any Access-Request that performs authorization checks SHOULD carry a Message-Authenticator attribute. A response to such a request MUST NOT contain confidential information about any user unless the request carried a State attribute, in which case the server MAY return confidential information about that user and MUST NOT return it about any other user. An authorization check without a State attribute MUST be answered with an Access-Reject.

The State attribute is a label the server hands out and the client returns unchanged. It tells the server that a series of messages belong to one login attempt, so the server can tell a new attempt from a continuation.

ACCESS-REQUEST AND ACCESS-CHALLENGE SEQUENCE (ILLUSTRATIVE, NOT FROM THE RFC)
NAS (client)RADIUS server
  1. Access-RequestStarts the authentication.
  2. Access-Challenge with StateThe server hands out the State value.
  3. Access-Request with the same StateState is sent back unmodified.
  4. Access-AcceptThe session is authorized.
SERVICE-TYPE VALUES AND THE STATE ATTRIBUTE
  • 17Authorize Only — The Access-Request MUST contain a State attribute.
  • 10Call Check — The Access-Request SHOULD NOT contain a State attribute.
  • 75Password-Retry — Belongs in an Access-Challenge, not in an Access-Reject.

§2.2.1Retransmission Timers and Congestion Backoff

RADIUS clients retransmit requests, and some implementations do it far too eagerly, with timeouts of one second or less and no congestion backoff. At scale this leads to congestion collapse. The RFC's example is a network with 3,000 NAS devices that all use a fixed one second timer: after a power failure they generate 3,000 RADIUS Access-Requests per second, which is enough to overwhelm most RADIUS servers.

The suggested fixes are jitter, so that clients do not all retry at the same moment, and congestive backoff, which the RFC says implementations SHOULD support even though a complex algorithm is not required. The timers follow the model used by the Dynamic Host Configuration Protocol for IPv6, and the same variables are borrowed from it.

Five variables describe the behavior. RT is the retransmission timeout. IRT is the initial retransmission time, with a default of 2 seconds. MRC is the maximum retransmission count, a default of 5 attempts. MRT is the maximum retransmission time, a default of 16 seconds. MRD is the maximum retransmission duration, a default of 30 seconds. RAND is the randomization factor, a random number with a uniform distribution between -0.1 and +0.1. The random number does not have to be cryptographically sound, but the algorithm SHOULD produce a different sequence each time it runs.

The first transmission uses RT = IRT + RAND*IRT. Each later retransmission uses RT = 2*RTprev + RAND*RTprev. If RT exceeds MRT, it becomes MRT + RAND*MRT. A value of zero for MRT means there is no upper limit. MRD MUST be set and SHOULD be between 5 and 30 seconds. The exchange fails when the sender has transmitted the message MRC times or when MRD seconds have passed, whichever comes first. For Accounting-Request packets the defaults for MRC, MRD and MRT SHOULD be zero, so that accounting information is not discarded before it is recorded.

A client that gets no answer retries, and the wait between retries grows each time. A small random amount is added to each wait so that thousands of clients do not all retry at the same instant.

THE FIVE RETRANSMISSION VARIABLES AND THEIR DEFAULTS
  • IRTInitial retransmission time, a default of 2 seconds.
  • MRCMaximum retransmission count, a default of 5 attempts.
  • MRTMaximum retransmission time, a default of 16 seconds.
  • MRDMaximum retransmission duration, a default of 30 seconds.
  • RANDRandomization factor, uniform between -0.1 and +0.1.

§2.2.2Duplicate Detection and Cached Responses

RADIUS runs over the User Datagram Protocol (UDP), so a retransmitted request can arrive twice, and packets can arrive in a different order from the one in which they were sent. The server can recognize a duplicate by the client source IP address, source UDP port and Identifier within a short span of time.

Servers MUST implement duplicate detection for Access-Request packets, and MUST also cache the responses they send, whether Access-Accept, Access-Challenge or Access-Reject. A valid duplicate for which a response has already been sent MUST be answered by resending the original response without reprocessing the request. A duplicate for which no response has yet been sent MUST be silently discarded. Without this, a server can process one authentication twice and conclude that a user logged in twice.

Cache entries SHOULD be purged after a time that is no less than 5 seconds and no more than 30 seconds, because after about 30 seconds most clients and users have given up. Entries MUST also be purged when a valid Access-Request matches a cached one in source address, source port, Identifier and receiving socket but carries a different Request Authenticator. A request that contains a Message-Authenticator attribute is processed as described in RFC 3580, and packets with an invalid Message-Authenticator MUST NOT affect the cache. Requests without a Message-Authenticator always affect the cache even though they can be forged trivially, so servers may be configured to require that attribute and to discard requests that lack it. Clients SHOULD include a Message-Authenticator in every Access-Request.

On the client side, Identifiers MUST NOT be reused for a source IP address and source UDP port until a valid response arrives or the request times out, and clients SHOULD allocate them by a least recently used method. Clients do not have to detect duplicates: they process the first response with a valid Response Authenticator and silently discard any later response, exactly as they would an unsolicited one.

If a server gets the same request twice, it must not run the authentication twice. It remembers the answer it already gave and sends that answer again, so the user is not counted as having logged in twice.

§2.3Accounting Attributes and Their Types

Several accounting points are clarifications of earlier text. RFC 2866 says that the octet, packet, session time and terminate cause attributes can only appear in an Accounting-Request whose Acct-Status-Type is Stop, while RFC 2869 envisages an Interim-Update record carrying all of them except the terminate cause. The RFC resolves the conflict in favour of RFC 2869: those attributes are allowed in an interim accounting record.

Two attributes are described with the wrong type. RFC 2866 gives Acct-Session-Id as a String but then says it should be a string of UTF-8 encoded characters; the RFC calls this a typographical error and says Acct-Session-Id is of type Text. The Acct-Multi-Session-Id attribute is also defined as a String, and its summary line mistakenly refers to Acct-Session-Id. The RFC says this attribute SHOULD be treated as Text.

For the Request Authenticator of an Accounting-Request, the RFC adds text that the earlier specification lacked. The field MUST contain the correct data, invalid packets are silently discarded, and although some early implementations always set the field to all zeros, new clients MUST use the correct algorithm and new servers MUST silently discard invalid packets.

A locally configured Interim-Accounting-Interval on the NAS is described too strongly elsewhere. A NAS may hold a minimum value based on its own resources, and that value should not be overridden by a smaller one from an Access-Accept, though a larger one may override it. The intent is that accounting updates arrive often enough to limit lost billing but seldom enough to avoid overloading the network.

The counter formulas in the RADIUS Management Information Base (MIB) have inconsistencies. The variable named Successfully Received can come out negative, and the equation that adds AccessRequests, PendingRequests and ClientTimeouts should end in Successfully Transmitted rather than Successfully Received. The RFC explains the issues without changing the object definitions, and notes that retransmissions should be treated consistently when counting pending requests.

Some accounting attributes were described with the wrong type or with contradictory rules about when they may appear. The RFC says which reading is correct and adds the missing rules for invalid accounting packets.

§2.6What an Access-Reject Must Mean

An Access-Reject denies access to the requested service. It cannot be used to provision services: the only attributes it may carry are those needed to route the message, such as Proxy-State, those that tell the user access was denied, such as an EAP-Message holding an EAP-Failure, and those that carry an error message, such as Reply-Message or Error-Cause. If limited access is wanted, the server sends an Access-Accept with attributes that provision it.

The RFC finds that this rule has been misunderstood. RFC 2869 describes an Access-Reject carrying a Password-Retry attribute in the middle of a continuing authentication conversation, where an Access-Challenge is what the semantics call for. The RFC makes three recommendations: new specifications and implementations MUST NOT use Access-Reject where Access-Challenge semantics are intended; Access-Reject MUST mean denial of access, and the NAS MUST NOT send any further Access-Request for that user session; and new deployments of the ARAP extension SHOULD use Access-Challenge in the conversations RFC 2869 describes. It also corrects the attribute table of RFC 2869, moving Password-Retry (attribute 75) from the Reject column to the Challenge column, and notes that its use in EAP authentication is deprecated and that it can be used only for ARAP authentication.

RADIUS is also used well beyond network access, as a back end for Voice over IP, HTTP, FTP and machine logins. In those cases an Access-Reject MUST be read as a rejection of the request for service, and the client MUST NOT offer that service to the user. Where a user asks for several services that are independent, the deployment MUST treat the RADIUS sessions as independent, so a rejected multi-link connection does not tear down earlier ones, and a rejected Voice over IP attempt does not end a dialup session.

An Access-Reject is a plain refusal and nothing else. It must not be used to continue a conversation, because the server has no way to say what the client should do next. A refusal ends that request.

§2.7Addressing and Other Loose Ends

Link-local addresses are unique only on the local link, so a NAS SHOULD NOT use one in a NAS-IPv6-Address or NAS-IP-Address attribute, and a server SHOULD NOT count such an attribute towards the requirement that one of those attributes or a NAS-Identifier be present. A NAS with more than one global address, which a dual stack host or a host on several VLANs will have, is RECOMMENDED to include the NAS-Identifier attribute, because the address attributes allow only one value. The server MUST use the source IP address of the RADIUS UDP packet to decide which shared secret to use, so a client that sends from more than one source address needs a shared secret for each of them.

Other points are settled briefly. The Idle-Timeout attribute sets the maximum number of consecutive seconds of idle connection allowed before the session ends or the user is prompted, and idle is defined by local policy in the absence of other attributes, since the NAS may count only the traffic its filters include. For an EAP-Response/Identity with a zero length Type-Data field, the NAS is RECOMMENDED either to omit the User-Name attribute or to put the Calling-Station-Id in it and send a Calling-Station-Id attribute as well; such an identity is not a request for privacy, since RFC 4282 does not allow a zero length Network Access Identifier.

When a response arrives after retransmissions, the contents of an Access-Request SHOULD NOT change between transmissions. If they must change, for example to add an Event-Timestamp attribute, responses to earlier transmissions MUST be silently discarded and the response to the current request is the definitive one. The RFC notes that a fixed retransmission timeout of 30 seconds is common and repeats the earlier advice to use congestive backoff.

Finally, the Framed-IPv6-Prefix attribute carries a prefix and route to configure for the user. The allowed prefix length of up to 128 bits is too broad, because it is unclear what a NAS should do with a prefix more granular than a /64. The RFC concludes that the attribute is meant for the link between the NAS and customer premises equipment when a /64 or larger prefix is assigned, and that a prefix the customer equipment delegates for its own use belongs in the Delegated-IPv6-Prefix attribute instead.

These are the smaller questions that had no single agreed answer: which address identifies the server, how long a client waits for an answer, what to do when the user name is empty, and how a prefix for the customer link should be treated.

§3Security Considerations

The contents of the State attribute are visible both to the RADIUS client and to anyone watching the protocol, so server implementations should make sure that State does not disclose sensitive information.

The duplicate detection cache described in Section 2.2.2 is vulnerable when Access-Request packets do not carry a Message-Authenticator attribute. If the server accepts requests without one, RADIUS packets can be forged trivially, and cache entries can be forcibly expired, which removes the value of the cache. The RFC points to the mitigations in RFC 3579, or to requiring the presence of a Message-Authenticator as described in Sections 2.1.1 and 2.2.2.

Since RADIUS is used for authentication, authorization and accounting in many kinds of network and application, deployments are exposed to all of the threats that apply to other RADIUS applications. The RFC refers to RFC 2865, RFC 2607, RFC 3162, RFC 3579 and RFC 3580 for that discussion.

The State value travels in the clear, so it must not carry anything secret. The duplicate cache is also weaker than it looks unless every request is signed with a Message-Authenticator.

§9References