<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dekok-protocol-error-00" category="bcp" consensus="true" submissionType="IETF" updates="2865, 2866, 5176, 6613, 6614, 7360, 7930" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.24.0 -->
  <front>
    <title abbrev="Protocol-Error">Standardising Protocol-Error</title>
    <seriesInfo name="Internet-Draft" value="draft-dekok-protocol-error-00"/>
    <author initials="A." surname="DeKok" fullname="Alan DeKok">
      <organization>InkBridge Networks</organization>
      <address>
        <email>aland@inkbridgenetworks.com</email>
      </address>
    </author>
    <date year="2025" month="June" day="24"/>
    <area>Internet</area>
    <workgroup>RADEXT Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 48?>

<t>We extend and standardise the Protocol-Error packet Code, first
defined in RFC 7930 for the Remote Authentication Dial In User Service
(RADIUS) protocol.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-dekok-protocol-error/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        RADEXT Working Group mailing list (<eref target="mailto:radext@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/radext/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/radext/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/freeradius/protocol-error.git"/>.</t>
    </note>
  </front>
  <middle>
    <?line 54?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Remote Authentication Dial In User Service (RADIUS) protocol is
designed as a request / response protocol, where clients send requests
to servers, and servers send responses to clients.  There are a few
different types of requests defined, and each type of request has one
or more associated valid responses.  However, these requests and
responses are limited to indicating success or failure of the
requested action, such as authentication or accounting.</t>
      <t>There is no way for clients and servers to exchange information about
their state, or their inability to perform the requested action.
Instead, for actions such as authentication, servers can only reply
with accept, reject, or simply fail to respond to the request.  There
is no way for the server to respond to a client with an error
indicating "invalid request" or "unable to answer this request".</t>
      <t>The result is that when the server experiences a failure, it either
stops responding to requests, or returns a type-specific response
which is arguably wrong.  Depending on the kind of failure, the server
may stop responding to only one request, or else the server could stop
responding to all requests.  The client then has to make sense of the
situation where some requests get a positive acknowledgement (ACK)
response, other requests get negative acknowledgement (NAK) response,
and other requests simply never see a response.</t>
      <t>This failure for the server to respond meaningfully means that the
client has no way of knowing if the server is slow, is off line, or
else if the server is a proxy and one of the next hops has failed.
The only course of action that the client can take is to guess as what
it should do when the server fails to respond.  Such guesses are
likely to be wrong.  Incorrect decisions based on incomplete knowledge
contribute to network instability and to congestive collapse.</t>
      <t>This failure of RADIUS to provide for protocol level signaling has
caused issues with deployments for decades.  The network as a whole
operates not because the underlying protocol is robust, but instead
because of local workarounds built by implementers and operators.  It
is time to address this deficiency.</t>
      <t>This document standardises the Protocol-Error packet code, which was
first defined as an experimental code in <xref section="4" sectionFormat="comma" target="RFC7930"/>.  This
packet code allows for servers to reply to any request with a
Protocol-Error packet, which serves as an explicit protocol layer
signal that the server has received a request, but is unable to
process it.  The Protocol-Error packet contains an Error-Cause
attribute (<xref section="3.1" sectionFormat="comma" target="RFC3576"/>) which indicates whether the error
is limited to just this packet or to the connection as a whole.  The
Error-Cause attribute also indicates whether this error is temporary
or permanent.</t>
      <t>Explicitly signaling errors for protocol-layer failures increases the
stability of the network, and decreases the likelihood of congestive
collapse on failure.</t>
      <t>Where <xref target="RFC7930"/> gives a very short description of the Protocol-Error
packet Code, this document gives a more detailed definition.  It
explains the reasons for standardising Protocol-Error, fully defines
the behavior of clients and servers with respect to Protocol-Error,
and gives suggestions for migrations paths for implementations and
deployments.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?>
      </t>
    </section>
    <section anchor="review-and-motivation">
      <name>Review and Motivation</name>
      <t>This specification defines an extension to the RADIUS protocol which
makes significant changes to how the protocol operates in the event of
a failure.  In order to motivate this change, we need to describe the
historic issues with the protocol.  We describe how the request /
response nature of RADIUS is not, in fact, fully met: only some packet
types have a NAK response defined, and there are other cases where the
existing standards require that valid requests do not get any response
at all.</t>
      <t>The result is that the RADIUS protocol is missing an important piece:
signaling of protocol-level errors.  This section explains the
numerous situations where these errors are not signaled, and what
impact this problem has for running networks.</t>
      <section anchor="request-response-packets">
        <name>Request / Response Packets</name>
        <t>This section reviews what types of request and responses are defined
in RADIUS, along with their behavior.</t>
        <t>The Access-Request packet Code is defined in <xref section="4.1" sectionFormat="comma" target="RFC2865"/>,
with Access-Accept (<xref section="4.2" sectionFormat="comma" target="RFC2865"/>) as an ACK indicating
that authentication has succeeded, and Access-Reject (<xref section="4.3" sectionFormat="comma" target="RFC2865"/>) as an explicit NAK that authentication has failed.</t>
        <t>The Accounting-Request packet Code is defined in <xref section="4.1" sectionFormat="comma" target="RFC2866"/>, with Accounting-Response defined in <xref section="4.2" sectionFormat="comma" target="RFC2866"/>,
as an ACK that the accounting data has been stored.  There is,
however, no corresponding NAK which indicates that accounting has
failed.  Instead, <xref section="4.1" sectionFormat="comma" target="RFC2866"/> states:</t>
        <ul empty="true">
          <li>
            <t>Upon receipt of an Accounting-Request, the server MUST transmit an
Accounting-Response reply if it successfully records the
accounting packet, and MUST NOT transmit any reply if it fails to
record the accounting packet.</t>
          </li>
        </ul>
        <t>Failing to acknowledge a request with a response is, at best,
impolite.  More practically, it causes problems with networks.  These
problems will be discussed in more detail later in this document.</t>
        <t>The CoA-Request packet code is defined in <xref section="2.2" sectionFormat="comma" target="RFC5176"/>,
along with CoA-ACK to indicate that the change was successful, and
CoA-NAK as an acknowledgement that the change of authorization action
could not be performed.</t>
        <t>The Disconnect-Request packet code is defined in <xref section="2.1" sectionFormat="comma" target="RFC5176"/>, along with Disconnect-ACK to indicate that the disconnection
was successful, and Disconnect-NAK as an acknowledgement that the user
or device could not be disconnected.</t>
        <t>While most requests have an ACK and NAK response defined,
Accounting-Request packets only have an ACK response defined.  If a
request does not receive a response, clients retransmit as
per<xref section="2.2.1" sectionFormat="comma" target="RFC5080"/>.  For Accounting-Request packets, these
retransmits are unlikely to yield a positive response.</t>
        <t>Even when the request has a NAK response defined, there are still
situations where a valid request could never have a response returned.
Instead, there are many cases where a server is suggested or even
required to discard requests, and therefore never send a response.</t>
      </section>
      <section anchor="silently-discard">
        <name>Silently Discard</name>
        <t>The existing RADIUS specifications require that a server "silently
discard" requests without a response for many reasons.  In some cases,
this discard process is necessary for security reasons, such as when
the Message-Authenticator (<xref section="5.14" sectionFormat="comma" target="RFC2869"/> fails
verification.  Discarding packets for security reasons is necessary,
and this specification does not change that behavior.</t>
        <t>In other cases, this "silently discard" process is done for reasons
which are not related to security.  For example, a server could
discard a request which contains data that the server does not
understand, but which also does not affect the requested action.  Or,
the server could discard a request which has been authenticated to be
well-formed, but which contains unexpected protocol state.</t>
        <t>In an ideal world, the server would instead either ignore only the
portions of the packet which it could not understand, or else the
server would respond to the client with an indication that the request
was improper.  A server could also respond to a request containing
invalid protocol state, and indicate that the request was authentic
and well-formed, but also unexpected.</t>
        <t>These issues are grouped under the term "silently discard", which is
defined in <xref section="1.2" sectionFormat="comma" target="RFC2865"/> as:</t>
        <ul empty="true">
          <li>
            <t>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.</t>
          </li>
        </ul>
        <t>While there is not a lot of quantitative data publicly available,
these silent discards are colloquially known to be a large source of
instability in RADIUS deployments.  There has been substantial work
done by server implementations and operators of proxy networks to
stablize the network by attempting to determine whether or not the
lack of a response indicates an actual failure, or only an illusory
one due to the limitations of the RADIUS protocol.</t>
        <t>One ad-hoc workaround to failures involves increasing the number of
Status-Server checks <xref target="RFC5997"/>, in violation of the <xref section="2.6" sectionFormat="comma" target="RFC2865"/> suggestion of "Keep-Alives Considered Harmful", which we
quote in full here:</t>
        <ul empty="true">
          <li>
            <t>Some implementers have adopted the practice of sending test RADIUS
requests to see if a server is alive.  This practice is strongly
discouraged, since it adds to load and harms scalability without
providing any additional useful information.  Since a RADIUS request
is contained in a single datagram, in the time it would take you to
send a ping you could just send the RADIUS request, and getting a
reply tells you that the RADIUS server is up.  If you do not have a
RADIUS request to send, it does not matter if the server is up or
not, because you are not using it.</t>
            <t>If you want to monitor your RADIUS server, use SNMP.  That's what
SNMP is for.</t>
          </li>
        </ul>
        <t>Experience has shown that this analysis is incomplete, as it does not
address the situation where a server is responding to only a subset of
requests.  This position is perhaps implied in <xref section="2" sectionFormat="comma" target="RFC5997"/>,
which says:</t>
        <ul empty="true">
          <li>
            <t>The Status-Server packet is not a "Keep-Alive" as discussed in
<xref section="2.6" sectionFormat="comma" target="RFC2865"/>.  "Keep-Alives" are Access-Request packets
sent to determine whether a downstream server is responsive.  These
packets are typically sent only when a server is suspected to be
down, and they are no longer sent as soon as the server is available
again.</t>
          </li>
        </ul>
        <t>In some cases, there is a sufficiently low volume of packets that the
inter-packet spacing is large enough which can trigger these
Status-Server checks.  In other cases, implementations will send
Status-Server when some requests do not get a response, even if the
server is actively responding to other requests.</t>
        <t>Some implementations and deployments have chosen to continuously send
Status-Server requests, in contradiction to the recommendations of
<xref section="2.6" sectionFormat="comma" target="RFC2865"/>.  Feedback from those systems indicate that
this practice increases the information available to administrators,
and decreases operational outages.</t>
        <t>The rest of this section describes in more detail the numerous
situations where requests are silently discarded.</t>
        <section anchor="unknown-attributes">
          <name>Unknown Attributes</name>
          <t>Some implementations discard requests when the request contains
attributes which the implementation does not recognize.  The behavior
of servers with respect to unknown attributes is defined by <xref section="5" sectionFormat="comma" target="RFC2865"/> which says that implementations:</t>
          <ul empty="true">
            <li>
              <t>MAY ignore Attributes with an unknown Type.</t>
            </li>
          </ul>
          <t><xref section="2.8" sectionFormat="comma" target="RFC6929"/> makes a stronger suggestion that:</t>
          <ul empty="true">
            <li>
              <t>It is RECOMMENDED that Attributes with unknown Type, Extended-Type,
TLV-Type, or EVS-Type are treated as "invalid attributes".</t>
            </li>
          </ul>
          <t>Despite this recommendation to ignore these unknown attributes, some
implementations will instead silently discard the entire request.
This behavior is not standards compliant, and is not allowed by any
interpretation of the text in <xref section="5" sectionFormat="comma" target="RFC2865"/>.</t>
          <t>For example, the BlastRADIUS mitigations (TBD) were negatively
affected by some implementations which would discard packets which
contain a Message-Authenticator attribute.  This behavior was seen in
2024, decades after the attribute was defined in <xref section="5.12" sectionFormat="comma" target="RFC2869"/> (2000).  This failure to handle unknown attributes in a
reasonable manner made it difficult and expensive for operators to
secure their networks via the recommended BlastRADIUS mitigations.</t>
        </section>
        <section anchor="invalid-attributes">
          <name>Invalid Attributes</name>
          <t><xref section="2.8" sectionFormat="comma" target="RFC6929"/> defines "invalid attributes" as attributes
where the Type is known, but the Value is malformed.  This topic was
not discussed in the original RADIUS specifications, which led to a
wide range of implementation-specific behavior, including ones where
the packet would be silently discarded.</t>
          <t>The behavior of implementations with respect to invalid attributes was
clarified in <xref section="2.8" sectionFormat="comma" target="RFC6929"/>, which requires the following
behavior:</t>
          <ul empty="true">
            <li>
              <t>The existence of an "invalid attribute" in a
packet or attribute MUST NOT result in the implementation discarding
the entire packet ...</t>
            </li>
          </ul>
          <t>Even though this specification being over a decade old, some
implementations still do not follow this requirement.  Instead, some
implementations will silently discard the entire request.  This
behavior has caused wide-spread issues in proxy networks, most notably
with Operator-Name <xref section="4.1" sectionFormat="comma" target="RFC5580"/>.</t>
          <t>One widely used implementation had erroneously created a local
definition for attribute 126, whih was then in conflict with
Operator-Name when that attribute was defined.  The implemenation also
discarded requests which contained invalid attributes.  The
combination of the two behaviors led to wide-spread outages and
significant effort by operators to perform a root-cause analyis and
then to correct the issue.</t>
          <t>This behavior violates the robustness principle on which the Internet
was founded.</t>
        </section>
        <section anchor="unknown-state">
          <name>Unknown State</name>
          <t>In some cases, as server can receive a request which contains a State
attribute with an unknown value.  This situation can occur, for
example, when EAP <xref target="RFC3579"/> authentications are sent through a load
balancer, and one of the final home servers fails.  The load balancer
does not necessarily know anything about the underlying EAP session,
and therefore may redistribute requests for an EAP session to a server
which is unaware of that session.</t>
          <t>The result is that a home server can receive a request which is in the
middle of an EAP session.  Since the server recieving the request did
not start the EAP session, it does not recognize the value of the
State attribute, and is unable to process the request.</t>
          <t>Some implementations will response with an Access-Reject.  Others will
silently discard the request.  Both behaviors are arguably wrong.</t>
        </section>
      </section>
      <section anchor="unexpected-request-code">
        <name>Unexpected Request Code</name>
        <t><xref target="RFC2865"/> and <xref target="RFC2866"/> defined different ports for Access-Request
and Accounting-Request packets.  <xref target="RFC5176"/> defines a different port
entirely for both CoA-Request and Disconnect-Request packets.  In
contrast, <xref target="RFC6613"/>, <xref target="RFC6614"/>, and <xref target="RFC7360"/> define one port
for all request Codes.  Some implementations have also chosen to
accept multiple request Codes on one port, even for RADIUS/UDP.</t>
        <t>As more than one port is used for RADIUS, there is a potential for
mismatched configuration between a client and server.  Each RADIUS
specification (<xref section="3" sectionFormat="comma" target="RFC2865"/>, <xref section="3" sectionFormat="comma" target="RFC2866"/>, and
<xref section="2.3" sectionFormat="comma" target="RFC5176"/>) has the same text related to receiving
packets:</t>
        <ul empty="true">
          <li>
            <t>The Code field is one octet, and identifies the type of RADIUS
packet.  Packets received with an invalid Code field MUST be
silently discarded.</t>
          </li>
        </ul>
        <t>However, this text does not address the issue where a client sends a
request Code which is correctly authenticated, but which the server
does not expect to receive.  It is reasonable for the server to not
perform the requested action.  It is not reasonable, however, for the
server to simply fail to respond to authentic requests.</t>
        <section anchor="accounting-failure">
          <name>Accounting Failure</name>
          <t><xref section="4.1" sectionFormat="comma" target="RFC2866"/> says that servers need to respond to
Accounting-Request packets when the accounting action is successful,
but not when the accounting action fails:</t>
          <ul empty="true">
            <li>
              <t>Upon receipt of an Accounting-Request, the server MUST transmit an
Accounting-Response reply if it successfully records the
accounting packet, and MUST NOT transmit any reply if it fails to
record the accounting packet.</t>
            </li>
          </ul>
          <t>In other words, servers are mandated to silently discard authentic
packets.</t>
        </section>
        <section anchor="network-loss-and-fragmentation">
          <name>Network Loss and Fragmentation</name>
          <t>When RADIUS/UDP is used, it is possible for either valid requests or
responses to be lost in the network.  RADIUS/UDP has another issue
noted in <xref section="2.4" sectionFormat="comma" target="RFC3579"/>, which notes that packets can be
fragmented.  <xref section="1" sectionFormat="comma" target="RFC6613"/> also notes that:</t>
          <ul empty="true">
            <li>
              <t>Transport of fragmented UDP packets appears to be a poorly tested
code path on network devices.  Some devices appear to be incapable
of transporting fragmented UDP packets, making it difficult to
deploy RADIUS in a network where those devices are deployed.</t>
            </li>
          </ul>
          <t>RADIUS/TCP and RADIUS/TLS are only partial solutions to the above
problems.  While they solve the fragmentation issue, there is still
the issue where a server can receive a request, and then the
connection can drop before the response is sent.  From the clients
point of view then, the request was sent, and then was silently
discarded by the server.</t>
        </section>
        <section anchor="proxy-chains">
          <name>Proxy Chains</name>
          <t>Even when none of the above problems are seen, a responsive and
correctly configured server could still fail to respond when it is
acting as a proxy.  A proxy is conceptually just a server which then
acts as a client to another server.  The client side of the proxy can
therefore run into the above issues when the next hop in the proxy
chain fails to respond to a request.</t>
          <t>When the next hop fails to respond to the proxied request, there is
very little positive action that the proxy can take.  It can perhaps
send the request over a different connection, or to a different
server, but that step is not always possible.  In the end, the proxy
has to decide where or not to originate an answer itself
(e.g. Access-Reject, CoA-NAK, etc.), or whether to just never respond
to the client.</t>
        </section>
      </section>
    </section>
    <section anchor="impact">
      <name>Impact</name>
      <t>Thare a number of impacts which result from NAK responses which do not
distinguish between different types of failures, and from request
simply disappearing into the network without response.</t>
      <t>It may seem useful for a server to NAK an action which it cannot
perform, but this response is not appropriate for a number of reasons.
The problem could be a due to a failures of user credential being
incorrect, failures of policy, or it could be another failure which is
unrelated to the action being requested.  As such, a user-level NAK
response to a network-level failure is inappropriate, for a number of
reasons.</t>
      <t>For example, if a user is attempting to access the network, an
Access-Reject is interpreted as indicating that the users credentials
are invalid.  This indication could result in the user device taking
action, such as invalidating or discarding the users password.  The
user device could even present the user with a prompt which indicates
that the password is incorrect, and that the user should re-enter it.
Such actions are likely to confuse the user and to cause problems.</t>
      <t>For accounting, the situation is made worse by the behavior of
Acct-Delay-Time (<xref section="5.2" sectionFormat="comma" target="RFC2866"/>).  When a client retransmits
an Accounting-Request packet, the Acct-Delay-Time attribute is
updated, which negates the benefits of the <xref section="2.2.2" sectionFormat="comma" target="RFC5080"/>
packet deduplication cache.  The client can then send multiple new
packets which contribute to congestive collapse of the network.</t>
      <t>The impact for CoA-Request and Disconnect-Request packets is similar:
either a NAK is sent back incorrectly, or the request never sees a
response.</t>
      <t>The lack of responses also contributes to network instability.  When a
client sends a request which never yields a response, it can only
assume that the server is down.  The client may then fail over to a
different server, or open new connections to the same server, or
simply stop sending packets to the server.</t>
    </section>
    <section anchor="protocol-error-code">
      <name>Protocol-Error Code</name>
      <t>This document make the RADIUS packet Code 52 (Protocol-Error) standard
instead of experimental, as an update to <xref target="RFC7930"/>.  In order to
have one document defining this RADIUS packet Code, the definition of
Protocol-Error is repeated here with only minor edits from the
original in <xref section="4" sectionFormat="comma" target="RFC7930"/>.</t>
      <t>The Protocol-Error packet Code may be used in response to any request
packet, such as Access-Request, Accounting-Request, CoA-Request, or
Disconnect-Request.  It is a response packet sent by a server to a
client.  The packet indicates to the client that the server is unable
to process the request for some reason.</t>
      <t>A Protocol-Error packet MUST contain an Original-Packet-Code
attribute, along with an Error-Cause attribute.  Other attributes MAY
be included if desired.  The Original-Packet-Code contains the code
from the request that generated the protocol error so that clients
can disambiguate requests with different codes and the same ID.
Regardless of the original packet code, the RADIUS Server calculates
the Message-Authenticator attribute as if the original packet were an
Access-Request packet.  The identifier is copied from the original
request.</t>
      <t>Clients processing Protocol-Error MUST ignore unknown or unexpected
attributes.</t>
      <t>This RADIUS packet Code is hop by hop.  Proxies MUST NOT simply
forward a Protocol-Error response that they receive. Instead, a proxy
MUST examine the Error-Cause attribute to determine whether the error
is due to a fault at the home server, or if it is a fault in
the RADIUS proxy network.</t>
      <t>Where the Error-Cause value indicates a fault in the RADIUS proxy
network, the proxy which receives the Protocol-Error SHOULD try to
proxy the request to a different destination, or over a different
connection to the same destination.  Futher handling of proxy
fail-over is out of scope of this specification.</t>
      <t>The following values for Error-Cause indicate a fault in the RADIUS
proxy network.  Other values for Error-Cause are possible, and may be
defined in a future specification:</t>
      <ul spacing="normal">
        <li>
          <t>502, Request Not Routable (Proxy)</t>
        </li>
        <li>
          <t>505, Other Proxy Processing Error</t>
        </li>
      </ul>
      <t>The remainder of the Error-Cause values SHOULD be interpreted as
originating at the home server, and the proxy SHOULD return the
Protocol-Error to the client, and include the Error-Cause attribute
from the response to the Proxied Request</t>
      <section anchor="impact-on-existing-systems">
        <name>Impact on existing systems</name>
        <t>TBD - clients ignore packet Codes they don't understand.  Therefore
Protocol-Error is always safe to send.  Even if the client does not
process it and take action, an administrator can see the packet and
take action.</t>
      </section>
      <section anchor="negotiation-and-configuration">
        <name>Negotiation and Configuration</name>
        <t>TBD - no negotiation, but configuration based on agreement of
administrators of client and servers.</t>
        <t>TBD - if a proxy knows that a client does not understand
Protocol-Error, it MAY instead respond to the client with a relevant
NAK packet.  This SHOULD NOT be done when the client is another proxy,
but only when the client is a NAS.</t>
      </section>
      <section anchor="when-to-send-protocol-error-responses">
        <name>When to send Protocol-Error Responses</name>
        <t>TBD - mainly authentic packets, where there is no NAK
(Accounting-Request), or where the NAK is not appropriate (unknown EAP
State, etc.)</t>
        <t>See the (TBD Solutions) section below for more details.</t>
      </section>
    </section>
    <section anchor="original-packet-code-attribute">
      <name>Original-Packet-Code Attribute</name>
      <t>This document standardizes the Original-Packet-Code attribute, which
was originally defined in <xref target="RFC7930"/>.</t>
      <t>Description</t>
      <ul empty="true">
        <li>
          <t>The Original-Packet-Code contains the packet Code from the request
that generated the Protocol-Error response.  It allows clients to
disambiguate requests with different packet Codes which use the same
ID.</t>
          <t>The Original-Packet-Code attribute MUST NOT be sent in any packet
Code other than Protocol-Error.</t>
          <t>A client which receives a Protocol-Error in a packet Code other than
Protocol-Error MUST treat it as an "invalid attribute" as per
<xref section="2.8" sectionFormat="comma" target="RFC6929"/>.</t>
        </li>
      </ul>
      <t>Type</t>
      <ul empty="true">
        <li>
          <t>241.4</t>
        </li>
      </ul>
      <t>Length</t>
      <ul empty="true">
        <li>
          <t>6</t>
        </li>
      </ul>
      <t>Data Type</t>
      <ul empty="true">
        <li>
          <t>integer</t>
        </li>
      </ul>
      <t>Value</t>
      <ul empty="true">
        <li>
          <t>The Value is taken from the original request packet Code which was
received by the server.  Values which are not in the the IANA
"RADIUS Packet Type Codes" registry are likely to be invalid.</t>
          <t>A client which receives an Original-Packet-Code attribute that does
not match any outstanding request MUST silently discard the response.</t>
        </li>
      </ul>
    </section>
    <section anchor="solutions-to-problems">
      <name>Solutions to Problems</name>
      <t>This section describes the changes to RADIUS which address the above
problems.</t>
      <section anchor="invalid-attributes-1">
        <name>Invalid Attributes</name>
        <t>We reiterate here the mandate of <xref section="2.8" sectionFormat="comma" target="RFC6929"/>:</t>
        <ul empty="true">
          <li>
            <t>The existence of an "invalid attribute" in a packet or attribute
MUST NOT result in the implementation discarding the entire packet
...</t>
          </li>
        </ul>
        <t>Implementations which discard packets due to invalid attributes are
not standards compliant.</t>
      </section>
      <section anchor="unknown-attributes-1">
        <name>Unknown Attributes</name>
        <t>Some implementations discard requests when the request contains
attributes which the implementation does not recognize.  This behavior
is permitted by <xref section="5" sectionFormat="comma" target="RFC2865"/> which says that
implementations:</t>
        <ul empty="true">
          <li>
            <t>MAY ignore Attributes with an unknown Type.</t>
          </li>
        </ul>
        <t><xref section="2.8" sectionFormat="comma" target="RFC6929"/> makes a stronger suggestion that:</t>
        <ul empty="true">
          <li>
            <t>It is RECOMMENDED that Attributes with unknown Type, Extended-Type,
TLV-Type, or EVS-Type are treated as "invalid attributes".</t>
          </li>
        </ul>
        <t>We update <xref target="RFC2865"/>, <xref target="RFC2866"/>, <xref target="RFC5176"/> and <xref target="RFC6929"/> here
to say that implementations MUST NOT silently discard packets which
contain attributes of an known Type, Extended-Type, TLV-Type, or
EVS-Type.  This mandate applies to all RADIUS packets, for all values
of the packet Code field.</t>
        <t>Note that this prohibition does not apply to known attributes which
have unknown values.  For example, <xref section="5.6" sectionFormat="comma" target="RFC2865"/> says that
for the Service-Type attribute:</t>
        <ul empty="true">
          <li>
            <t>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.</t>
          </li>
        </ul>
        <t>That requirement is not changed by this specification.</t>
      </section>
      <section anchor="unknown-state-1">
        <name>Unknown State</name>
        <t>TBD - try not to send Access-Reject.  Maybe recommend a new
Error-Cause value?</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is instructed to update the "RADIUS Packet Type Codes" registry,
and change the Protocol-Error entry from Reference RFC7930 to
THIS-DOCUMENT.</t>
      <t>IANA is instructed to update the "RADIUS Attribute Types" registry,
and change the Original-Packet-Code entry from Reference RFC7930 to
THIS-DOCUMENT.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>There are no privacy considerations in this specification.  It does
not add or change any transport protocols, and it does not change the
roles of any participant in the RADIUS ecosystem.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification has no direct impact on security.  It does not add
or change any existing cryprography in RADIUS.  It is compatible with
all RADIUS standards, including (ALPN draft).</t>
      <t>This specification does, however, recommend ways that networks can be
better protected from a variety of problems, misconfigurations, and
erroneous implementations.  As a result, RADIUS proxy networks which
implement this specification should become more stable, and therefore
more secure.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document came out of discussions both in the RADEXT WG, and in
the 2025 RADIUS Technical Conference in Tampere, Finland.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC2865">
          <front>
            <title>Remote Authentication Dial In User Service (RADIUS)</title>
            <author fullname="C. Rigney" initials="C." surname="Rigney"/>
            <author fullname="S. Willens" initials="S." surname="Willens"/>
            <author fullname="A. Rubens" initials="A." surname="Rubens"/>
            <author fullname="W. Simpson" initials="W." surname="Simpson"/>
            <date month="June" year="2000"/>
            <abstract>
              <t>This document describes a protocol for carrying authentication, authorization, and configuration information between a Network Access Server which desires to authenticate its links and a shared Authentication Server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2865"/>
          <seriesInfo name="DOI" value="10.17487/RFC2865"/>
        </reference>
        <reference anchor="RFC3576">
          <front>
            <title>Dynamic Authorization Extensions to Remote Authentication Dial In User Service (RADIUS)</title>
            <author fullname="M. Chiba" initials="M." surname="Chiba"/>
            <author fullname="G. Dommety" initials="G." surname="Dommety"/>
            <author fullname="M. Eklund" initials="M." surname="Eklund"/>
            <author fullname="D. Mitton" initials="D." surname="Mitton"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>This document describes a currently deployed extension to the Remote Authentication Dial In User Service (RADIUS) protocol, allowing dynamic changes to a user session, as implemented by network access server products. This includes support for disconnecting users and changing authorizations applicable to a user session. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3576"/>
          <seriesInfo name="DOI" value="10.17487/RFC3576"/>
        </reference>
        <reference anchor="RFC5176">
          <front>
            <title>Dynamic Authorization Extensions to Remote Authentication Dial In User Service (RADIUS)</title>
            <author fullname="M. Chiba" initials="M." surname="Chiba"/>
            <author fullname="G. Dommety" initials="G." surname="Dommety"/>
            <author fullname="M. Eklund" initials="M." surname="Eklund"/>
            <author fullname="D. Mitton" initials="D." surname="Mitton"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>This document describes a currently deployed extension to the Remote Authentication Dial In User Service (RADIUS) protocol, allowing dynamic changes to a user session, as implemented by network access server products. This includes support for disconnecting users and changing authorizations applicable to a user session. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5176"/>
          <seriesInfo name="DOI" value="10.17487/RFC5176"/>
        </reference>
        <reference anchor="RFC6929">
          <front>
            <title>Remote Authentication Dial In User Service (RADIUS) Protocol Extensions</title>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <author fullname="A. Lior" initials="A." surname="Lior"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>The Remote Authentication Dial-In User Service (RADIUS) protocol is nearing exhaustion of its current 8-bit Attribute Type space. In addition, experience shows a growing need for complex grouping, along with attributes that can carry more than 253 octets of data. This document defines changes to RADIUS that address all of the above problems.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6929"/>
          <seriesInfo name="DOI" value="10.17487/RFC6929"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC2866">
          <front>
            <title>RADIUS Accounting</title>
            <author fullname="C. Rigney" initials="C." surname="Rigney"/>
            <date month="June" year="2000"/>
            <abstract>
              <t>This document describes a protocol for carrying accounting information between a Network Access Server and a shared Accounting Server. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2866"/>
          <seriesInfo name="DOI" value="10.17487/RFC2866"/>
        </reference>
        <reference anchor="RFC2869">
          <front>
            <title>RADIUS Extensions</title>
            <author fullname="C. Rigney" initials="C." surname="Rigney"/>
            <author fullname="W. Willats" initials="W." surname="Willats"/>
            <author fullname="P. Calhoun" initials="P." surname="Calhoun"/>
            <date month="June" year="2000"/>
            <abstract>
              <t>This document describes additional attributes for carrying authentication, authorization and accounting information between a Network Access Server (NAS) and a shared Accounting Server using the Remote Authentication Dial In User Service (RADIUS) protocol described in RFC 2865 and RFC 2866. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2869"/>
          <seriesInfo name="DOI" value="10.17487/RFC2869"/>
        </reference>
        <reference anchor="RFC5080">
          <front>
            <title>Common Remote Authentication Dial In User Service (RADIUS) Implementation Issues and Suggested Fixes</title>
            <author fullname="D. Nelson" initials="D." surname="Nelson"/>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="December" year="2007"/>
            <abstract>
              <t>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. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5080"/>
          <seriesInfo name="DOI" value="10.17487/RFC5080"/>
        </reference>
        <reference anchor="RFC6613">
          <front>
            <title>RADIUS over TCP</title>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="May" year="2012"/>
            <abstract>
              <t>The Remote Authentication Dial-In User Server (RADIUS) protocol has, until now, required the User Datagram Protocol (UDP) as the underlying transport layer. This document defines RADIUS over the Transmission Control Protocol (RADIUS/TCP), in order to address handling issues related to RADIUS over Transport Layer Security (RADIUS/TLS). It permits TCP to be used as a transport protocol for RADIUS only when a transport layer such as TLS or IPsec provides confidentiality and security. This document defines an Experimental Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6613"/>
          <seriesInfo name="DOI" value="10.17487/RFC6613"/>
        </reference>
        <reference anchor="RFC6614">
          <front>
            <title>Transport Layer Security (TLS) Encryption for RADIUS</title>
            <author fullname="S. Winter" initials="S." surname="Winter"/>
            <author fullname="M. McCauley" initials="M." surname="McCauley"/>
            <author fullname="S. Venaas" initials="S." surname="Venaas"/>
            <author fullname="K. Wierenga" initials="K." surname="Wierenga"/>
            <date month="May" year="2012"/>
            <abstract>
              <t>This document specifies a transport profile for RADIUS using Transport Layer Security (TLS) over TCP as the transport protocol. This enables dynamic trust relationships between RADIUS servers. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6614"/>
          <seriesInfo name="DOI" value="10.17487/RFC6614"/>
        </reference>
        <reference anchor="RFC7360">
          <front>
            <title>Datagram Transport Layer Security (DTLS) as a Transport Layer for RADIUS</title>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="September" year="2014"/>
            <abstract>
              <t>The RADIUS protocol defined in RFC 2865 has limited support for authentication and encryption of RADIUS packets. The protocol transports data in the clear, although some parts of the packets can have obfuscated content. Packets may be replayed verbatim by an attacker, and client-server authentication is based on fixed shared secrets. This document specifies how the Datagram Transport Layer Security (DTLS) protocol may be used as a fix for these problems. It also describes how implementations of this proposal can coexist with current RADIUS systems.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7360"/>
          <seriesInfo name="DOI" value="10.17487/RFC7360"/>
        </reference>
        <reference anchor="RFC7930">
          <front>
            <title>Larger Packets for RADIUS over TCP</title>
            <author fullname="S. Hartman" initials="S." surname="Hartman"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>The RADIUS-over-TLS experiment described in RFC 6614 has opened RADIUS to new use cases where the 4096-octet maximum size limit of a RADIUS packet proves problematic. This specification extends the RADIUS-over-TCP experiment (RFC 6613) to permit larger RADIUS packets. This specification compliments other ongoing work to permit fragmentation of RADIUS authorization information. This document registers a new RADIUS code, an action that required IESG approval.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7930"/>
          <seriesInfo name="DOI" value="10.17487/RFC7930"/>
        </reference>
        <reference anchor="RFC5997">
          <front>
            <title>Use of Status-Server Packets in the Remote Authentication Dial In User Service (RADIUS) Protocol</title>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document describes a deployed extension to the Remote Authentication Dial In User Service (RADIUS) protocol, enabling clients to query the status of a RADIUS server. This extension utilizes the Status-Server (12) Code, which was reserved for experimental use in RFC 2865. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5997"/>
          <seriesInfo name="DOI" value="10.17487/RFC5997"/>
        </reference>
        <reference anchor="RFC5580">
          <front>
            <title>Carrying Location Objects in RADIUS and Diameter</title>
            <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig"/>
            <author fullname="F. Adrangi" initials="F." surname="Adrangi"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="A. Lior" initials="A." surname="Lior"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <date month="August" year="2009"/>
            <abstract>
              <t>This document describes procedures for conveying access-network ownership and location information based on civic and geospatial location formats in Remote Authentication Dial-In User Service (RADIUS) and Diameter.</t>
              <t>The distribution of location information is a privacy-sensitive task. Dealing with mechanisms to preserve the user's privacy is important and is addressed in this document. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5580"/>
          <seriesInfo name="DOI" value="10.17487/RFC5580"/>
        </reference>
        <reference anchor="RFC3579">
          <front>
            <title>RADIUS (Remote Authentication Dial In User Service) Support For Extensible Authentication Protocol (EAP)</title>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="P. Calhoun" initials="P." surname="Calhoun"/>
            <date month="September" year="2003"/>
            <abstract>
              <t>This document defines Remote Authentication Dial In User Service (RADIUS) support for the Extensible Authentication Protocol (EAP), an authentication framework which supports multiple authentication mechanisms. In the proposed scheme, the Network Access Server (NAS) forwards EAP packets to and from the RADIUS server, encapsulated within EAP-Message attributes. This has the advantage of allowing the NAS to support any EAP authentication method, without the need for method- specific code, which resides on the RADIUS server. While EAP was originally developed for use with PPP, it is now also in use with IEEE 802. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3579"/>
          <seriesInfo name="DOI" value="10.17487/RFC3579"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAGIQW2gAA+Vd2XIbSXZ9z68ocx4sOUAORS3dYjg0ZovqacZos0hNe54c
BSABlFWowtRCCDPR/+Jv8Zf5nrtkZhWKcrefHGFHuAcAq3K5eZdzt9Tp6anr
iq70l9ltl1fLvFkWbVGts49N3dWLujx90zR14/L5vPH3l+Ofl/Wiyrf08rLJ
V93p0n+pv5zu7BmPZ07Pz12/W+adby+zi+9fPJ/hvy9m2fMn39F/X7x48pT/
+2yWfff0xTn99+XTc+darObf87KuaPSu6b0rdg1/aruL8/OX5xcub3x+md1U
nW8q37n9+jL7dHX95t/usp/r5gs28cem7nfuyz4+dXqNhbpF3l1m88XOtf18
W7RtUVd3hx3NdPPm7kfndsVlRv/3u2yRV1nf+ixvmvyQPSpWWV6W2cG3j7O6
yTZ5u8k2vvEuy2jHl/gDfWzrpmv8qr3kIZZ+lfdl19IT9vfDVv6Mry7vu03d
XDp3mhUV/Xh1ll37P9Vf6EEh7VVJi7Cf6maNzXz5oSmWa5+9992e9opR/TYv
yktaH9HtX4rqy5yfqPSBs0W9da6qm23eFff+kl749OPr759890w/4mT049Pn
373Qjzgj/fji5cVLWmVRrUaD4DTjx5f25vn35/YmHXH8aBPisO0jnTgNfe+r
ngdd49jsMOm77KzJl/5r9y+F71ZnRAY8V3Sbfn6ZrRrv6a9F3/5+yHtn9AQR
9vQ0y+dt1+QL+vazz2gYXy0zIlTWBqb3WbfxI/7Odvnii++y1/XSz7JV0bSd
o/MsKr+kw8LSmVszIgm//clv685nV3SkvuoK4jJirOy6yEs6s+xz65vs1jf3
xcK7R7S7m8+3jzNb8ZksdFssl6V37ndg2aZe9guM4dzdbxo+Oxo+K1paelus
sfa8zfKs8X/tfdtlv6dP7a6uiAL28Czbg62zRVnQRG3Wglz6fOuIkWmqe9+0
M6GhfLGnZCzmd33/LMvueLwc/5+t/N4ti9WKfqm6rCO5a7N6FcbPlMIyuM8X
G34meQSCl5FicET2bY0x27ZeFKRiltl9XhbJKmjqn+q9p/XNcEK0xzANje7i
arG0stgWGINWXlRLpi8pkbZfLHzbQuBXxIh9w0uhwZwOBYLyKc3w7IapOzwi
ejVfLOq+woBnfJg0StFmVZ3tSbGAf4zWKUVpIf7rYpNXJOpB8Gi8fF73naMp
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

-->

</rfc>
