Detection rules › Panther

Push Security Authorized IdP Login

Severity
informational
Log types
PushSecurity.Activity
Tags
Configuration Required
Reference
https://github.com/pushsecurity/saas-attacks/blob/main/techniques/samljacking/description.md
Source
github.com/panther-labs/panther-analysis

Login to application with unauthorized identity provider which could indicate a SAMLjacking attack.

Rule body yaml

AnalysisType: rule
Filename: push_security_authorized_idp_login.py
RuleID: "Push.Security.Authorized.IdP.Login"
DisplayName: "Push Security Authorized IdP Login"
Enabled: false
CreateAlert: false
LogTypes:
  - PushSecurity.Activity
Tags:
  - Configuration Required
Severity: Info
Description: Login to application with unauthorized identity provider which could indicate a SAMLjacking attack.
DedupPeriodMinutes: 60
Threshold: 1
Reference: https://github.com/pushsecurity/saas-attacks/blob/main/techniques/samljacking/description.md
InlineFilters:
  - All: []
Tests:
  - Name: Google Workspace Password Login
    ExpectedResult: false
    Log:
      id: d240e3f2-3cd6-425f-a835-dad0ff237d09
      new:
        accountId: a93b45a7-fdce-489e-b76d-2bd6862a62ba
        appId: 8348ca36-d254-4e1b-8f31-6837d82fc5cb
        appType: GOOGLE_WORKSPACE
        browser: EDGE
        email: jet.black@issp.com
        employeeId: ca6cf7ce-90e6-4eb5-a262-7899bc48c39c
        identityProvider: GOOGLE_WORKSPACE
        leakedPassword: false
        loginTimestamp: 1.707773386e+09
        loginType: PASSWORD_LOGIN
        os: WINDOWS
        passwordId: 6ae9f0b2-9300-43f0-b210-c0d3c16640f8
        passwordManuallyTyped: false
        sourceIpAddress: 35.90.103.134
        userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.2420.81
        weakPassword: false
        weakPasswordReasons: null
      object: LOGIN
      timestamp: 1.707774319e+09
      version: "1"
  - Name: Microsoft 365 OIDC Login
    ExpectedResult: false
    Log:
      id: d240e3f2-3cd6-425f-a835-dad0ff237d09
      new:
        accountId: a93b45a7-fdce-489e-b76d-2bd6862a62ba
        appId: 8348ca36-d254-4e1b-8f31-6837d82fc5cb
        appType: DROPBOX
        browser: EDGE
        email: jet.black@issp.com
        employeeId: ca6cf7ce-90e6-4eb5-a262-7899bc48c39c
        identityProvider: MICROSOFT_365
        leakedPassword: false
        loginTimestamp: 1.707773386e+09
        loginType: OIDC_LOGIN
        os: WINDOWS
        passwordId: 6ae9f0b2-9300-43f0-b210-c0d3c16640f8
        passwordManuallyTyped: false
        sourceIpAddress: 35.90.103.134
        userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.2420.81
        weakPassword: false
        weakPasswordReasons: null
      object: LOGIN
      timestamp: 1.707774319e+09
      version: "1"
  - Name: Okta Login
    ExpectedResult: true
    Log:
      id: d240e3f2-3cd6-425f-a835-dad0ff237d09
      new:
        accountId: a93b45a7-fdce-489e-b76d-2bd6862a62ba
        appId: 8348ca36-d254-4e1b-8f31-6837d82fc5cb
        appType: Dropbox
        browser: EDGE
        email: jet.black@issp.com
        employeeId: ca6cf7ce-90e6-4eb5-a262-7899bc48c39c
        identityProvider: OKTA
        leakedPassword: false
        loginTimestamp: 1.707773386e+09
        loginType: PASSWORD_LOGIN
        os: WINDOWS
        passwordId: 6ae9f0b2-9300-43f0-b210-c0d3c16640f8
        passwordManuallyTyped: false
        sourceIpAddress: 35.90.103.134
        userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.2420.81
        weakPassword: false
        weakPasswordReasons: null
      object: LOGIN
      timestamp: 1.707774319e+09
      version: "1"
  - Name: Password Login
    ExpectedResult: false
    Log:
      id: d240e3f2-3cd6-425f-a835-dad0ff237d09
      new:
        accountId: a93b45a7-fdce-489e-b76d-2bd6862a62ba
        appId: 8348ca36-d254-4e1b-8f31-6837d82fc5cb
        appType: DROPBOX
        browser: EDGE
        email: jet.black@issp.com
        employeeId: ca6cf7ce-90e6-4eb5-a262-7899bc48c39c
        identityProvider: null
        leakedPassword: false
        loginTimestamp: 1.707773386e+09
        loginType: PASSWORD_LOGIN
        os: WINDOWS
        passwordId: 6ae9f0b2-9300-43f0-b210-c0d3c16640f8
        passwordManuallyTyped: false
        sourceIpAddress: 35.90.103.134
        userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.2420.81
        weakPassword: false
        weakPasswordReasons: null
      object: LOGIN
      timestamp: 1.707774319e+09
      version: "1"

Detection logic

Condition

object eq "LOGIN"
new.identityProvider in "OKTA"

This rule also runs imperative logic the parser cannot express as a filter; the conditions above are the structured part it could extract.

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
new.identityProviderin
  • OKTA
objecteq
  • LOGIN

Output fields

Fields the rule emits when it matches. Chronicle authors list these in the outcome block; they appear on the detection and $risk_score drives alerting. Sentinel / Defender XDR rules build them up through project / summarize / extend stages. Sentinel maps these into alert fields via entityMappings and customDetails; Defender XDR custom detections surface them as alert fields directly.

FieldSource
emailnew.email
identityProvidernew.identityProvider
loginTypenew.loginType
appTypenew.appType