Web コーディング セキュリティ会社 SALT の研究者が、どのようにして 認証バグ ダビングされた CVE-2023-28131 Expo として知られる人気のあるオンライン アプリ構築ツールキットで。
良いニュースは、 エキスポは応答しました SALT のバグレポートに非常に迅速に対応し、SALT の責任ある開示からわずか数時間以内に修正を思いつきました。
幸いなことに、パッチは Expo のクラウド サービス内に実装されており、プリインストールされたアプリやクライアント側のコードにパッチを適用する必要がなかったため、この修正は顧客が何かをダウンロードすることに依存しませんでした。
万博の アドバイザリー 何が起こったのか、どのように修正したかを説明しただけでなく、他のオンライン サービスでこの種の脆弱性が発生する可能性を回避する方法について、顧客にプログラミングのアドバイスも提供しました。
その後、SALT は広報目的でできるだけ早く報告書を急ぐのではなく、XNUMX か月待ってから報告書を公表し、Expo の利用者が Expo の対応を理解し、行動する機会を与えました。
それをシンプルに保ちます
バグのある認証プロセスについては、以下で詳しく説明されています。 SALTのレポート, ただし、ここでは、Expo の OAUTH サービスで何が問題だったかについて、大幅に簡略化して説明します。
公証、の略 オープン認可フレームワークは、パスワードを設定せずに、オンライン サービスのプライベート データ (オンライン プロフィールの編集、新しいブログ記事の追加、ソーシャル メディアへの投稿を作成する Web サービスの承認など) にアクセスできるようにするプロセスです。 、またはそのサービス自体に直接ログインします。
を提供する Web サービスを見つけたときは、 GoogleまたはFacebookでログイン たとえば、ほとんどの場合、バックグラウンドで OAUTH が使用されるため、別の Web サイトで新しいユーザー名と新しいパスワードを作成したり、電話番号を別のオンライン サービスに提供したりする必要はありません。
厳密に言えば、Google または Facebook の資格情報をこれらのサイトの XNUMX つに入力するだけで、間接的に認証されます。
ユーザーの中には、他の無関係なサイトに自分の身元を証明するためだけに Google や Facebook に認証したくないため、これを好まない人もいます。 Facebook や Google などのサイトは、独自の暗号化セキュリティ プロセスを構築しようとしている専門的な Web サイトよりも、ログイン プロセスの処理、パスワード ハッシュの安全な保存、2FA の実行に関して経験が豊富であると想定しているため、これを好む人もいます。
外部認証
大幅に簡略化された OAUTH スタイルのログイン。Facebook アカウント経由で次のサイトにアクセスします。 example.com
、次のようになります。
- サイト
example.com
アプリまたはブラウザに言います。 「こんにちは、X さん、Facebook からこのサイトのマジック アクセス トークンを取得してください。」 - 特別な Facebook URL にアクセスし、まだログインしていない場合はログインします。 そしてこう言います、「次のマジックアクセストークンをください」
example.com
に設立された地域オフィスに加えて、さらにローカルカスタマーサポートを提供できるようになります。」 - あなたがあなたが主張するとおりであることに Facebook が満足している場合、 「こんにちは、X、これがあなたのマジック アクセス トークンです。」と応答します。
- アクセストークンを渡すのは、
example.com
, その後、Facebook 自体に連絡してトークンを検証できます。
必要に応じて、Facebook のパスワードと 2FA コードを確認できるのは Facebook だけであることに注意してください。そのため、Facebook サービスは、ユーザーとユーザーの間の認証ブローカーとして機能します。 example.com
.
舞台裏では、次のような最終検証が行われます。
- サイト
example.com
フェイスブックにこう言う、 「このトークンはあなたが発行しましたか、そしてそれはユーザー X を検証しますか?」 - Facebookが同意した場合、 それは伝えます
example.com
, 「はい、このユーザーは認証されていると見なされます。」
転覆可能なシーケンス
SALT 研究者が Expo コードで発見したバグは、Expo の「認証仲介」プロセスと呼ばれる処理を悪意を持って破壊することによって引き起こされる可能性があります。
重要なポイントは次のとおりです。
- Expo 自体が検証プロセスのラッパーを追加します。 これにより、認証と検証が処理され、最終的には目的の Web サイトにマジック アクセス トークンが渡されます (
example.com
上記のやり取りで) 接続元のアプリまたは Web サイトに戻ります。 - 検証の処理に使用されるパラメータ これらは、Expo サービスに送信される大きな URL にパックされます。
- これらのパラメータの XNUMX つは Web Cookie に一時的に保存されます アクセスを可能にするために最終的なマジック セキュリティ トークンが送信される URL を指定します。
- セキュリティトークンが配信される前に、 ポップアップでは、認証しようとしている URL を確認するよう求められるため、ログイン プロセスに偽の URL を代入しようとするユーザーを発見できます。
- ポップアップを承認すると、 Expo は Facebook 認証プロセスにリダイレクトします。
- Facebook が認証を承認した場合、 マジック アクセス トークンを Expo サービスに返し、Expo はそれをポップアップで承認したばかりの URL に渡します。
returnURL
. - 指定された場所でリッスンしているアプリまたは Web サイト
returnURL
Expo のコールバックを受信し、 はアクセス トークンを取得するため、あなたとして認証されます。
残念ながら、SALT の研究者は、JavaScript コードを使用して Expo の最初のログイン URL へのアクセスをトリガーすることで、ログイン プロセスを破壊できることを発見しました。その後、ユーザーがそれを読んだり承認したりする前に、検証ポップアップが表示されなくなります。
ただし、この時点で、Expo のサービスはすでに という名前の Cookie を設定していました。 ru
(の略 returnURL
) を使用して、最後にマジック アクセス トークンを使用してどこにコールバックするかを指示します。
これは、サイバー犯罪者が Expo のコードを騙して、 returnURL
など https://roguesite.example
攻撃が進行中であることを警告するダイアログが表示されることもなく、ましてや誤って承認することもありません。
次に、研究者らは JavaScript コードの XNUMX 番目のチャンクを使用して、Expo の Facebook 検証プロセスへのリダイレクトをシミュレートしました。(多くの人と同様に) Facebook 自体にすでにログインしていれば、このプロセスは自動的に成功します。
Facebook の検証により、Expo のログイン プロセスが Expo 独自の JavaScript コードにリダイレクトされることになります…
…これは、実際には検証されていない情報を信頼できるように、しかし誤って取得することになります。 returnURL
その魔法からのコールバックのために ru
ユーザーの承認や知識なしに、最初に設定された Cookie です。
フェールオープンかフェールクローズか?
上記の説明からわかるように、この脆弱性は Expo のコードが不適切に失敗することによって引き起こされました。
認証コードは通常、 フェイルクローズ、専門用語では、何らかの積極的な承認の信号が送られない限り、プロセスは成功してはならないことを意味します。
Expo がシステムに意図したものではなかったのではないかと推測しています。 フェールオープン、SALT のレポートでは、ポップアップ承認ダイアログが次のようになっていることが示されています。
https://roguesite.example のアプリは、Facebook アカウントへのサインインを求めています。 https://roguesite.example を完全に信頼し、許可することに同意しますか: [いいえ] [はい]
ご想像のとおり、デフォルトの答えは次のように設定されていました。 [No]
ただし、これは、検証プロセスを制御するために Expo 独自のクライアント側コードを忠実に使用した場合にのみ、システムがフェールクローズされる原因となります。
研究者らは、独自の JavaScript を提供して一連の検証リクエストを実行することで、承認ダイアログを次のように言っているかのように扱うことができました。
https://roguesite.example が Facebook アカウント経由でログインするのをブロックするよう明示的に指示されていない場合は、[許可] [ブロック] でブロックされます。
解決策は、他の変更の中でも特に、Expo の最初のログイン コードでその魔法を設定することでした。 ru
クッキー いわゆるを明示的に承認した後にのみ、 returnURL
これにより、一度も見たことも承認したこともない URL を盲目的に信頼するのではなく、検証ポップアップがスキップされた場合に、Expo の後の JavaScript ログイン コードが失敗して閉じられるようになります。
多くの点で、このバグは Belkin Wemo スマート プラグ Belkin の場合の根本原因は不正 Web コールバックではなくバッファ オーバーフローであったにもかかわらず、約 XNUMX 週間前に私たちが書いたバグです。
Belkin のコードはサーバー側のコードで 68 バイトのメモリ バッファを割り当てていましたが、クライアント側のコードで 68 バイトを超えて送信しようとしていないことをチェックすることに依存していたため、サーバーは攻撃者のなすがままにされました。検証プロセスをバイパスした独自のクライアント側コードを使用してサーバーと通信します。
何をするか?
- バグを報告したり書き込んだりするときは、 SALT に従うことを検討してください 例。 他の人が独自のエクスプロイトを作成できるようになる詳細を公開する前に、ベンダーに脆弱性を修正するための適切な時間を与え、さらにベンダー自身のユーザーにアドバイスするための適切な時間を与えて、責任を持って公開してください。
- バグレポートを受け取ったときは、 Expo をフォローすることを検討してください 例。 迅速に返信し、バグの報告者と連絡を取り合い、できるだけ早く脆弱性にパッチを当て、ユーザーに役立つ調査レポートを提供し、客観的なものを保ちます。 (「セキュリティに真剣に取り組んでいる」ことを褒めたり、問題を重要ではないと無視したりするというマーケティング チームの提案に抵抗してください。それは、対応の迅速性と適切性、およびリスクの独自の評価に基づいて、ユーザーが決定することです。)
- 認証コードがフェールクローズされていることを確認してください。 無視したりキャンセルしたりするだけで無力化できるような検証や承認のステップがないことを確認してください。
- 独自のクライアント側コードが検証プロセスを制御するとは決して想定しないでください。 攻撃者がプロトコルをリバース エンジニアリングし、独自のクライアント コードを作成して、可能な限り多くのチェックを回避すると想定します。
- Web アカウントをアクティブに使用していないときは、ログアウトします。 多くの人は、Google、Amazon、Facebook、Apple などのアカウントにログインすると、便利なので無期限にログインしたままになります。 ログアウトすると、多くのアクション (認証、投稿、いいね、共有など) が予期しないときに実行されなくなり、代わりにログイン プロンプトが表示されます。
できる限り Web サービスからログアウトし、ブラウザの Cookie と保存されている Web データをすべて頻繁にクリアすることで、閲覧中にサイトが収集するユーザーに関する追跡情報の量も削減できることを忘れないでください。
結局のところ、ログインしておらず、以前からトラッキング Cookie が残っていない場合、サイトはユーザーが誰であるか、最後にアクセスしたときに何をしたかを正確に知ることができなくなります。
- SEO を活用したコンテンツと PR 配信。 今日増幅されます。
- プラトアイストリーム。 Web3 データ インテリジェンス。 知識増幅。 こちらからアクセスしてください。
- 未来を鋳造する w エイドリエン・アシュリー。 こちらからアクセスしてください。
- PREIPO® を使用して PRE-IPO 企業の株式を売買します。 こちらからアクセスしてください。
- 情報源: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- :持っている
- :は
- :not
- :どこ
- $UP
- 1
- 視聴者の38%が
- 2FA
- a
- できる
- 私たちについて
- 上記の.
- 絶対の
- アクセス
- アカウント
- を買収
- 行為
- 行動
- アクティブ
- 積極的に
- 使徒行伝
- 追加
- 追加
- アドバイス
- アドバイス
- 後
- 前
- すべて
- 割り当てられました
- 許す
- ことができます
- 一人で
- 既に
- また
- 常に
- Amazon
- 間で
- 量
- an
- および
- 別の
- 回答
- どれか
- 誰も
- 何でも
- アプリ
- Apple
- 承認
- 承認する
- 承認された
- アプリ
- です
- 周りに
- 記事
- AS
- 評価
- At
- 攻撃
- 認証
- 認証された
- 認証
- 著者
- 認可された
- 承認
- オート
- 自動的に
- 避ける
- バック
- 背景
- 背景画像
- ベース
- BE
- なぜなら
- き
- の間に
- ビッグ
- やみくもに
- ブロック
- ブログ
- 国境
- ボトム
- ブローカー
- ブラウザ
- ブラウザのクッキー
- バッファ
- バッファオーバーフロー
- バグ
- バグ
- 焙煎が極度に未発達や過発達のコーヒーにて、クロロゲン酸の味わいへの影響は強くなり、金属を思わせる味わいと乾いたマウスフィールを感じさせます。
- by
- コール
- 呼ばれます
- 缶
- 場合
- レスリング
- 原因となる
- 生じました
- センター
- チャンス
- 変更
- 点検
- 小切手
- クレーム
- 決済
- クライアント
- 閉まっている
- クラウド
- コード
- コーディング
- 収集する
- カラー
- 到来
- 会社
- 接続する
- 検討
- 接触
- コントロール
- 便利
- クッキー
- クッキー
- 可能性
- カバー
- 作ります
- Credentials
- 暗号
- Customers
- サイバー犯罪者
- データ
- 決めます
- 決定しました
- デフォルト
- 配信
- 説明
- 希望
- 詳細
- 細部
- 対話
- DID
- ダイジェスト
- 直接に
- 開示する
- 開示
- 閉じる
- ディスプレイ
- do
- ありません
- すること
- ドン
- ドント
- ダビングされた
- 編集
- ほかに
- enable
- end
- さらに
- EVER
- 正確に
- 調べる
- 例
- 交換
- 期待する
- 体験
- 説明
- 悪用する
- 展覧会
- フェイル
- 失敗
- 失敗
- 魅惑的な
- 少数の
- ファイナル
- 修正する
- 固定の
- フォロー中
- 次
- 発見
- 頻繁に
- から
- 完全に
- 一般に
- 取得する
- 与える
- 与えられた
- 与え
- Go
- ゴエス
- 良い
- でログイン
- グラブ
- 大いに
- 持っていました
- ハンド
- ハンドル
- ハンドリング
- が起こった
- 出来事
- 持ってる
- 高さ
- 役立つ
- こちら
- HOURS
- ホバー
- 認定条件
- How To
- しかしながら
- HTTPS
- アイデンティティ
- if
- 実装
- in
- 含めて
- 間接的に
- 情報
- 初期
- を取得する必要がある者
- 予定
- に
- 調査的
- 問題
- IT
- ITS
- 自体
- 専門用語
- JavaScriptを
- ただ
- キープ
- キー
- ニット
- 知っている
- 知識
- 既知の
- 姓
- 後で
- 残す
- 左
- ような
- 耳を傾ける
- ll
- ログインして
- ロギング
- ログイン
- より長いです
- 見
- マジック
- make
- 多くの
- 多くの人々
- マージン
- マーケティング
- 最大幅
- 意味
- 意味した
- メディア
- メモリ
- かもしれない
- ミス
- ヶ月
- 他には?
- ずっと
- 名前付き
- 必要
- 必要とされる
- 決して
- 新作
- ニュース
- いいえ
- 通常の
- 数
- オース
- 客観
- of
- オフ
- 提供
- 提供
- on
- ONE
- オンライン
- の
- 開いた
- オプション
- or
- その他
- その他
- でる
- が
- 自分の
- パック
- パラメータ
- パス
- 通過
- パスワード
- パッチ
- パッチ
- Paul Cairns
- のワークプ
- 電話
- プラトン
- プラトンデータインテリジェンス
- プラトデータ
- さらに
- ポイント
- ポイント
- 人気
- 位置
- 可能
- 投稿
- 現在
- を防止
- プライベート
- プロセス
- ラボレーション
- プロフィール
- プログラミング
- 受験する
- 提供します
- 宣伝
- 公表
- 出版
- 目的
- パッティング
- すぐに
- むしろ
- 読む
- 本当に
- 合理的な
- 受け取り
- 受け入れ
- リダイレクト
- 減らします
- 頼る
- 返信
- レポート
- レポーター
- 各種レポート作成
- レポート
- リクエスト
- 必要とする
- 研究者
- 応答
- 責任
- 収益
- 右
- リスク
- ルート
- ラン
- 前記
- 塩
- 満足
- 言う
- 言う
- シーン
- 二番
- しっかりと
- セキュリティ
- セキュリティトークン
- 見ること
- 見て
- 見て
- 送信
- 送信
- シーケンス
- 深刻な
- サービス
- サービス
- セッションに
- 設定
- 株式
- ショート
- すべき
- 作品
- 符号
- 同様の
- 簡略化されました
- 単に
- ウェブサイト
- サイト
- スマート
- So
- 社会
- ソーシャルメディア
- ソーシャルメディアの投稿
- 固体
- 溶液
- 一部
- 何か
- すぐに
- 話す
- 特別
- 指定の
- start
- 滞在
- ステップ
- 保存され
- 提出された
- 成功する
- そのような
- 補給
- SVG
- Talk
- 言う
- 伝える
- より
- それ
- アプリ環境に合わせて
- それら
- その後
- したがって、
- ボーマン
- 彼ら
- この
- それらの
- しかし?
- 三
- 時間
- 〜へ
- トークン
- ツールキット
- top
- 追跡
- 遷移
- トランスペアレント
- 治療する
- 試み
- トリガー
- トリガ
- 信頼
- 信頼
- 試します
- 順番
- 2
- 最終的に
- 下
- に
- URL
- us
- 中古
- ユーザー
- users
- 検証
- ベンダー
- Verification
- 確認する
- 、
- 訪問
- 訪問
- 極めて重要な
- 脆弱性
- 欲しいです
- ました
- 仕方..
- 方法
- we
- ウェブ
- Webサービス
- ウェブサイト
- ウィークス
- 行ってきました
- した
- この試験は
- いつ
- たびに
- which
- 誰
- 意志
- 以内
- 無し
- でしょう
- 書き込み
- 間違った
- X
- はい
- まだ
- 貴社
- あなたの
- あなた自身
- ゼファーネット