π VAPT Checklist for iframe & postMessage Communication
β
IFRAME Security Considerations
Check
Description
X-Frame-Options header
Should be set to DENY or SAMEORIGIN to prevent Clickjacking.
Content-Security-Policy (CSP)
Use frame-ancestors, child-src, frame-src directives to restrict embedding origins.
Sandboxing iframes
Use sandbox attribute with strict flags like allow-scripts or allow-forms.
Avoid unnecessary iframe permissions
E.g., allowfullscreen, allowpopups can increase risk if not required.
Cross-origin iframe checks
If external domains are embedded, test for XSS or insecure handling in the iframe content.
Form input behavior in iframe
Ensure the embedded content cannot be used for phishing, form jacking, or injection.
β
postMessage Security Considerations
Check
Description
Always validate event.origin
Critical: donβt trust messages from * or unknown domains.
Strict allowlist of origins
Compare event.origin against known safe domains.
Validate structure of event.data
Use strict schema validation; avoid trusting arbitrary keys or values.
Avoid sensitive actions triggered directly
Donβt delete users, perform redirects, or auth actions based on messages alone.
No sensitive data in postMessage
Tokens, internal state, or user data should not be passed without encryption + auth.
Always use targetOrigin in sender
Avoid postMessage(..., "*") unless you're sure there's no sensitive data.
π§ͺ Combined Scenario Vulnerabilities
Scenario
Risk
Trusted parent β untrusted iframe + insecure postMessage
Privilege escalation, message forgery
Untrusted parent β trusted iframe
Clickjacking, phishing
PostMessage triggers logic without auth
Business logic abuse, account manipulation
No CSP + no XFO + iframe + messages
Complete UI spoofing, full-frame phishing
π‘οΈ Recommended Mitigations
Area
Recommendation
Framing protection
Use X-Frame-Options: DENY or Content-Security-Policy: frame-ancestors 'none'
Sandbox iframes
E.g., <iframe sandbox="allow-scripts"> unless more permissions are explicitly needed
Message validation
On receiving messages: check event.origin, event.source, and event.data content
Safe sender
Always use explicit targetOrigin, avoid using "*"
Auth checks
All business-critical logic should be behind session/auth validation, not just message triggers
π₯ PoC: Cross-Origin postMessage Spoofing
This code simulates an attacker page trying to send a forged message to a target app that listens to postMessage.
<!DOCTYPE html>
< html >
< head >
< title > PoC: Cross-origin Message Spoofing</ title >
</ head >
< body >
< h2 > Sending forged postMessage...</ h2 >
< script >
// Target origin: victim site
const targetOrigin = "https://victim-app.example.com" ;
// Open the target in an iframe (or window)
const win = window . open ( targetOrigin ) ;
// Wait briefly before sending message
setTimeout ( ( ) => {
win . postMessage (
{
action : "deleteUser" ,
user : "admin"
} ,
"*"
) ;
} , 3000 ) ;
</ script >
</ body >
</ html >
Monitor browser postMessage events using DevTools console (message event listener).
Inject forged postMessage events and see if the app reacts without validating origin or structure.
Review JS source for window.addEventListener("message", handler) and locate handler logic.
π Reporting Title Samples
Client-Side Security | Missing origin validation in postMessage receiver
Clickjacking | Absence of X-Frame-Options allows sensitive UI to be framed
π Additional iframe Security Issues
Occurs when a malicious site embeds the target app in an invisible iframe and tricks users into clicking buttons.
Mitigation : Use X-Frame-Options: DENY or Content-Security-Policy: frame-ancestors 'none'.
2. Phishing or UI Redress Attacks
Third-party iframes may overlay or mimic legitimate UI components.
Mitigation : Use sandbox with minimal permissions and CSS controls to block pointer events.
3. Data Leakage via Referrer Headers
Embedding secure content in iframes may leak tokens in URLs via the Referer header.
Mitigation : Use Referrer-Policy: no-referrer or avoid embedding sensitive resources.
4. Untrusted Iframe Message Spoofing
Untrusted iframes can spoof postMessage events and receive sensitive responses.
Mitigation : Always validate event.origin and event.source.
5. Third-party iframe JavaScript Injection
If third-party iframe content is under partial control (e.g., Markdown rendering), it can inject JS to escape sandbox.
Mitigation : Use strong CSP, HTML sanitization, and sandbox without allow-scripts.
β
iframe-Specific Security Checklist
Area
Best Practice
Clickjacking protection
X-Frame-Options: DENY or Content-Security-Policy: frame-ancestors
Third-party iframes
Use <iframe sandbox> with least privileges
Data privacy
Avoid passing tokens or user data to embedded iframes unless scoped + validated
Message integrity
Always verify postMessage sender origin and structure
Referrer control
Use Referrer-Policy: no-referrer to avoid token leakage
JS isolation
Avoid allow-scripts unless strictly needed, and pair with CSP