はじめに
しばらく目を離していた個人開発のリポジトリのDependaBotを確認したところ、下記のAxiosのアラートが出ていました。
どうやらCSRFに関わる脆弱性が発見されたらしく、この脆弱性について個人的に調査をしたので共有したいと思います。
対応策なども書きますが、私の解釈なのであくまで判断等は自己責任でお願いします。
Axios Cross-Site Request Forgery Vulnerability
An issue discovered in Axios 0.8.1 through 1.5.1 inadvertently reveals the confidential XSRF-TOKEN stored in cookies by including it in the HTTP header X-XSRF-TOKEN for every request made to any host allowing attackers to view sensitive information.
日本語機械翻訳:
Axios 0.8.1 ~ 1.5.1 で発見された問題により、任意のホストに対して行われるすべてのリクエストの HTTP ヘッダー X-XSRF-TOKEN にそれが含まれることにより、Cookie に保存されている機密 XSRF-TOKEN が誤って暴露され、攻撃者が機密情報を閲覧できるようになります。
結論
こちらの記事が分かりやすかったです。
- 影響を受けるケース
- v0.8.1〜1.5.1を使っている
- withCredentialsがtrueになっている
- XSRF-TOKENという名前のCookieを使っている
- 影響を受けないケース
- 1.6.0以上を使っている
- withCredentialsがtrueになっていない
- XSRF-TOKENという名前のCookieを使っていない
- 対応策
- バージョンを1.6.0以上に更新する(理想)
- XSRF-TOKENという名前のCookie名を変更する
どんな脆弱性か
クライアント側にXSRF-TOKEN
という名前のCookieが存在していた場合、Axiosが全てのリクエストにおいてX-XSRF-TOKENヘッダにXSRF-TOKEN
の値を挿入し、サーバーに送信してしまう脆弱性のようです。
XSRF-TOKEN
はCSRF対策に関わるクッキー名として、一般的にフレームワークなどでもよく使われます。
この値が全てのHTTPリクエストに挿入されることによって、不必要にトークンが攻撃者に見られて攻撃につながるかもしれませんよ、という脆弱性のようです。
脆弱性を受けるか確認したいこと
できればバージョンを更新することが理想ですが、Axiosのバージョンアップは影響範囲的にもハードルがあると思うので、優先度判断のためにも確認事項の例を挙げておきますね。
- ソースコードをgrepし、XSRF-TOKENという記述があるか
- CSRFトークンはサーバー側で発行するので、クライアント側だけでなくサーバー側も確認しましょう
- ブラウザの検証ツール等でAxiosを利用しているリクエストのリクエストヘッダを確認し、X-XSRF-TOKENやXSRF-TOKENに関する記述はないか
- ブラウザの検証ツール等でCookie一覧を確認し、XSRF-TOKENという名前のCookieがあるか
影響を受けるかどうかも大事ですが、なるべくバージョンを上げる方向性で考えましょう。
一旦バージョンを上げてみて、どれくらいアプリケーションに影響があるか早めに確認してみると良いです。