Quick fix
Inventory browser capabilities genuinely required by each application and embedded origin.
What this finding means
SecuTest records whether a `Permissions-Policy` header is present. It does not judge every directive because required features vary by application. The control reduces capability exposure but does not replace browser permission prompts or iframe sandboxing.
Associated attack or threat scenario
How the attack or failure scenario works
Permissions Policy limits features such as camera, microphone, geolocation, fullscreen, and payment APIs for the page and frames. If a script injection or untrusted iframe is present, a restrictive policy can prevent it from reaching capabilities the application never intended to expose.
Conditions and limitations
- The application includes compromised script, XSS, or untrusted embedded content.
- The browser feature is available in the victim's context and user permissions allow access where required.
- No effective policy disables that feature for the page or frame.
Why it matters
Step-by-step fix
Where to make the change
- The outermost component emitting the public HTTP response: CDN, reverse proxy, ingress, web server, or application middleware.
- Apply the control consistently to normal pages, redirects, error responses, and relevant subdomains.
Remediation procedure
- Inventory browser capabilities genuinely required by each application and embedded origin.
- Deny unused features by default and allow only specific trusted origins.
- Set the header at the public response layer and combine it with iframe `allow` and `sandbox` attributes.
- Test video calls, geolocation, payment, document, and embedded workflows after enforcement.
Commands and configuration examples
Replace example values with the hostname, selector, IP address, port, provider, or policy values shown in your SecuTest evidence. Review every example before production use.
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=()
add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=()" always;
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=()"
Verify the fix
- Inspect the `Permissions-Policy` response header.
- Use browser developer tools to confirm denied features are blocked in untrusted frames.
- Test required features in top-level and embedded contexts.
- Review the policy whenever a new third-party widget is added.
After DNS, CDN, certificate, mail, or application propagation completes, run a fresh SecuTest scan and compare the new evidence with the original finding.
Common mistakes
- Disabling a feature globally before identifying a legitimate business workflow.
- Using obsolete Feature-Policy syntax.
- Assuming Permissions Policy stops an injected script from accessing ordinary application data.