メルカリは2017年6月27日、メルカリWeb版での個人情報流出に関して新たな情報を同社の技術ブログで公開した。CDNのキャッシュの動作について、CDNプロバイダーと仕様について確認し検証した結果だという。同月26日までの説明とは一部異なっている点があり、ブログエントリを加筆修正した。

メルカリの技術ブログ
メルカリの技術ブログ
[画像のクリックで拡大表示]

 メルカリは当初、「Expiresヘッダーが過去の日付であっても、Cache-Controlヘッダーが存在している場合、Expiresヘッダーの情報は考慮されない仕様になっていた」と説明していた。しかし、この内容が正確ではなかった。

 正確には、Expiresヘッダーは、Cache-Controlヘッダーにmax-age(キャッシュの有効期限を設定するキー)またはs-maxage(共有キャッシュの有効期限を設定するキー)がないときに機能していた。ただし、Expiresヘッダーに過去の日付が指定されていた場合は、このCDNプロバイダーではキャッシュの有効期限が0秒として扱われていたという。つまり、メルカリのケースでは「有効期限が0秒のキャッシュ」が存在していたことになる。

 キャッシュの有効期限が0秒になっていると、CDNからWebサーバーへのリクエスト処理を実施している間に同じURLに対してリクエストが発生すると、Webサーバーからの最初のレスポンスを待ち、二つ目以降のリクエストに対しても同じレスポンスを返す仕様になっていた。

 このため、あるユーザーがWeb版メルカリにアクセスし、メルカリのWebサーバーがレスポンスを構築している途中で、別のユーザーが同じURLにアクセスした場合、あるユーザーの情報を含むコンテンツが別のユーザーに見えてしまったという。

[技術的観点から原因を説明した同社のブログエントリ]