Strategies for Securing Web Content
Strategies for Securing Web Content
WWDC 2018
Secure Transport
Your ToDo list
- HTTPS and WSS
- Strict Transport Security ( HSTS )
- Auto-upgrades your domain - Upgrade Insecure Request ( UIR )
- Auto-upgrades cross-origin loads - Secure Cookies
- Are never sent in plaintext


Cross-Origin Loads

Cross-Origin Lockdown

Subresource integrity
Check the integrity before executing the code


Content security policy


HttpOnly cookies
- HTTP only means don’t expose the cookie in the
document.cookie
JavaScript API

SameSite cookies
- Only send it when I’m the page owner,
when I’m the main page, not when I’m embedded. - If your web content is being embedded by someone you don’t trust,
the SameSite cookie will not be sent and your server can detect this.


Cross-Origin-Resource-Policy
- Only my own site can load this
- Only when my domain name is the main page domain and I’m pulling in this image, then load the image into the web content process
- When someone tries to cross-origin load your image or your script and
you’re sending this response header, those things won’t be loaded

Cross-Origin-Window-Policy
- The opener can even navigate your window outside of your control 😡

Cross-origin attacks
Cross-Site Scripting ( exam )
- Trying to steal the cookies of that user ( by a message )😡
- Http Only cookies protect your cookies 😆

Cross-origin attacks
Compromised CDN ( exam )
- Redirecting that script request to evil.example, loading attack code 😡
- If it doesn’t match the check sum, you’re going to load is off of your own server instead. So, that attack is also foiled 😆


Cross-origin attacks
Cross-Site Request Forgeries ( exam )
- The attacker that of course has phished one of your users, meaning sent a link and lured that user onto the attacker’s site, evil.example 😡
- The victim user doesn’t realize is that there’s a hidden resource load with your web content sending a message on the victim user’s behalf 😡
- Use Same-Site Cookies. They will not be sent in the embedded case, which means that your server will detect I’m being embedded here.

Speculative Execution Attacks
- Speculative Execution and the Attack (Spectre)
- Defenses
- WKWebView
- Content Security Policy
- HttpOnly cookies
- SameSite cookies
- Cross-Origin-Resource-Policy
Speculative Execution Defined
- Make sure your web content doesn’t end up in the same process as a frame from evil.example


UIWebView
- Infectious 😡

WKWebView
- Not infectious 😆
- Use WKWebView

Speculative Execution Attacks
Content security policy
- You might have an embedded social widget from social.example, but then you might have an injection attack,
maybe it’s the messaging thing again where someone can send markup in a message and
you accidentally render it and they pull in an iframe from evil.example 😡 - Specifying from where you allow frame.
Don’t allow evil.example 😆 frame-ancestors 'none'
— never iframe me

Speculative Execution Attacks
HttpOnly cookies
- evil.example can reach into an iframe from your content and actually read the cookies 😡
- Use HttpOnly. We don’t need to expose in the
document.cookie
API 😆

Speculative Execution Attacks
SameSite cookies
- evil.example has decide to try to pull off a speculative execution attack against your content. Loaded an iframe with your content. 😡
- SameSite cookie doesn’t get sent.
Server will know that 😆

Speculative Execution Attacks
Cross-Origin-Resource-Policy, Cross-Origin Window Policy
- evil.example could wait until your user loses focus of that page of yours and then use the handle to navigate it to a fraud page that looks like your page and asks the user to please log in again. 😡
- Use Cross-Origin Window Policy.
There will be no handler for the attacker page to navigate your window with 😆

Window Control Attacks
- Malicious window navigation

- Defense: Cross-Origin-Window-Policy header

Take Action
Baseline
- Use transport security ( https, wss)
- Mark cookies HttpOnly and Secure
- Migrate from UIWebView to WKWebView
- https://webkit.org/blog/
