RFC 8918
Invalid TLV Handling in IS-IS
RFC 8918: Invalid TLV Handling in IS-IS π
okay bestie, let's get into it π«Ά
- RFC number: 8918
- Title: Invalid TLV Handling in IS-IS
- Authors: L. Ginsberg, P. Wells (Cisco Systems), T. Li (Arista Networks), T. Przygienda, S. Hegde (Juniper Networks, Inc.)
- Stream: Internet Engineering Task Force (IETF)
- Category: Standards Track
- Date: September 2020
- ISSN: 2070-1721
- Updates: 5305, 6232
Abstract β¨
so IS-IS has always been SO extensible, and the secret sauce is how it handles TLVs (Type-Length-Value tuples) it doesn't support or that are just... wrong π the existing specs do say stuff about this, but real deployments have shown that routers don't always act the same when a TLV that isn't allowed in a particular PDU (Protocol Data Unit) shows up π
this doc talks through those cases and spells out the correct behavior so that everyone can actually talk to each other, which is the whole point π¦
this document updates RFCs 5305 and 6232.
Status of This Memo π
this is an Internet Standards Track document π₯
it's a product of the Internet Engineering Task Force (IETF), so it represents the consensus of the IETF community. it got public review and was approved for publication by the Internet Engineering Steering Group (IESG). if you want more info on Internet Standards, check Section 2 of RFC 7841.
for the current status, any errata, and how to give feedback, go to https://www.rfc-editor.org/info/rfc8918
Copyright Notice Β©οΈ
Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved. π
this document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as in effect on the date of publication. please read these carefully, bestie, because they spell out your rights and restrictions for this doc. code components pulled out of this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Simplified BSD License.
Table of Contents ποΈ
1. Introduction
1.1. Requirements Language
2. TLV Codepoints Registry
3. TLV Acceptance in PDUs
3.1. Handling of Disallowed TLVs in Received PDUs Other Than LSP
Purges
3.2. Special Handling of Disallowed TLVs in Received LSP Purges
3.3. Applicability to Sub-TLVs
3.4. Correction to POI "TLV Codepoints Registry" Entry
4. TLV Validation and LSP Acceptance
5. IANA Considerations
6. Security Considerations
7. References
7.1. Normative References
7.2. Informative References
Acknowledgements
Authors' Addresses
1. Introduction π§
so IS-IS uses TLV encoding for ALL the content in the body of a PDU β¨ new features get added by defining new TLVs. to keep things backwards compatible, an implementation is required to ignore any TLVs it doesn't understand. this same rule applies to sub-TLVs [RFC5305], which live inside TLVs π
also super important: whether a PDU is valid has to be decided separately from whether the TLVs inside it are valid. a valid PDU must be accepted [ISO10589] even if one of its TLVs isn't understood or is invalid somehow (wrong syntax, a data value out of range, that kind of thing) π
the set of TLVs (and sub-TLVs) that are allowed in each PDU type is written down in the "TLV Codepoints Registry" set up by [RFC3563] and updated by [RFC6233] and [RFC7356] π
this document is here to clarify some of the existing specs and cut down on the non-conformant behavior people see in the real world π¦ it doesn't change what the existing protocol specs say, but the clarifications do work as updates to [RFC5305] (see Section 3.3) and [RFC6232] (see Section 3.4) π«Ά
1.1. Requirements Language π
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 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. π
2. TLV Codepoints Registry π
[RFC3563] set up the IANA-managed "IS-IS TLV Codepoints Registry" for recording assigned TLV codepoints [TLV_CODEPOINTS]. the first entries in this registry were based on [RFC3359] π
the registry has a set of columns that show which PDU types a given TLV is allowed in:
IIH: the TLV is allowed in Intermediate System to Intermediate System Hello (IIH) PDUs (Point-to-point and LAN) πΈLSP: the TLV is allowed in Link State PDUs (LSPs) πΈSNP: the TLV is allowed in Sequence Number PDUs (SNPs), which covers Partial Sequence Number PDUs (PSNPs) and Complete Sequence Number PDUs (CSNPs) πΈPurge: the TLV is allowed in LSP Purges [RFC6233] πΈ
if "Y" is in a column, the TLV is allowed in that PDU type β
if "N" is in a column, the TLV is NOT allowed in that PDU type β
3. TLV Acceptance in PDUs π
this section is all about the correct behavior when a PDU shows up with a TLV that the "TLV Codepoints Registry" marks as disallowed π
3.1. Handling of Disallowed TLVs in Received PDUs Other Than LSP Purges π
[ISO10589] spells out what happens when a PDU has a TLV that is "not recognised". it says (see Sections 9.5 - 9.13):
Any codes in a received PDU that are not recognised shall be ignored.
this is the model to follow when a disallowed TLV is received π§ so TLVs in a PDU (other than LSP purges) that are disallowed MUST be ignored and MUST NOT cause the PDU itself to be rejected by the receiving IS. no drama, just ignore it and keep going β¨
3.2. Special Handling of Disallowed TLVs in Received LSP Purges ποΈ
when purging LSPs, [ISO10589] recommends (but doesn't require) that the body of the LSP (aka all the TLVs) get removed before the purge is generated. LSP purges that have TLVs in the body still get accepted, though any TLVs that are there get ignored π
when cryptographic authentication [RFC5304] came along, this looseness in how received purges were processed had to be tightened up. otherwise attackers could start a purge without having the authentication key, which is a huge security no-no π so [RFC5304] put strict requirements on what TLVs are allowed in a purge (authentication only), and it specified that:
ISes MUST NOT accept purges that contain TLVs other than the authentication TLV.
[RFC6232] extended this behavior, introducing the Purge Originator Identification (POI) TLV. then [RFC6233] added the "Purge" column to the "TLV Codepoints Registry" so you can see every TLV that's allowed in purges π
the behavior in [RFC5304] isn't backwards compatible with the behavior defined in [ISO10589]. so it can only be safely turned on when all nodes support cryptographic authentication π same deal for [RFC6232]: its extensions aren't compatible with [RFC5304], so they can only be safely enabled when all nodes support those extensions π«Ά
when new protocol behaviors that aren't backwards compatible get specified, it is RECOMMENDED that implementations provide controls for turning them on. this helps prevent interoperability issues and lets the new functionality roll out into an existing network without causing disruption.
3.3. Applicability to Sub-TLVs π·
[RFC5305] introduced sub-TLVs, which are TLV tuples advertised inside the body of a parent TLV. the registries for sub-TLVs are tied to the "TLV Codepoints Registry" and say which TLVs a given sub-TLV is allowed in π Section 2 of [RFC5305] gets updated by this sentence:
As with TLVs, it is required that sub-TLVs that are disallowed MUST be ignored on receipt.
the existing sentence in Section 2 of [RFC5305]:
Unknown sub-TLVs are to be ignored and skipped upon receipt.
is replaced by:
Unknown sub-TLVs MUST be ignored and skipped upon receipt.
3.4. Correction to POI "TLV Codepoints Registry" Entry π οΈ
there was an error introduced by [RFC6232] about which PDUs the POI TLV is allowed in π¬ Section 3 of [RFC6232] says:
The POI TLV SHOULD be found in all purges and MUST NOT be found in LSPs with a non-zero Remaining Lifetime.
but the IANA section of that same document says:
The additional values for this TLV should be IIH:n, LSP:y, SNP:n, and Purge:y.
the correct setting for "LSP" is "n". this document updates [RFC6232] by fixing that error π©Ή
this document also updates the quoted text from Section 3 of [RFC6232] to say:
The POI TLV SHOULD be sent in all purges and MUST NOT be sent in LSPs with a non-zero Remaining Lifetime.
to be continued... π§β¨
6. Security Considerations π
okay so bestie, this one is short and sweet π This document makes no changes to the protocol, so there are no new security issues introduced β¨ no cap, that's it.
The clarifications in here are meant to make it less likely that implementations will process received LSPs incorrectly π§ and that also makes it less likely that a bad actor could take advantage of a buggy implementation. Lowkey iconic, a fix that makes the whole network harder to exploit π
Security concerns for IS-IS are covered in [ISO10589], [RFC5304], and [RFC5310]. Go read those if you want the full security tea βπ
7. References π
7.1. Normative References
- [ISO10589] International Organization for Standardization, "Information technology -- Telecommunications and information exchange between systems -- Intermediate System to Intermediate System intra-domain routeing information exchange protocol for use in conjunction with the protocol for providing the connectionless-mode network service (ISO 8473)", ISO/IEC 10589:2002, Second Edition, November 2002.
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997,
https://www.rfc-editor.org/info/rfc2119. - [RFC3563] Zinin, A., "Cooperative Agreement Between the ISOC/IETF and ISO/IEC Joint Technical Committee 1/Sub Committee 6 (JTC1/SC6) on IS-IS Routing Protocol Development", RFC 3563, DOI 10.17487/RFC3563, July 2003,
https://www.rfc-editor.org/info/rfc3563. - [RFC5304] Li, T. and R. Atkinson, "IS-IS Cryptographic Authentication", RFC 5304, DOI 10.17487/RFC5304, October 2008,
https://www.rfc-editor.org/info/rfc5304. - [RFC5305] Li, T. and H. Smit, "IS-IS Extensions for Traffic Engineering", RFC 5305, DOI 10.17487/RFC5305, October 2008,
https://www.rfc-editor.org/info/rfc5305. - [RFC5310] Bhatia, M., Manral, V., Li, T., Atkinson, R., White, R., and M. Fanto, "IS-IS Generic Cryptographic Authentication", RFC 5310, DOI 10.17487/RFC5310, February 2009,
https://www.rfc-editor.org/info/rfc5310. - [RFC6232] Wei, F., Qin, Y., Li, Z., Li, T., and J. Dong, "Purge Originator Identification TLV for IS-IS", RFC 6232, DOI 10.17487/RFC6232, May 2011,
https://www.rfc-editor.org/info/rfc6232. - [RFC6233] Li, T. and L. Ginsberg, "IS-IS Registry Extension for Purges", RFC 6233, DOI 10.17487/RFC6233, May 2011,
https://www.rfc-editor.org/info/rfc6233. - [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017,
https://www.rfc-editor.org/info/rfc8174. - [TLV_CODEPOINTS] IANA, "IS-IS TLV Codepoints",
https://www.iana.org/assignments/isis-tlv-codepoints/.
7.2. Informative References
- [RFC3359] Przygienda, T., "Reserved Type, Length and Value (TLV) Codepoints in Intermediate System to Intermediate System", RFC 3359, DOI 10.17487/RFC3359, August 2002,
https://www.rfc-editor.org/info/rfc3359. - [RFC7356] Ginsberg, L., Previdi, S., and Y. Yang, "IS-IS Flooding Scope Link State PDUs (LSPs)", RFC 7356, DOI 10.17487/RFC7356, September 2014,
https://www.rfc-editor.org/info/rfc7356.
Acknowledgements π«Ά
The authors would like to thank Alvaro Retana. Iconic behavior, honestly π
Authors' Addresses π
Les Ginsberg (Cisco Systems)
Les Ginsberg
Cisco Systems
Email: ginsberg@cisco.com
Paul Wells (Cisco Systems)
Paul Wells
Cisco Systems
Email: pauwells@cisco.com
Tony Li (Arista Networks)
Tony Li
Arista Networks
5453 Great America Parkway
Santa Clara, CA 95054
United States of America
Email: tony.li@tony.li
Tony Przygienda (Juniper Networks, Inc.)
Tony Przygienda
Juniper Networks, Inc.
1194 N. Matilda Ave
Sunnyvale, CA 94089
United States of America
Email: prz@juniper.net
Shraddha Hegde (Juniper Networks, Inc.)
Shraddha Hegde
Juniper Networks, Inc.
Embassy Business Park
Bangalore 560093
KA
India
Email: shraddha@juniper.net
That's the whole RFC, bestie! ππ Protocol girlies unite π¦
π¦ where this page comes from
- ietf: rfc8918 2020-09
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms