How I found two api vulnerabilities by analyzing JS source code から学ぶ

ソース:

medium.com

脆弱性API

 

訳:

今日は、Web サイトのソース コードを分析してプライベート バグ報奨金プログラムで 2 つの API バグを発見した方法と、ソース コードを使用する方法を共有します。
コードと JS ファイルを使用して脆弱性を見つけてみましょう。

 

ターゲットはHackerone 上のプライベート プログラムであり、それに関する情報を公開できないため、target.com と呼ぶことにします。

 

ターゲットの範囲はそれほど大きくなく、ワイルドカード ドメイン (*.target.com) が 1 つだけで構成されていました。
いくつかの偵察を行った後、メイン アプリケーションで探索を開始することにしました。
Web サイトが React フレームワークを使用していることがわかりました。

 

ソース コードが利用可能かどうかを確認したかったので、Chrome DevTools で [ソース] タブを開いたところ、Web サイトのフロントエンド ソース コードが含まれている web-app というフォルダーを見つけました。

 

 

すぐにダウンロードしてコードのレビューを開始し、いくつかの脆弱性を見つけました。

リソース セーバーと呼ばれる Chrome 拡張機能を使用してコードをダウンロードしました。

 

私は手動でコードをレビューし始めました。
私は API ハッキングが大好きなので、JS ファイル内の API エンドポイントを探し始めました。
そして、Web アプリケーションとモバイル アプリケーションの両方の API エンドポイントが多数含まれるファイルが含まれている api というフォルダーを見つけました。

API ではいつもそうしているように、見つけたすべての API エンドポイントを Excel シートに保存し、それらの目的とアプリケーションでの動作を理解しながら、1 つずつ分析/テストを開始しました。

多くのテストを行った結果、2 つのエンドポイントを使用する 2 つのアクセス制御の脆弱性が見つかりました。

 

1) target.com 上のビデオにボタンを追加および削除する:

target.com にはビデオをアップロードする機能があり、ソース コードから API エンドポイントをテストしていたときに、このエンドポイントを見つけました

 

/v1/videos/<video_id>/cta

 

ソースコードでは、関数は次のようになります。

 

export function updateCTA(videoId: string, ctaURL: string, ctaText: string) {
return getResults(
appendQuery(`${TARGET_API_URL}videos/${video_id}/cta`, {
api_key: WEB_API_KEY,
link: ctaURL,
text: ctaText,
}),
{
method: ctaText ? 'put' : 'delete',
}
)
}

 

Web API キーはすべてのユーザーで同じであるため、Web API キー以外の認証ヘッダー/パラメーターが必要ないのは私にとって奇妙でした。複数のアカウントを作成して API キーがすべてのアカウントで同じです。

このエンドポイントが正確に何をしているのか分からなかったので、テストするために burp リピータで PUT リクエストを作成しました。

${video_id} 内に、アップロードした動画に属する動画 ID を追加しました。

リクエストを送信したところ、受け入れられました!

 


このリクエストが何をしているのかまだわからないので、ビデオを開いたところ、その下にボタンがあり、クリックすると Web サイトにリダイレクトされることがわかりました。

 

 

DELETEリクエストを行うことで削除することもできました。

これは、ユーザーの操作なしで、Web サイト上のビデオへのリンクを追加/削除できることを意味します。

 

奇妙なのは、ビデオをアップロードするときにリンクを追加できるものが見つからなかったことです。
そのため、この機能はおそらくアプリケーションではもう利用できないか、特定のアカウントタイプなどで利用できるのかもしれません。

 

2) プライベートビデオに関連付けられたステッカーを表示します。

ビデオにステッカーを追加できる特別な種類のビデオをアップロードする機能がありました

この API エンドポイントを見つけました。

 

v1/videos/<id>/associations

 

動画に関連付けられたステッカーを表示できることがわかりました

ステッカー付きのプライベート動画をアップロードし、別のアカウントを使用して関連するステッカーを表示しようとしました。

リクエストは受け入れられ、プライベートビデオに関連付けられたすべてのステッカーを見ることができました。

 

 

残念ながら、影響が非常に低いため、このレポートは有益なものとしてクローズされました。

ソースコードをレビューしてその中の脆弱性を見つけることは、少数のバグハンターだけがそれを行うため、有利になり、重複も大幅に減ります。

ここでは、ソース コード レビューと JS ファイルの分析を開始する方法について非常に役立つ 3 つの記事を紹介します。

 

bitthebyte.medium.com

bitthebyte.medium.com

bitthebyte.medium.com

 

ほなほな。