Shikata Ga Nai

Private? There is no such things.

1st Bug Bounty Write-Up — Open Redirect Vulnerability on Login Pageを訳してみた

Hello there, ('ω')ノ

 

1 回目のバグ報奨金の報告 — ログイン ページのオープン リダイレクトの脆弱性を。

 

脆弱性:

 オープンリダイレクト

 

記事:

 https://medium.com/@nnez/1st-bug-bounty-write-up-open-redirect-vulnerability-on-login-page-5e0dd9a6eb69

 

シンプルなものである Open Redirect から。

 

注:

オープンリダイレクトを探している場合は、まず、このタイプの脆弱性を

受け入れるかどうかをポリシーで確認して。

ほとんどのプログラムは、アクセス トークンの窃取などにつながる場合にのみ、

オープンリダイレクト を受け入れて。

 

これはプライベート プログラム Web アプリケーションで発見したバグなので、

redacted.com と呼ぶことに。

フロントエンドには、2020 年の Web アプリケーションで非常に人気のある

Vue.js が使用されていて。

JavaScript フレームワークを使用する場合の問題は、ソース ファイルが

一般に公開されるため、フロントエンド側で何を処理または計算するかに

注意する必要があることで。

 

ログイン ページを調査していたところ、ログイン成功後のユーザの送信先を

決定するために使用される **next** という名前の GET パラメータが

あることがわかり。

これは、いわゆるオープンリダイレクトの脆弱性をテストするための

一般的なサイトで。

知っていたいくつかの一般的なペイロードを試してみましたが失敗したため、

コードを詳しく調べることにし、最終的に検証機能を見つけて。

これがその関数のコードで。

 

 

export function redirectAllowed(): string | null {
        let next = router.currentRoute.query.next
        if (hasSessionStorage()) {
            next = next || window.sessionStorage.getItem('next') || ''
            window.sessionStorage.removeItem('next')
        }  
        if (next) {     
            let sanitized = new URL(sanitized(decodeURIComponent(next.toString())))     
            if (config.RedirectWhiteList.filter((e: string) => sanitized.origin.indexOf(e) === 0).length > 0) {       
                return sanitized.toString()     
            } else {       
                return null     
            }   
        } else {     
            return null   
        } 
    }

 

次のパラメータ、この行の検証に注目してみると。

 

if (config.RedirectWhiteList.filter((e: string) => sanitized.origin.indexOf(e) === 0).length > 0) {

 

簡単にするために、この関数は次の URL の発信元がホワイトリストの URL と

一致するかどうかをチェックして。

問題は、このコードがマッチングに .indexOf === 0 を使用していることで。

これを人間の言葉で言うと、URL が許可されたオリジンで始まるかどうかを

チェックして。

 

サブドメインの仕組みにより、このロジックには欠陥があり。

これらのペイロードを検討して。

許可されたオリジンが redacted.com であると仮定して。

 

     redacted.com ⇦ パス
     redacted.com.attacher.com ⇦ パス

 

2番目のペイロードは、redacted.com ではなく、attacher.com を指す URL で。

したがって、被害者が 2番目のペイロードを持つ次のパラメータを使用して

ログインすると、被害者は代わりに attacher.com にリダイレクトされ。

したがって、このログイン ページは オープンリダイレクト 攻撃に対して脆弱で。

 

Best regards, (^^ゞ