Cloudflare CDNプロバイダーは、サーバーのメモリを任意のWebページコードに埋め込みます

Googleのセキュリティ専門家は、OpenSSLの記憶に残るHeartbleedの脆弱性に似た不快なバグを発見しました。 彼女はまた、暗号化キー、Cookie、パスワード、個人データを含むPOSTリクエストのコンテンツ、クレジットカード、APIキー、および他の人のセッションの他のコンテンツを必要とするすべての人に提供します。



ここで、この脆弱性はCloudflareほどの規模ではありますが、1つのサービスプロバイダーに限定されています。 しかし、ある意味では、このCloudbleedのバグはHeartbleedよりもひどいのです。なぜなら、データ漏洩は自然発生するからです。 これらのページは、クローラーによって定期的にダウンロードされ、検索エンジンによってインデックスが付けられ、WebページアーカイブおよびGoogleキャッシュに保存されたままです。



Cloudflareは、ウェブサイトのリバースプロキシとして機能し、サイトのホストとサイトの訪問者の間の仲介者です。 2016年9月から、NginxのCloudflareシステムプログラマーのミスにより、彼らはサーバーのRAMのランダムな断片をすべてのユーザーに発行されたWebページのコンテンツに導入しました



ランダムアクセスメモリのフラグメントの発行は、特定の状況下で発生しました。 ただし、リバースプロキシが提供されているサイトにアクセスした場合、他の人のネットワークトラフィックの断片をWebページとともにブラウザに直接取得できます。



おそらく、バグの操作には、Cloudflareが提供するサイトからページを大量にロードし、プライベートトラフィックを自動的に抽出し、興味深い情報を検索する正規表現で処理することが長い間必要でした。 これは、セッションキー、パスワード、クレジットカード情報などです。





ProjectflaハッカーがCloudflareへのリクエストに応じて受け取った、ランダムなFitbitユーザーのセッションのフラグメント



Cloudflareのクライアントには、Uber、OK Cupid、Fitbitなどのクライアントが含まれます(合計で、2ip.ru、w3bsit3-dns.com、avito.ru、diary.ru、forbes.ru、iphones.ru、javascriptなど、約4,287,625ドメインが影響を受けました。 .ru、prlog.ru、rghost.ru、rosbalt.ru、searchengines.ru)。 同じUber、OK Cupid、Fitbitのユーザーセッションでは、ユーザーの旅行、クレジットカード、旅行ルート、出会い系サイトの人物に関する個人情報、フィットネストラッカーの証言などの機密情報が送信されることは明らかです。 Cloudflareに存在する他の何百万ものサイトは言うまでもありません(上位10,000のサイトの11%を含む、Webの約5%を制御します)。 これはレストランに座っているようなもので、メニューと同時にウェイターが前のクライアントの財布の内容の一部を提供します。



ここでは、あなたが幸運な場所を推測しませんので、操作には大量のダウンロードと情報の処理が含まれます。 もちろん、メモリリークが発生する条件を知ることをお勧めします。 Googleの専門家は、Googleが扱うファジングを最適化するために、ページの本文を抽出(最小化)する日常作業の結果として偶然にこれを見つけることができました。



2017年2月17日、Googleの従業員であり有名なハッカーであるTavis Ormandyは、ケースを最小限に抑えながら予期せぬデータを偶然見つけました。 それは通常のゴミのセットではなく、歪んだり誤ってラベル付けされたデータではありませんが、Tavis Ormandiがデバッグに時間を費やし、最小化エラーの原因、つまり自分のコードのエラーを見つけようとするような奇妙な形式の何かでした。 「実際、データは非常に奇妙だったので、Project Zeroの同僚の何人かも興味を持っていました」とTavis氏は書いています。 -有効なデータが散在している初期化されていないメモリの断片を見ていることがすぐに明らかになりました。 この初期化されていないデータは、私が指定したデータをメモリに格納したプログラムから取得されたため、謎は解決されました。 しかし、周囲のフラグメントの一部には、最大のCDNプロバイダーであるCloudflareを実行しているリバースプロキシから来たように見える行とオブジェクトがありました。



そしてそれが起こった。 少し後に、研究者はなんとかバグを再現することができました。 ページ上のHTMLタグの特定の組み合わせで情報漏えいが発生し、Cloudflareサーバーでバグが発生しました。



研究者はバグを選びました-そして、いくつかのサンプルの中で、暗号化キー、Cookie、パスワード、POSTフォームの断片、および他のユーザーのHTTPSリクエストのデータを受け取りました。 彼らはこれを見るとすぐに、バグの使用をすぐに停止し、すぐにCloudflareに報告しました。



Tavis Ormandyは、CloudflareのバグはScrapeShield機能に関連しており、サーバーで動作することを示唆しています。これはHTMLを解析および難読化します。 Cloudflare自体は、 メール難読化しサーバー側の除外自動HTTPS書き換えを行うパーサーに問題があることを後で確認しました。 このバグは、 Ragelで記述されたこのパーサーがNginxモジュールとして最適化および実装された約1年前に忍び込んできました。 今では、メモリリークが発生する直前に、ポインタエラーとバッファオーバーランが長年にわたってパーサーに存在していました。



/* generated code */ if ( ++p == pe ) goto _test_eof;
      
      





これは、バグのためにパーサーが<script>タグの属性を処理する方法です。



 script_consume_attr := ((unquoted_attr_char)* :>> (space|'/'|'>')) >{ ddctx("script consume_attr"); } @{ fhold; fgoto script_tag_parse; } $lerr{ dd("script consume_attr failed"); fgoto script_consume_attr; };
      
      





Ormandyは、ユーザーがサーバーのメモリの断片を読み取るためにターゲットを設定する必要がないという意味で、このバグはHeartbleedよりも悪いと言います。 ここでは、秘密情報がブラウザに強制的に発行されます。 ほとんどの人はそれが何であるか理解していません。 ただし、これらのページはクローラーによってダウンロードされ、検索エンジンによってインデックスが作成されます。 Heartbleedの場合、そのようなデータリークはありませんでした。OpenSSLが動作するサーバーに特別なリクエストを送信する必要がありました。



通常どおり、90日後、Googleはバグレポートから情報を公開します。これは、バグとHTMLタグの望ましい組み合わせを再現する方法ですが、Cloudflareはすでに脆弱性を解決しています。 彼らは手紙やバグ報告に反応しなかったが、彼らはタヴィスがTwitterで1時間訴えたことに気付いた。





すぐに対応したセキュリティ部門の適切な人物をすぐに見つけました。 この脆弱性は7時間で解決され、最初の修正は47分でリリースされました。



Cloudflareは昨日、事件の詳細を記した報告書を発表した。 彼女はすぐに、このバグの影響を受けない分離されたNginxマシンでSSL接続が常に終了するため、カスタムSSLキーの漏洩はないと警告しました。



All Articles