Skip to content
Back to skills

Web Saml

ASecurity

Attack SAML SSO — signature exclusion/wrapping (XSW), unsigned assertions, and comment/XXE tricks to forge authentication. Load on SAML SSO (SAMLResponse, ACS URL, IdP/SP), enterprise login, or "SAML". Signals: SAMLResponse base64 in POST, /saml/acs, <saml:Assertion>, Shibboleth/ADFS/Okta SSO.

  • 20 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 22, 2026
ai-agentsrustgosecurity

Security analysis

A100/100

Scanned September 22, 2026

npx -y skills add NoorQureshi/SploitAgent --skill web-saml --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Web Saml?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Web Saml
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/noorqureshi-web-saml/badge)](https://www.skillsdirectory.com/skills/noorqureshi-web-saml)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: web-saml
description: >
  Attack SAML SSO — signature exclusion/wrapping (XSW), unsigned assertions, and comment/XXE tricks
  to forge authentication. Load on SAML SSO (SAMLResponse, ACS URL, IdP/SP), enterprise login, or
  "SAML". Signals: SAMLResponse base64 in POST, /saml/acs, <saml:Assertion>, Shibboleth/ADFS/Okta SSO.
domain: web
type: technique
stability: learning
modes: [bugbounty, pentest]
severity: critical
owasp: [A07:2021-Auth-Failures]
cwe: [CWE-347, CWE-287]
tools: [burp, SAMLRaider]
schema_version: 1
---

# SAML authentication attacks

## When it applies
The app authenticates via SAML SSO — the browser POSTs a base64 `SAMLResponse` (an XML assertion
signed by the IdP) to the SP's ACS endpoint. Break the signature validation and you forge login as anyone.

## Why it works
SAML security rests entirely on the SP correctly validating the XML signature over the assertion.
XML signature validation is notoriously error-prone: SPs accept unsigned assertions, validate the
wrong element, or can be tricked by **XML Signature Wrapping (XSW)** — where a signed element is
kept for validation but an injected unsigned assertion is what the app actually reads.

## Method
1. **Capture & decode** the `SAMLResponse` (Burp + **SAML Raider** extension). Identify what's
   signed (Response vs Assertion) and the `NameID`/attributes that set the user.
2. **Signature exclusion**: strip the `<ds:Signature>` and send — some SPs accept unsigned assertions.
3. **XSW**: wrap/inject a second assertion (or move the signature) so the validator checks the
   original signed blob but the app consumes your forged assertion with `NameID=admin` (SAML Raider automates the XSW variants).
4. **Comment injection**: `admin@corp.com<!---->.evil` in `NameID` — some parsers read it as `admin@corp.com` post-canonicalization → login as admin.
5. **Other**: key confusion (SP trusts attacker cert), XXE in the SAML parser (→ `web-xxe`), replay
   if no `NotOnOrAfter`/`InResponseTo` checks, `Recipient`/`Audience` not validated.

## Gotchas
- Identify the exact signed element first — XSW works by satisfying the validator while changing what's *used*.
- If signatures are properly validated over the assertion with no wrapping bug, pivot to replay/audience/comment issues.
- Prove with two accounts you own: forge from a low-priv login into a privileged `NameID`.

## Verify success
Authentication as a different/privileged user via a forged or manipulated SAMLResponse the SP accepts.

## References
PortSwigger SAML; SAML Raider; "On Breaking SAML" (XSW, Somorovsky et al.).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…