{"id":2894,"date":"2026-11-07T16:57:31","date_gmt":"2026-11-08T00:57:31","guid":{"rendered":"https:\/\/self-issued.info\/?p=2894"},"modified":"2026-11-07T17:27:00","modified_gmt":"2026-11-08T01:27:00","slug":"rfc-10070-closing-the-door-on-an-actionable-oauth-security-vulnerability","status":"publish","type":"post","link":"https:\/\/self-issued.info\/?p=2894","title":{"rendered":"RFC 10070 &#8211; Closing the door on an actionable OAuth security vulnerability"},"content":{"rendered":"<p><span class=\"plain\"><img decoding=\"async\" align=\"right\" alt=\"OAuth logo\" src=\"https:\/\/self-issued.info\/images\/oauth_logo_120x120.png\" \/><\/span>I&#8217;m pleased to announce that <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc10070.html\">RFC 10070<\/a>, which closes an <a href=\"https:\/\/openid.net\/notice-of-a-security-vulnerability\/\">actionable security vulnerability<\/a> in OAuth 2.0 JWT Client Authentication, has been published.  The abstract of the specification is:<\/p>\n<blockquote><p>\nThis document updates RFCs 7521, 7522, 7523, and 9126 with respect to the treatment of audience values in OAuth 2.0 Client Assertion Authentication and Assertion-based Authorization Grants to address a security vulnerability identified in the previous requirements for those audience values in multiple OAuth 2.0 specifications.\n<\/p><\/blockquote>\n<p>As I described <a href=\"https:\/\/self-issued.info\/?p=2745\">when writing<\/a> about <a href=\"https:\/\/datatracker.ietf.org\/doc\/draft-ietf-oauth-rfc7523bis\">draft-ietf-oauth-rfc7523bis<\/a>, which became this RFC, the security vulnerability was identified during formal analysis of an earlier draft of the <a href=\"https:\/\/openid.net\/specs\/openid-federation-1_0.html\">OpenID Federation<\/a> specification.  The vulnerability resulted from ambiguities in the treatment of the audience values of tokens intended for the authorization server.  The ambiguities enabled a malicious authorization server to use the token endpoint of a legitimate authorization server as the audience value, resulting in a client authentication JWT that the attacker could use there.<\/p>\n<p>It&#8217;s interesting to note that the fix utilizes uses two features of OAuth 2.0 that did not exist when we wrote <a href=\"https:\/\/www.rfc-editor.org\/info\/rfc7523\">RFC 7523<\/a>:<\/p>\n<ul>\n<li><b>Issuer Identifier<\/b>: The issuer identifier URL of the authorization server was introduced in <a href=\"https:\/\/www.rfc-editor.org\/info\/rfc8414\">RFC 8414<\/a>.  RFC 10070 uses the issuer identifier as the sole legal audience value identifying authorization servers, eliminating the previous ambiguity that enabled the attack.<\/li>\n<li><b>Explicit Typing<\/b>: Explicit typing for JWTs was introduced in <a href=\"https:\/\/www.rfc-editor.org\/info\/rfc8725\">RFC 8725<\/a>.  RFC 10070 defines the explicit type &#8220;<code>client-authentication+jwt<\/code>&#8221; to facilitate distinguishing between tokens produced in accordance with specifications published prior to RFC 10070 and those produced using the requirements of RFC 10070.<\/li>\n<\/ul>\n<p>Both these newer features have become core components of how OAuth 2.0 is used in practice today.<\/p>\n<p>The vulnerability was present in all of these OAuth 2.0 specifications, each of which were updated by this RFC:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc7521\">RFC 7521<\/a>: Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants<\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc7522\">RFC 7522<\/a>: Security Assertion Markup Language (SAML) 2.0 Profile for OAuth 2.0 Client Authentication and Authorization Grants<\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc7523\">RFC 7523<\/a>: JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants<\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc9126\">RFC 9126<\/a>: OAuth 2.0 Pushed Authorization Requests<\/li>\n<\/ul>\n<p>Multiple OpenID specifications using JWT Client Authentication were also affected, including <a href=\"https:\/\/openid.net\/specs\/openid-connect-core-1_0.html\">OpenID Connect Core<\/a>, <a href=\"https:\/\/openid.net\/specs\/fapi-security-profile-2_0.html\">FAPI 2.0 Security Profile<\/a>, <a href=\"https:\/\/openid.net\/specs\/openid-client-initiated-backchannel-authentication-core-1_0.html\">OpenID Connect Client-Initiated Backchannel Authentication (CIBA) Core<\/a>, and of course, <a href=\"https:\/\/openid.net\/specs\/openid-federation-1_0.html\">OpenID Federation<\/a>.  All of these have since been updated or are in the process of being updated to address the security vulnerability in the same manner as is done by RFC 10070.<\/p>\n<p>This specification was the result of thoughtful, careful, and timely action by those responsible for the affected specifications and ecosystems, including leaders in the OpenID Foundation, the IETF, and especially my co-authors <a href=\"https:\/\/www.linkedin.com\/in\/bcampbell\/\">Brian Campbell<\/a> and <a href=\"https:\/\/www.linkedin.com\/in\/filipskokan\/\">Filip Skokan<\/a>.  Thanks to all who helped us achieve this important result!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m pleased to announce that RFC 10070, which closes an actionable security vulnerability in OAuth 2.0 JWT Client Authentication, has been published. The abstract of the specification is: This document updates RFCs 7521, 7522, 7523, and 9126 with respect to the treatment of audience values in OAuth 2.0 Client Assertion Authentication and Assertion-based Authorization Grants [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32,27,26,14,23,25],"tags":[],"class_list":["post-2894","post","type-post","status-publish","format-standard","hentry","category-ietf","category-json","category-oauth","category-openid","category-security","category-specifications"],"_links":{"self":[{"href":"https:\/\/self-issued.info\/index.php?rest_route=\/wp\/v2\/posts\/2894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/self-issued.info\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/self-issued.info\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/self-issued.info\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/self-issued.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2894"}],"version-history":[{"count":5,"href":"https:\/\/self-issued.info\/index.php?rest_route=\/wp\/v2\/posts\/2894\/revisions"}],"predecessor-version":[{"id":2899,"href":"https:\/\/self-issued.info\/index.php?rest_route=\/wp\/v2\/posts\/2894\/revisions\/2899"}],"wp:attachment":[{"href":"https:\/\/self-issued.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/self-issued.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/self-issued.info\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}