From nobody Fri Sep 17 13:12:33 2021
Return-Path: <jricher@mit.edu>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1])
 by ietfa.amsl.com (Postfix) with ESMTP id 8C4FB3A1267;
 Fri, 17 Sep 2021 13:12:30 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.497
X-Spam-Level: 
X-Spam-Status: No, score=-1.497 tagged_above=-999 required=5
 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, KHOP_HELO_FCRDNS=0.399,
 SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001]
 autolearn=no autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44])
 by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ERdc1Gc6fN22; Fri, 17 Sep 2021 13:12:26 -0700 (PDT)
Received: from outgoing.mit.edu (outgoing-auth-1.mit.edu [18.9.28.11])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (No client certificate requested)
 by ietfa.amsl.com (Postfix) with ESMTPS id 87BD83A1268;
 Fri, 17 Sep 2021 13:12:25 -0700 (PDT)
Received: from [192.168.1.28] (static-71-174-62-56.bstnma.fios.verizon.net
 [71.174.62.56]) (authenticated bits=0)
 (User authenticated as jricher@ATHENA.MIT.EDU)
 by outgoing.mit.edu (8.14.7/8.12.4) with ESMTP id 18HKCNwV026757
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 Fri, 17 Sep 2021 16:12:23 -0400
From: Justin Richer <jricher@mit.edu>
Message-Id: <033CE24C-C143-4067-AA67-012A41EBB9DD@mit.edu>
Content-Type: multipart/alternative;
 boundary="Apple-Mail=_910FFD50-5212-4275-88D6-F3ABDE6A5216"
Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.7\))
Date: Fri, 17 Sep 2021 16:12:23 -0400
In-Reply-To: <PH0PR00MB099738694FBE4FAFCA0E5C2DF5DD9@PH0PR00MB0997.namprd00.prod.outlook.com>
Cc: "oauth@ietf.org" <oauth@ietf.org>
To: Mike Jones <Michael.Jones=40microsoft.com@dmarc.ietf.org>
References: <PH0PR00MB099738694FBE4FAFCA0E5C2DF5DD9@PH0PR00MB0997.namprd00.prod.outlook.com>
X-Mailer: Apple Mail (2.3608.120.23.2.7)
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/6Y_vsEtklVt0Qdkt_h3xrjsCrGY>
Subject: Re: [OAUTH-WG] Adding the option to use server-supplied nonces to
 DPoP
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: OAUTH WG <oauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/oauth>,
 <mailto:oauth-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/oauth/>
List-Post: <mailto:oauth@ietf.org>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/oauth>,
 <mailto:oauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 17 Sep 2021 20:12:31 -0000


--Apple-Mail=_910FFD50-5212-4275-88D6-F3ABDE6A5216
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

Hi Mike, thanks for this writeup and bringing this attack surface to the =
attention of the group! I would like to also discuss how this attack and =
solution could be applied to the proposed HTTP Message Signatures based =
draft for OAuth 2:

https://www.ietf.org/archive/id/draft-richer-oauth-httpsig-00.html =
<https://www.ietf.org/archive/id/draft-richer-oauth-httpsig-00.html>

The generic HTTP Message Signatures draft already includes a =E2=80=9Cnonc=
e=E2=80=9D parameter that can be used with the signature, so no new =
fields need to be defined:

=
https://www.ietf.org/archive/id/draft-ietf-httpbis-message-signatures-06.h=
tml#section-2.3.1-4.3 =
<https://www.ietf.org/archive/id/draft-ietf-httpbis-message-signatures-06.=
html#section-2.3.1-4.3>

However, the OAuth2 application draft doesn=E2=80=99t currently do =
anything special with this parameter. If I=E2=80=99m reading this PR for =
DPoP and the surrounding issues correctly, then I believe the one =
missing piece is adding the `nonce=3D=E2=80=A6` portion to the =
`WWW-Authenticate` response header, and requiring the client to use that =
on the next request. The OAuth2-httpsig draft doesn=E2=80=99t define a =
use of this header, yet, but I could see something similar happening =
there.

However, I=E2=80=99m also wondering if this is something we should bring =
to the HTTP working group and have something in the full HTTP Message =
Signatures draft. This draft doesn=E2=80=99t deal with the =
`Authorization` or `WWW-Authenticate` headers, but it does define an =
`Accept-Signature` header to signal required parameters and signed =
components, for exactly this kind of negotiation. The OAuth2-httpsig =
draft could simply direct the AS/RS to return this `Accept-Signature` =
header with a nonce field in order to cause the client to sign =
subsequent requests using the server-provided nonce.

What are your thoughts on these proposals?

 =E2=80=94 Justin

> On Sep 17, 2021, at 1:03 PM, Mike Jones =
<Michael.Jones=3D40microsoft.com@dmarc.ietf.org> wrote:
>=20
> We all know that using proof-of-possession with issued tokens is a =
means of rendering exfiltrated tokens useless to attackers.  The DPoP =
was created as one of the tools to prevent this.  There=E2=80=99s a huge =
amount of evidence of successful token exfiltration attacks in the wild, =
some of which is referenced at the end of this message.  For instance, =
sometimes the legitimate user of a client is the attacker.  Once =
instance of this is that some banks have cited employees stealing =
legitimate tokens issued on bank computers and taking them to non-bank =
computers, thereby bypassing audit controls.
> =20
> When reviewing DPoP with Microsoft=E2=80=99s identity architects, they =
pointed out that DPoP as written today can still enable exfiltrated DPoP =
tokens to be used by some kinds of attackers; doing so also requires =
that the attackers exfiltrate DPoP proofs.  This is possible when the =
legitimate user of a client is the attacker.
> =20
> Preventing exfiltrated pre-generated DPoP proofs from being used in =
the future requires the server being able to limit their lifetime.  An =
effective means of doing this is to include a server-provided nonce in =
the DPoP proof.  That puts the lifetime of DPoP proofs in control of the =
server, because when a new nonce value is provided, older, possibly =
pre-generated DPoP proofs become invalid at the server.
> =20
> The Microsoft identity server team is already internally using this =
technique with the stale OAuth HTTP Signing draft.  They want to be able =
to use it with DPoP for the same reasons.  DPoP without this won=E2=80=99t=
 mitigate the real security attacks that our systems are encountering.  =
Note that unless a server-provided nonce is used, what is actually being =
proved is possession of a DPoP proof =E2=80=93 not possession of the =
proof-of-possession key.
> =20
> Having discussed this with some of the editors, I have created a pull =
request adding the optional use of server-provided nonces to DPoP.  This =
will break no existing deployments.  But it will enable new deployments =
to choose to use server-contributed nonces to limit DPoP proof =
lifetimes, both for authorization servers and resource servers.  The =
pull request is at https://github.com/danielfett/draft-dpop/pull/81/ =
<https://github.com/danielfett/draft-dpop/pull/81/>.  Reviews of the PR =
are welcomed.  I propose that we merge it and publish draft -04 sometime =
next week, pending review feedback.
> =20
> =3D=3D=3D=3D
> =20
> My colleague Pieter Kasselman assembled some examples of successful =
token exfiltration attacks in the public domain (and helped review the =
PR).  Those follow, for your reading pleasure.
> Introducing a new phishing technique for compromising Office 365 =
accounts (o365blog.com) =
<https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fo365b=
log.com%2Fpost%2Fphishing%2F&data=3D04%7C01%7Cpieter.kasselman%40microsoft=
.com%7Cd16075338fd34e6065fa08d96f18c785%7C72f988bf86f141af91ab2d7cd011db47=
%7C1%7C0%7C637662974517021183%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAi=
LCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=3DNwnf6O67xIXO=
2u0cYFkZBnJrnOl0P6JR1MrXdNLgrr8%3D&reserved=3D0>
> It describes a phishing attack that allows the attacker to obtain an =
Access Token and a Refresh Token (which is then used to obtain =
additional Access Tokens).
> Operationalised with the AADInternals Tool
> The Art of the Device Code Phish - Boku (0xboku.com) =
<https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2F0xbok=
u.com%2F2021%2F07%2F12%2FArtOfDeviceCodePhish.html&data=3D04%7C01%7Cpieter=
.kasselman%40microsoft.com%7Cd16075338fd34e6065fa08d96f18c785%7C72f988bf86=
f141af91ab2d7cd011db47%7C1%7C0%7C637662974517021183%7CUnknown%7CTWFpbGZsb3=
d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C100=
0&sdata=3DwlEfBuS%2FnIl9qIf51hpQcU2UmFCsnuC0ksSVE%2FXdEKw%3D&reserved=3D0>=

> It extends the above attack and shows step-by-step how to exfiltrate a =
Access Token and a Refresh Token with a similar phishing attack and then =
obtain additional tokens.
> Operationalised with AADInternals and TokenTactics
> DEF CON 29 - Jenko Hwong - New Phishing Attacks Exploiting OAuth =
Authentication Flows - YouTube =
<https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fwww.y=
outube.com%2Fwatch%3Fv%3D9slRYvpKHp4&data=3D04%7C01%7Cpieter.kasselman%40m=
icrosoft.com%7Cd16075338fd34e6065fa08d96f18c785%7C72f988bf86f141af91ab2d7c=
d011db47%7C1%7C0%7C637662974517031142%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4w=
LjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=3D9rMI=
1ay6eJ4RmTRTmHglAunMiQuLfxzZUpdk%2F012Z9Q%3D&reserved=3D0>
> It shows another attack to exfiltrate tokens using phishing techniques =
that exploit Device Code Flow.
> It includes a demo of the attack that shows how it bypasses MFA and =
anti-Phishing controls and then uses the PRT to get tokens and pivot to =
other services.
> Tools available as open source.
> Requesting Azure AD Request Tokens on Azure-AD-joined Machines for =
Browser SSO | by Lee Christensen | Posts By SpecterOps Team Members =
<https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fposts=
.specterops.io%2Frequesting-azure-ad-request-tokens-on-azure-ad-joined-mac=
hines-for-browser-sso-2b0409caad30&data=3D04%7C01%7Cpieter.kasselman%40mic=
rosoft.com%7Cd16075338fd34e6065fa08d96f18c785%7C72f988bf86f141af91ab2d7cd0=
11db47%7C1%7C0%7C637662974517031142%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLj=
AwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=3DOLHm5H=
kOAQZs0uE95OtlvUxRQlk06ylecU09%2B2hacOw%3D&reserved=3D0>
> Outlines how a Refresh Token can be exfiltrated from a Chrome browser
> Operationalised with a tool called RequestAADRefreshToken
> Abusing Azure AD SSO with the Primary Refresh Token - dirkjanm.io =
<https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fdirkj=
anm.io%2Fabusing-azure-ad-sso-with-the-primary-refresh-token%2F&data=3D04%=
7C01%7Cpieter.kasselman%40microsoft.com%7Cd16075338fd34e6065fa08d96f18c785=
%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637662974517031142%7CUnknown=
%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI=
6Mn0%3D%7C1000&sdata=3DJ8rcX59vjyaVlvhdzDBM%2FUELF38LEykzo84an9opNc4%3D&re=
served=3D0>
> Extracts the Primary Refresh Token through Chrome
> Requires executing code on the users device to interact with the =
Chrome browser, executed in the user context, no elevated privileges =
needed
> Operationalised through ROADtoken and ROADtools.
> Digging further into the Primary Refresh Token - dirkjanm.io =
<https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fdirkj=
anm.io%2Fdigging-further-into-the-primary-refresh-token%2F&data=3D04%7C01%=
7Cpieter.kasselman%40microsoft.com%7Cd16075338fd34e6065fa08d96f18c785%7C72=
f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637662974517041097%7CUnknown%7CTW=
FpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%=
3D%7C1000&sdata=3DzfgTacWTD38btnIwrPWEStjIIYNfw9tRzjjP95S8gwI%3D&reserved=3D=
0>
> Describes how the PRT and session keys can be extracted from a device =
(requires local admin)
> Operationalised through ROADtools=20
>                                                        -- Mike
> =20
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org <mailto:OAuth@ietf.org>
> https://www.ietf.org/mailman/listinfo/oauth =
<https://www.ietf.org/mailman/listinfo/oauth>

--Apple-Mail=_910FFD50-5212-4275-88D6-F3ABDE6A5216
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;" class=3D"">Hi =
Mike, thanks for this writeup and bringing this attack surface to the =
attention of the group! I would like to also discuss how this attack and =
solution could be applied to the proposed HTTP Message Signatures based =
draft for OAuth 2:<div class=3D""><br class=3D""></div><div class=3D""><a =
href=3D"https://www.ietf.org/archive/id/draft-richer-oauth-httpsig-00.html=
" =
class=3D"">https://www.ietf.org/archive/id/draft-richer-oauth-httpsig-00.h=
tml</a></div><div class=3D""><br class=3D""></div><div class=3D"">The =
generic HTTP Message Signatures draft already includes a =E2=80=9Cnonce=E2=
=80=9D parameter that can be used with the signature, so no new fields =
need to be defined:</div><div class=3D""><br class=3D""></div><div =
class=3D""><a =
href=3D"https://www.ietf.org/archive/id/draft-ietf-httpbis-message-signatu=
res-06.html#section-2.3.1-4.3" =
class=3D"">https://www.ietf.org/archive/id/draft-ietf-httpbis-message-sign=
atures-06.html#section-2.3.1-4.3</a></div><div class=3D""><br =
class=3D""></div><div class=3D"">However, the OAuth2 application draft =
doesn=E2=80=99t currently do anything special with this parameter. If =
I=E2=80=99m reading this PR for DPoP and the surrounding issues =
correctly, then I believe the one missing piece is adding the =
`nonce=3D=E2=80=A6` portion to the `WWW-Authenticate` response header, =
and requiring the client to use that on the next request. The =
OAuth2-httpsig draft doesn=E2=80=99t define a use of this header, yet, =
but I could see something similar happening there.</div><div =
class=3D""><br class=3D""></div><div class=3D"">However, I=E2=80=99m =
also wondering if this is something we should bring to the HTTP working =
group and have something in the full HTTP Message Signatures draft. This =
draft doesn=E2=80=99t deal with the `Authorization` or =
`WWW-Authenticate` headers, but it does define an `Accept-Signature` =
header to signal required parameters and signed components, for exactly =
this kind of negotiation. The OAuth2-httpsig draft could simply direct =
the AS/RS to return this `Accept-Signature` header with a nonce field in =
order to cause the client to sign subsequent requests using the =
server-provided nonce.</div><div class=3D""><br class=3D""></div><div =
class=3D"">What are your thoughts on these proposals?</div><div =
class=3D""><br class=3D""></div><div class=3D"">&nbsp;=E2=80=94 =
Justin</div><div class=3D""><div><br class=3D""><blockquote type=3D"cite" =
class=3D""><div class=3D"">On Sep 17, 2021, at 1:03 PM, Mike Jones =
&lt;<a href=3D"mailto:Michael.Jones=3D40microsoft.com@dmarc.ietf.org" =
class=3D"">Michael.Jones=3D40microsoft.com@dmarc.ietf.org</a>&gt; =
wrote:</div><br class=3D"Apple-interchange-newline"><div class=3D""><div =
class=3D"WordSection1" style=3D"page: WordSection1; caret-color: rgb(0, =
0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
text-align: start; text-indent: 0px; text-transform: none; white-space: =
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none;"><div style=3D"margin: 0in; font-size: 11pt; =
font-family: Calibri, sans-serif;" class=3D"">We all know that using =
proof-of-possession with issued tokens is a means of rendering =
exfiltrated tokens useless to attackers.&nbsp; The DPoP was created as =
one of the tools to prevent this.&nbsp; There=E2=80=99s a huge amount of =
evidence of successful token exfiltration attacks in the wild, some of =
which is referenced at the end of this message.&nbsp; For instance, =
sometimes the legitimate user of a client is the attacker.&nbsp; Once =
instance of this is that some banks have cited employees stealing =
legitimate tokens issued on bank computers and taking them to non-bank =
computers, thereby bypassing audit controls.<o:p =
class=3D""></o:p></div><div style=3D"margin: 0in; font-size: 11pt; =
font-family: Calibri, sans-serif;" class=3D""><o:p =
class=3D"">&nbsp;</o:p></div><div style=3D"margin: 0in; font-size: 11pt; =
font-family: Calibri, sans-serif;" class=3D"">When reviewing DPoP with =
Microsoft=E2=80=99s identity architects, they pointed out that DPoP as =
written today can still enable exfiltrated DPoP tokens to be used by =
some kinds of attackers; doing so also requires that the attackers =
exfiltrate DPoP proofs.&nbsp; This is possible when the legitimate user =
of a client is the attacker.<o:p class=3D""></o:p></div><div =
style=3D"margin: 0in; font-size: 11pt; font-family: Calibri, =
sans-serif;" class=3D""><o:p class=3D"">&nbsp;</o:p></div><div =
style=3D"margin: 0in; font-size: 11pt; font-family: Calibri, =
sans-serif;" class=3D"">Preventing exfiltrated pre-generated DPoP proofs =
from being used in the future requires the server being able to limit =
their lifetime.&nbsp; An effective means of doing this is to include a =
server-provided nonce in the DPoP proof.&nbsp; That puts the lifetime of =
DPoP proofs in control of the server, because when a new nonce value is =
provided, older, possibly pre-generated DPoP proofs become invalid at =
the server.<o:p class=3D""></o:p></div><div style=3D"margin: 0in; =
font-size: 11pt; font-family: Calibri, sans-serif;" class=3D""><o:p =
class=3D"">&nbsp;</o:p></div><div style=3D"margin: 0in; font-size: 11pt; =
font-family: Calibri, sans-serif;" class=3D"">The Microsoft identity =
server team is already internally using this technique with the stale =
OAuth HTTP Signing draft.&nbsp; They want to be able to use it with DPoP =
for the same reasons.&nbsp; DPoP without this won=E2=80=99t mitigate the =
real security attacks that our systems are encountering.&nbsp; Note that =
unless a server-provided nonce is used, what is actually being proved is =
possession of a DPoP proof =E2=80=93 not possession of the =
proof-of-possession key.<o:p class=3D""></o:p></div><div style=3D"margin: =
0in; font-size: 11pt; font-family: Calibri, sans-serif;" class=3D""><o:p =
class=3D"">&nbsp;</o:p></div><div style=3D"margin: 0in; font-size: 11pt; =
font-family: Calibri, sans-serif;" class=3D"">Having discussed this with =
some of the editors, I have created a pull request adding the optional =
use of server-provided nonces to DPoP. &nbsp;This will break no existing =
deployments.&nbsp; But it will enable new deployments to choose to use =
server-contributed nonces to limit DPoP proof lifetimes, both for =
authorization servers and resource servers.&nbsp; The pull request is =
at<span class=3D"Apple-converted-space">&nbsp;</span><a =
href=3D"https://github.com/danielfett/draft-dpop/pull/81/" style=3D"color:=
 rgb(5, 99, 193); text-decoration: underline;" =
class=3D"">https://github.com/danielfett/draft-dpop/pull/81/</a>.&nbsp; =
Reviews of the PR are welcomed.&nbsp; I propose that we merge it and =
publish draft -04 sometime next week, pending review feedback.<o:p =
class=3D""></o:p></div><div style=3D"margin: 0in; font-size: 11pt; =
font-family: Calibri, sans-serif;" class=3D""><o:p =
class=3D"">&nbsp;</o:p></div><div style=3D"margin: 0in; font-size: 11pt; =
font-family: Calibri, sans-serif;" class=3D"">=3D=3D=3D=3D<o:p =
class=3D""></o:p></div><div style=3D"margin: 0in; font-size: 11pt; =
font-family: Calibri, sans-serif;" class=3D""><o:p =
class=3D"">&nbsp;</o:p></div><div style=3D"margin: 0in; font-size: 11pt; =
font-family: Calibri, sans-serif;" class=3D"">My colleague Pieter =
Kasselman assembled some examples of successful token exfiltration =
attacks in the public domain (and helped review the PR).&nbsp; Those =
follow, for your reading pleasure.<span lang=3D"EN-IE" class=3D""><o:p =
class=3D""></o:p></span></div><ol start=3D"1" type=3D"1" =
style=3D"margin-bottom: 0in;" class=3D""><li class=3D"MsoNormal" =
style=3D"margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
vertical-align: middle;"><span lang=3D"EN-IE" class=3D""><a =
href=3D"https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%=
2Fo365blog.com%2Fpost%2Fphishing%2F&amp;data=3D04%7C01%7Cpieter.kasselman%=
40microsoft.com%7Cd16075338fd34e6065fa08d96f18c785%7C72f988bf86f141af91ab2=
d7cd011db47%7C1%7C0%7C637662974517021183%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiM=
C4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=
=3DNwnf6O67xIXO2u0cYFkZBnJrnOl0P6JR1MrXdNLgrr8%3D&amp;reserved=3D0" =
target=3D"_blank" style=3D"color: rgb(5, 99, 193); text-decoration: =
underline;" class=3D"">Introducing a new phishing technique for =
compromising Office 365 accounts (o365blog.com)</a><o:p =
class=3D""></o:p></span></li><ol start=3D"1" type=3D"a" =
style=3D"margin-bottom: 0in;" class=3D""><li class=3D"MsoNormal" =
style=3D"margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
vertical-align: middle;"><span lang=3D"EN-IE" class=3D"">It describes a =
phishing attack that allows the attacker to obtain an Access Token and a =
Refresh Token (which is then used to obtain additional Access =
Tokens).<o:p class=3D""></o:p></span></li><li class=3D"MsoNormal" =
style=3D"margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
vertical-align: middle;"><span lang=3D"EN-IE" class=3D"">Operationalised =
with the AADInternals Tool<o:p class=3D""></o:p></span></li></ol><li =
class=3D"MsoNormal" style=3D"margin: 0in; font-size: 11pt; font-family: =
Calibri, sans-serif; vertical-align: middle;"><span lang=3D"EN-IE" =
class=3D""><a =
href=3D"https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%=
2F0xboku.com%2F2021%2F07%2F12%2FArtOfDeviceCodePhish.html&amp;data=3D04%7C=
01%7Cpieter.kasselman%40microsoft.com%7Cd16075338fd34e6065fa08d96f18c785%7=
C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637662974517021183%7CUnknown%7=
CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6M=
n0%3D%7C1000&amp;sdata=3DwlEfBuS%2FnIl9qIf51hpQcU2UmFCsnuC0ksSVE%2FXdEKw%3=
D&amp;reserved=3D0" target=3D"_blank" style=3D"color: rgb(5, 99, 193); =
text-decoration: underline;" class=3D"">The Art of the Device Code Phish =
- Boku (0xboku.com)</a><o:p class=3D""></o:p></span></li></ol><ol =
start=3D"2" type=3D"1" style=3D"margin-bottom: 0in;" class=3D""><ol =
start=3D"1" type=3D"a" style=3D"margin-bottom: 0in;" class=3D""><li =
class=3D"MsoNormal" style=3D"margin: 0in; font-size: 11pt; font-family: =
Calibri, sans-serif; vertical-align: middle;"><span lang=3D"EN-IE" =
class=3D"">It extends the above attack and shows step-by-step how to =
exfiltrate a Access Token and a Refresh Token with a similar phishing =
attack and then obtain additional tokens.<o:p =
class=3D""></o:p></span></li><li class=3D"MsoNormal" style=3D"margin: =
0in; font-size: 11pt; font-family: Calibri, sans-serif; vertical-align: =
middle;"><span lang=3D"EN-IE" class=3D"">Operationalised with =
AADInternals and TokenTactics<o:p class=3D""></o:p></span></li></ol><li =
class=3D"MsoNormal" style=3D"margin: 0in; font-size: 11pt; font-family: =
Calibri, sans-serif; vertical-align: middle;"><span lang=3D"EN-IE" =
class=3D""><a =
href=3D"https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%=
2Fwww.youtube.com%2Fwatch%3Fv%3D9slRYvpKHp4&amp;data=3D04%7C01%7Cpieter.ka=
sselman%40microsoft.com%7Cd16075338fd34e6065fa08d96f18c785%7C72f988bf86f14=
1af91ab2d7cd011db47%7C1%7C0%7C637662974517031142%7CUnknown%7CTWFpbGZsb3d8e=
yJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&a=
mp;sdata=3D9rMI1ay6eJ4RmTRTmHglAunMiQuLfxzZUpdk%2F012Z9Q%3D&amp;reserved=3D=
0" target=3D"_blank" style=3D"color: rgb(5, 99, 193); text-decoration: =
underline;" class=3D""><span style=3D"font-size: 10.5pt; font-family: =
&quot;Segoe UI&quot;, sans-serif; background-color: white; =
background-position: initial initial; background-repeat: initial =
initial;" class=3D"">DEF CON 29 - Jenko Hwong - New Phishing Attacks =
Exploiting OAuth Authentication Flows - YouTube</span></a><o:p =
class=3D""></o:p></span></li></ol><ol start=3D"3" type=3D"1" =
style=3D"margin-bottom: 0in;" class=3D""><ol start=3D"1" type=3D"a" =
style=3D"margin-bottom: 0in;" class=3D""><li class=3D"MsoNormal" =
style=3D"margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
vertical-align: middle;"><span lang=3D"EN-IE" class=3D"">It shows =
another attack to exfiltrate tokens using phishing techniques that =
exploit Device Code Flow.<o:p class=3D""></o:p></span></li><li =
class=3D"MsoNormal" style=3D"margin: 0in; font-size: 11pt; font-family: =
Calibri, sans-serif; vertical-align: middle;"><span lang=3D"EN-IE" =
class=3D"">It includes a demo of the attack that shows how it bypasses =
MFA and anti-Phishing controls and then uses the PRT to get tokens and =
pivot to other services.<o:p class=3D""></o:p></span></li><li =
class=3D"MsoNormal" style=3D"margin: 0in; font-size: 11pt; font-family: =
Calibri, sans-serif; vertical-align: middle;"><span lang=3D"EN-IE" =
class=3D"">Tools available as open source.<o:p =
class=3D""></o:p></span></li></ol><li class=3D"MsoNormal" style=3D"margin:=
 0in; font-size: 11pt; font-family: Calibri, sans-serif; vertical-align: =
middle;"><span lang=3D"EN-IE" class=3D""><a =
href=3D"https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%=
2Fposts.specterops.io%2Frequesting-azure-ad-request-tokens-on-azure-ad-joi=
ned-machines-for-browser-sso-2b0409caad30&amp;data=3D04%7C01%7Cpieter.kass=
elman%40microsoft.com%7Cd16075338fd34e6065fa08d96f18c785%7C72f988bf86f141a=
f91ab2d7cd011db47%7C1%7C0%7C637662974517031142%7CUnknown%7CTWFpbGZsb3d8eyJ=
WIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp=
;sdata=3DOLHm5HkOAQZs0uE95OtlvUxRQlk06ylecU09%2B2hacOw%3D&amp;reserved=3D0=
" target=3D"_blank" style=3D"color: rgb(5, 99, 193); text-decoration: =
underline;" class=3D"">Requesting Azure AD Request Tokens on =
Azure-AD-joined Machines for Browser SSO | by Lee Christensen | Posts By =
SpecterOps Team Members</a><o:p class=3D""></o:p></span></li></ol><ol =
start=3D"4" type=3D"1" style=3D"margin-bottom: 0in;" class=3D""><ol =
start=3D"1" type=3D"a" style=3D"margin-bottom: 0in;" class=3D""><li =
class=3D"MsoNormal" style=3D"margin: 0in; font-size: 11pt; font-family: =
Calibri, sans-serif; vertical-align: middle;"><span lang=3D"EN-IE" =
class=3D"">Outlines how a Refresh Token can be exfiltrated from a Chrome =
browser<o:p class=3D""></o:p></span></li><li class=3D"MsoNormal" =
style=3D"margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
vertical-align: middle;"><span lang=3D"EN-IE" class=3D"">Operationalised =
with a tool called RequestAADRefreshToken<o:p =
class=3D""></o:p></span></li></ol><li class=3D"MsoNormal" style=3D"margin:=
 0in; font-size: 11pt; font-family: Calibri, sans-serif; vertical-align: =
middle;"><span lang=3D"EN-IE" class=3D""><a =
href=3D"https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%=
2Fdirkjanm.io%2Fabusing-azure-ad-sso-with-the-primary-refresh-token%2F&amp=
;data=3D04%7C01%7Cpieter.kasselman%40microsoft.com%7Cd16075338fd34e6065fa0=
8d96f18c785%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C63766297451703114=
2%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1h=
aWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=3DJ8rcX59vjyaVlvhdzDBM%2FUELF38LEykzo8=
4an9opNc4%3D&amp;reserved=3D0" target=3D"_blank" style=3D"color: rgb(5, =
99, 193); text-decoration: underline;" class=3D"">Abusing Azure AD SSO =
with the Primary Refresh Token - dirkjanm.io</a><o:p =
class=3D""></o:p></span></li></ol><ol start=3D"5" type=3D"1" =
style=3D"margin-bottom: 0in;" class=3D""><ol start=3D"1" type=3D"a" =
style=3D"margin-bottom: 0in;" class=3D""><li class=3D"MsoNormal" =
style=3D"margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
vertical-align: middle;"><span lang=3D"EN-IE" class=3D"">Extracts the =
Primary Refresh Token through Chrome<o:p class=3D""></o:p></span></li><li =
class=3D"MsoNormal" style=3D"margin: 0in; font-size: 11pt; font-family: =
Calibri, sans-serif; vertical-align: middle;"><span lang=3D"EN-IE" =
class=3D"">Requires executing code on the users device to interact with =
the Chrome browser, executed in the user context, no elevated privileges =
needed<o:p class=3D""></o:p></span></li><li class=3D"MsoNormal" =
style=3D"margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
vertical-align: middle;"><span lang=3D"EN-IE" class=3D"">Operationalised =
through ROADtoken and ROADtools.<o:p class=3D""></o:p></span></li></ol><li=
 class=3D"MsoNormal" style=3D"margin: 0in; font-size: 11pt; font-family: =
Calibri, sans-serif; vertical-align: middle;"><span lang=3D"EN-IE" =
class=3D""><a =
href=3D"https://nam06.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%=
2Fdirkjanm.io%2Fdigging-further-into-the-primary-refresh-token%2F&amp;data=
=3D04%7C01%7Cpieter.kasselman%40microsoft.com%7Cd16075338fd34e6065fa08d96f=
18c785%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637662974517041097%7CU=
nknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiL=
CJXVCI6Mn0%3D%7C1000&amp;sdata=3DzfgTacWTD38btnIwrPWEStjIIYNfw9tRzjjP95S8g=
wI%3D&amp;reserved=3D0" target=3D"_blank" style=3D"color: rgb(5, 99, =
193); text-decoration: underline;" class=3D"">Digging further into the =
Primary Refresh Token - dirkjanm.io</a><o:p =
class=3D""></o:p></span></li></ol><ol start=3D"6" type=3D"1" =
style=3D"margin-bottom: 0in;" class=3D""><ol start=3D"1" type=3D"a" =
style=3D"margin-bottom: 0in;" class=3D""><li class=3D"MsoNormal" =
style=3D"margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
vertical-align: middle;"><span lang=3D"EN-IE" class=3D"">Describes how =
the PRT and session keys can be extracted from a device (requires local =
admin)<o:p class=3D""></o:p></span></li><li class=3D"MsoNormal" =
style=3D"margin: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
vertical-align: middle;"><span lang=3D"EN-IE" class=3D"">Operationalised =
through ROADtools<span class=3D"Apple-converted-space">&nbsp;</span><o:p =
class=3D""></o:p></span></li></ol></ol><div style=3D"margin: 0in;" =
class=3D""><span lang=3D"EN-IE" =
class=3D"">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Mike<o:p =
class=3D""></o:p></span></div><div style=3D"margin: 0in;" class=3D""><span=
 lang=3D"EN-IE" class=3D""><o:p =
class=3D"">&nbsp;</o:p></span></div></div><span style=3D"caret-color: =
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: =
normal; font-variant-caps: normal; font-weight: normal; letter-spacing: =
normal; text-align: start; text-indent: 0px; text-transform: none; =
white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; =
text-decoration: none; float: none; display: inline !important;" =
class=3D"">_______________________________________________</span><br =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><span =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none; float: none; =
display: inline !important;" class=3D"">OAuth mailing list</span><br =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><a =
href=3D"mailto:OAuth@ietf.org" style=3D"color: rgb(5, 99, 193); =
text-decoration: underline; font-family: Helvetica; font-size: 12px; =
font-style: normal; font-variant-caps: normal; font-weight: normal; =
letter-spacing: normal; orphans: auto; text-align: start; text-indent: =
0px; text-transform: none; white-space: normal; widows: auto; =
word-spacing: 0px; -webkit-text-size-adjust: auto; =
-webkit-text-stroke-width: 0px;" class=3D"">OAuth@ietf.org</a><br =
style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: =
12px; font-style: normal; font-variant-caps: normal; font-weight: =
normal; letter-spacing: normal; text-align: start; text-indent: 0px; =
text-transform: none; white-space: normal; word-spacing: 0px; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><a =
href=3D"https://www.ietf.org/mailman/listinfo/oauth" style=3D"color: =
rgb(5, 99, 193); text-decoration: underline; font-family: Helvetica; =
font-size: 12px; font-style: normal; font-variant-caps: normal; =
font-weight: normal; letter-spacing: normal; orphans: auto; text-align: =
start; text-indent: 0px; text-transform: none; white-space: normal; =
widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; =
-webkit-text-stroke-width: 0px;" =
class=3D"">https://www.ietf.org/mailman/listinfo/oauth</a></div></blockquo=
te></div><br class=3D""></div></body></html>=

--Apple-Mail=_910FFD50-5212-4275-88D6-F3ABDE6A5216--

