Detection rules › Panther
Push Security Authorized IdP Login
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.
| Field | Kind | Values |
|---|---|---|
new.identityProvider | in |
|
object | eq |
|
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.
| Field | Source |
|---|---|
email | new.email |
identityProvider | new.identityProvider |
loginType | new.loginType |
appType | new.appType |