2 ポイント 投稿者 GN⁺ 2024-01-27 | 1件のコメント | WhatsAppで共有

Chess.comでのXSS発見

  • チェスを趣味として楽しみつつ技術で遊んでいるうちに、Chess.comでXSS脆弱性を発見した。
  • Chess.comは1億人以上の会員を抱える、インターネット上で最大級のチェスサイトである。

概要

  • 2023年初頭にChess.comで頻繁に遊び始めた。
  • 友人をサイトに登録させ、友だち機能を使ってすぐに友だちになった。
  • MySpaceワームのような方法で自動友だち追加が可能か気になった。
  • 新しいアカウントを作成し、開発者ツールのネットワークタブを確認して自動友だち追加URLを発見した。

中盤

  • TinyMCEリッチテキストエディタを使ってXSSを試した。
  • Burpプロキシを使い、About説明に直接HTMLコードを挿入した。
  • TinyMCEの設定を確認し、background-imageスタイル属性を使ってXSSペイロードを作成した。
  • 複数の記号をテストし、XSSを実行する方法を突き止めた。
  • 最終的にCookieとJavaScriptオブジェクトを抽出できる方法を開発した。

終盤

  • XSSを完全に実行するために取り組んだ。
  • srcset属性を使って、より広いJS構文を使える新しい方法を見つけた。
  • Base64エンコードを使ってXSSペイロードを直接実行した。
  • TinyMCEエディタはサイト全体で使われており、影響は大きい。

分析

  • 脆弱性の根本原因は画像の再アップロード機能である。
  • Chess.comのドメイン名を含めることで、画像ホスティング検査を回避できる。
  • リッチテキストエディタはさまざまなHTML要素を許可しているため、XSSを達成するのに適している。
  • TinyMCEは最新の状態だったが、最終HTMLに対するサニタイズ処理が欠けていた。
  • Chess.comはユーザーに表示される最終HTMLに対してサニタイズ処理を行うべきである。

GN⁺の意見:

  1. このブログ記事は、Chess.comのような大規模オンラインプラットフォームで発生しうるセキュリティ脆弱性を発見し、報告する過程を興味深く説明している。
  2. XSS脆弱性はWebサイトのセキュリティに深刻な脅威となりうるため、こうした脆弱性を見つけて修正することは、Webサイト利用者の個人情報保護において非常に重要である。
  3. この記事は、ソフトウェア開発者やセキュリティ専門家に対し、リッチテキストエディタのようなWebアプリケーション構成要素の脆弱性を認識し、それを防ぐ重要性を強調している。

1件のコメント

 
GN⁺ 2024-01-27
Hacker News のコメント
  • OPです。好意的なコメントを本当にありがとうございます。少し背景を説明すると、私は英国で A-Levels の準備をしている17歳の学生で、どの大学に行くかと degree apprenticeship の選択肢についてまだ考えています
    GitHub プロフィールはこちらで見られます -> https://github.com/Jayy001
    私は HashPals のコアメンバーの一人で、Search-That-Hash を作り、ReMarkable タブレット向け無料ソフトウェアのオープンソースリポジトリのメンテナーでもあります

    • FAANG企業で degree apprenticeship を経験し、運よくそこで正社員に転換できました。会社によって大きく違いますが、目先の就職見通しだけで言えば、有名企業での見習い制度は、Oxbridge を除く大学よりはるかに役に立つと思います
      もっと話したければ連絡してもらって構いません。メールはプロフィールの説明にあります
    • 私の ReMarkable も感謝するはずです。よくやっているので、そのまま続けてください
      それと IT に進むなら、契約交渉とファイナンス も必ず学ぶとよいです
    • XSS を成功させるのにどれくらいかかりましたか?
    • Meta の紹介を試してみます。履歴書やメールなどを tehlike gmail com に送ってもらえますか?
  • インターネット経験といえば Chess.com で「ボランティア司書」として毎回負けることくらいだった頃、リアルタイムの Chess.com の対局に、ぎこちなくエスケープした文字、閉じタグ、よくある制御文字列、さらには OLE オブジェクト まで注入していたことがあります
    創業者の Eric がより正式な監査を丁寧に依頼してくれたのですが、11歳のスクリプトキディだと明かしたくなかったので断りました。代わりにチャットルームの検閲に必要な正規表現を説明し、非同期環境で不正行為をどう検出するかという、より大きな問題にも一緒に取り組みました
    悩んだ末、可能な唯一の方法は、対局上重要な高価値の手をすべてエンジンの既知の最善手と比較し、統計的推論で実力のある人間と不正行為者を区別することだと伝えました
    もちろん当時としては途方もなく実現不可能な方法で、結論もそうなりました。それでも、小学校を出たばかりの子どもが本物のウェブマスターとそんな微妙なテーマを議論したというのは、かなり良いインターネットの思い出として残っています

    • 「可能な唯一の方法」というのは、なぜそうなのでしょう? 不正行為を検出する方法はいくつも思いつきます
  • 「この機能が2005年ごろの MySpace ワームを思い出させたなんて、私はその頃まだ生まれてもいませんでした!」という部分で、毎日年を取っているのを実感しました

    • 私の元妻は2006年から2008年ごろまで MySpace のセキュリティチームを管理していました。本当に荒っぽかったのは、1日の作業がどう進むのかを見るために MySpace のハッカーフォーラムへ直接入り込んでいたことです
      ユーザーにサイトへ HTMLを入れさせる ことに固執していたのが、とんでもない問題でした。今なら HTML 入力をきちんとパースして禁止された属性やタグを取り除くでしょうが、当時は正規表現の狂気で処理していました
    • 最初に思ったのは「最近の若い子がこういうことをしているのを見るのはいいな」に近かったのですが、年齢を計算してみたら精神的にダメージを受けました
    • 待って、この人 20歳未満 なんですね
  • 関係あるかは分かりませんが、Chess.com の対局で他人が 私の手を代わりに指す のを実際に見たことがあり、録画までしたことがあります。進行中の対局が私のところに表示され、本来指せないはずの状況で手を指せたこともありました
    ググると関連スレッドもかなりあります。Chess.com がここ数カ月で修正したかどうかは分かりませんが、私が報告しようとしたときは聞く耳を持ってくれませんでした
    これらの対局はすべて、サイトにログインしていない状態で起きました。ログイン中には経験したことはありませんが、チェスは血圧に良くないので、頻繁にはやっていません

    • よく分かりません。「他人が私の手を指す」というのは、対局であなたの手を自分の手として置き換えるという意味ですか? それとも、あなたの対局の手を自分の対局でそのまま真似して指すという意味ですか? あるいは別の意味ですか?
    • 彼らがあなたの手を指していると、どうやって分かるのですか?
    • 「私の手」とは、正確にはどういう意味ですか?
  • タイトルだけ見たときは、もっと初歩的な内容だと思っていましたが、実際には複数段階の 入力検証 を巧妙な迂回で突破するエクスプロイトを作っていました。基本ドメインのように見せるためにサブドメインまで設定しています
    これが通るとは予想しておらず、それ自体も興味深かったです。ドメインを正規表現でパースするのがどれほど複雑かを考えると、見落としやすそうでもあります。あるいは単に変数内で '...' をチェックするようなものだったのかもしれませんが
    著者は自分の分野をよく分かっています。このレベルの技術のためにどれだけ長く掘り下げてきたのか、感心します。かなり面白いキャリアになりそうです

    • 著者が本文でさらっと言っているのを見ると、2005年以降の生まれなので、とても若いという点 まで考えるとさらに印象的です
    • プロフィール訪問者を友達に追加する最初のエクスプロイトは、少なくともかなり単純で、タイトルも言葉遊びです。しかし完全な XSS まで行く過程は、その後かなり複雑になりました
  • 良い記事です、OP。ハッキングの旅も順調に続くことを願っています。もしまだ知らなければ、alert(1) のようなペイロードで括弧がフィルタされたりエンコードされたりするときは、バッククォートを使って alert\1`` を試せます
    JavaScript インジェクションを一段引き上げたいなら、Brute Logic の XSS チートシートと Gareth Heyes の Javascript for Hackers が良い資料です。クロスサイトスクリプティング を軽く見る人もいますが、今でも非常に強力で広く存在しています。特に plugin-baby が指摘したように、セッション Cookie に HttpOnly が付いていない場合はなおさらです

  • とても素晴らしいです。バグバウンティの分析記事、とくに XSS の記事を見るのが好きです。いつも見つけるのが簡単そうに見えますが、それは確証バイアスにすぎず、実際には成果のないテストや脇道に費やした時間が私には見えていないのでしょう

    • 私の経験では、たいていは偶然変なものを見つけた後に発見へ至ります。本当に難しいのは、その欠陥を実際に悪用可能にすることで、この場合はテキストエディタがその対象だったのですね
  • 「この機能が2005年ごろの MySpace ワームを思い出させたなんて、私はその頃まだ生まれてもいませんでした!」という部分で、すぐに年を取った気分になりました

    • あまり心配しないでください。もっとひどくなります
      この事件について OP に聞きたいのは、どうやって知ったのかということです。Darknet Diaries でしたか、それとも別の経路でしたか?
  • リッチテキストエディタを「聖杯」と呼んでいた部分が面白いです。Chess.com は大きなウェブサイトですが、古いフォーラムのような場所でそういうエディタや過度に派手な機能を見るたびに、そのサイトは 穴だらけ なのではないかと思ってしまいます。いずれにせよ素晴らしい記事です

  • 「バグバウンティ報告とレビューの最中、私が再現しようとしたところ、開発者たちがブロックを実装しようとして、次のエラーメッセージが表示された…」という部分は、バグバウンティプログラム の趣旨からは離れているように見えます