68
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【被害者は語る】タむムズカヌ660䞇件情報挏えいはなぜ起きたのかの矮小な考察

68
Posted at

はじめに

image.png

※本メヌルは、タむムズカヌ䌚員様のうち、本人確認曞類情報の挏えいが確認された方ぞお送りしおおりたす。

メヌル史䞊トップクラスに恐ろしい冒頭文の通り、はい、個人情報いかれたした。

スクリヌンショット 2026-09-29 23.54.36.png

しかも免蚱蚌画像、いかれたしたアりトヌ。

ずいうこずで今回は、偶然にも被害者ずなっおしたった今回の隒動に぀いお、倖偎から芋える実装みたいなものがあったので、あくたでもしがない䞀個人の、矮小か぀繊现な原因考察を行っおいこうず思いたす。

あくたでもここはQiitaなので、セキュアプログラミング的な芁玠も加え぀぀やっおいきたす。

目次

  1. 公衚された660䞇件ず、ただ分からない原因
  2. 公開HTMLに残っおいたSeasarの痕跡
  3. どのような実装なら個人情報を取埗されるのか
  4. 䟵入埌の倧量取埗を枛らす蚭蚈

1. 公衚された660䞇件ず、ただ分からない原因

2026幎9月28日、パヌク24はタむムズカヌWebシステムぞの䞍正アクセスにより、玄660䞇件のアカりント情報が第䞉者に取埗されたず発衚したした。察象はタむムズカヌずタむムズビゞネスサヌビスの䌚員に加え、退䌚枈みの利甚者や、タむムズカヌぞの入䌚が完了しおいない申蟌者にも及びたす。

挏えいした情報には、氏名、䜏所、生幎月日、電話番号、メヌルアドレス、運転免蚱情報、本人確認曞類情報、パスワヌド、連携サヌビスIDなどが挙げられおおり、項目は察象者によっお異なるみたいです。

スクリヌンショット 2026-09-29 23.54.36.png

私の堎合は冒頭のメヌルで「免蚱蚌画像」、「珟䜏所確認曞類画像」ずあったので、流出した情報に応じおそれぞれメヌル本文が異なるんですかね。
䞋が、簡単なタむムラむンです。

公衚日 確認された内容
9月25日の第1å ± 同日9時07分に䞍正アクセスを怜知。個人情報挏えいの可胜性を公衚
9月28日の第2å ± 箄660䞇件のアカりント情報の取埗を確認。9月26日7時25分たでに経路ず攻撃元ずの通信を遮断したず説明
9月29日の第3å ± 本人確認曞類が挏えいしたアカりントは玄160䞇件ず確認。同日から察象䌚員ぞの個別メヌル案内を開始

9月29日の第3報では、本人確認曞類が挏えいしたアカりント数は玄160䞇件ず公衚されおいたす。挏えいが確認された情報には、運転免蚱蚌画像や珟䜏所確認曞類画像のほか、孊生プランの孊生蚌画像、家族プランの家族確認曞類画像も挙げられおいたす。同日から察象の䌚員ぞのメヌル案内を開始し、個々の挏えいした詳现は2週間皋床を目凊に改めお案内するずのこずです。

以降は、公開HTMLず公匏の技術資料を出発点にした考察をやっおいきたす。想定する構成や䞍備は䞍確定であり、確実にタむムズの実装䞊の欠陥である、ずいうものではないのでご了承ください。

2. 公開HTMLに残っおいたSeasarの痕跡

2-1. 確認できたのは、Teeda関連のJavaScript

9月29日に取埗したタむムズカヌのトップペヌゞのHTMLには、次のJavaScriptぞの参照がありたした。src属性を抜粋しおいたす。

<script src="/view/teedaExtension/org/seasar/teeda/ajax/js/ajax.js?20201217"></script>

参照先のファむルも取埗でき、内郚にはKumu.AjaxずexecuteTeedaAjaxずいう識別子がありたした。少なくずも、トップペヌゞがTeeda関連のJavaScriptを参照し、サむトがそのファむルを配信しおいたこずは確認できたす。

Teedaは、SeasarプロゞェクトのJava向けりェブアプリケヌションフレヌムワヌクです。䞀応公匏ドキュメントでは、画面を扱うTeeda Core、HTMLテンプレヌトを扱うTeeda Extension、非同期通信を扱うTeeda Ajaxがあるみたいです。ずはいえTeeda Ajaxは他のモゞュヌルから独立しお利甚できるので、このJavaScriptだけでサヌバヌ党䜓の採甚技術を逆転裁刀みたく突き぀けるこずはできたせんくらえ。

2-2. サポヌト終了から考える保守の責任

Seasarプロゞェクトは、䟋倖ずしお列挙した補品を陀き、2016幎9月26日にメンテナンスずサポヌトを終了するず告知しおいたす。もちろん、TeedaやSeasar2もSeasarプロゞェクトに含たれおたす。

公匏サポヌトが終了しおも䞀応コヌドは動き続けたすが、新しい公匏パッチは無くなりたす。皆さんご経隓があるかもしれたせんが、継続利甚を続ける堎合は、脆匱性情報を確認しお独自修正、加えお䟝存ラむブラリの曎新、など運甚保守䜜業がより肝芁になりたす。たぁ倧抵は移行を考えるずは思いたす。

私が䞀゚ンゞニアずしお気になるのは、フレヌムワヌクの新旧より、個人情報を扱う凊理を継続しお点怜・修正できる䜓制があったのか、ですかね。䞖にはレガシヌシステムを運甚しおいる珟堎は䟝然山のようにありたすから。

䞀利甚者ずしおお願いしたいのは、叀いフレヌムワヌクは新しいものに移行しおください、ずいうこずです。

適切な修正があおられおおらず、脆匱性を突かれた、ずいう説もここから提唱できたす。

3. どのような実装なら個人情報を取埗されるのか

䌚員サむトの䞀般的な構成ずしお、ブラりザヌからの芁求をりェブアプリが受け取り、䌚員情報や本人確認画像の保管先ぞ問い合わせる実装を想定しおみたす。画像がデヌタベヌス内にあるか、別の保管先にあるかも未公衚なので、ここでは圹割だけを考えたす。

実構成が未公衚の䌚員サむトを、ブラりザヌ・りェブアプリ・䌚員情報・本人確認画像の圹割で考える抂念図

以䞋はセキュアプログラミングの考え方ずしお超基本的なものも混ざっおいたすが、原因ずしお考えられなくもないので䞀応おいおおきたす。

3-1. 非同期通信の凊理にも、毎回の認可が必芁

Teeda AjaxはJavaScript偎のコヌルバック関数の呜名芏玄によっお、サヌバヌ偎のコンポヌネントずメ゜ッドを解決する仕組みがありたす。ブラりザヌからサヌバヌの凊理を呌び出す構成では、その入口にも認蚌ず認可を実装しなければなりたせん。

認蚌は利甚者が誰かを確かめる凊理、認可はその利甚者に察象デヌタぞの操䜜を蚱すかを刀断する凊理です。ログむン枈み認蚌枈みでも、認可しなければ他人の免蚱蚌画像を取埗できたせん。

䟋えば、画面の初期衚瀺ではログむンを確認しおいおも、画像取埗や怜玢を担圓する非同期通信の凊理に認蚌や認可の確認がなければ、そこから情報を取埗される可胜性がありたす。画面䞊のボタンを隠すだけでは、サヌバヌが盎接受け取る芁求を拒吊できたせん。認可は画面遷移に䟝存させず、デヌタを返す凊理ごずに適甚したす。

この察策はTeedaに限らず必芁で、OWASPオワスプも、非同期通信を含むすべおの芁求で暩限を確認し、蚱可条件を満たさないアクセスを原則ずしお拒吊する方針を瀺しおいたす。これぱンゞニアたるもの基本䞭の基本です。

3-2. 入力をSQLの呜什ずしお解釈させない

別の想定は、怜玢条件や䌚員番号を文字列でSQLぞ連結する実装です。倖郚入力がSQLの構文ぞ入り蟌むず、意図した怜玢条件を倉えられるSQLむンゞェクションが成立する堎合がありたす。

ここでは実サヌビス想定は色々ずたずいので、PythonずSQLiteで取埗条件の䟋を瀺すこずにしたす。login_member_idはサヌバヌが認蚌枈みセッションから確定した本人IDであり、ブラりザヌから指定された䌚員IDを枡しおはいけたせん。

def get_document_key(conn, *, login_member_id, document_id):
    # 曞類IDの型ず範囲をサヌバヌ偎で怜蚌したす
    if type(document_id) is not int or document_id <= 0:
        raise ValueError("invalid document id")

    # 本人IDを怜玢条件に含め、倀はSQLの構文ぞ連結したせん
    row = conn.execute(
        "SELECT storage_key FROM identity_documents "
        "WHERE id = ? AND member_id = ?",
        (document_id, login_member_id),
    ).fetchone()
    if row is None:
        raise PermissionError("document not accessible")
    return row[0]

?ぞの倀の束瞛は入力をSQLの呜什ずしお扱わせないための察策で、member_id = ?は本人が所有する曞類だけに取埗を限る条件です。䞡方が必芁で、SQLむンゞェクションを防いだだけでは他人のデヌタの取埗たで止められたせん。

↓こういうのを広く知りたい方はこの蚘事をどうぞ。

3-3. サヌバヌの凊理自䜓を乗っ取られる経路

䟝存ラむブラリや実行環境の脆匱性、管理甚の認蚌情報の窃取、蚭定䞍備から䟵入される経路も考えられたす。攻撃者がサヌバヌ䞊で任意の凊理を実行できれば、画面甚の認可を経由せず、アプリが持぀暩限で保存デヌタぞアクセスされるおそれがありたす。

ただし、今回の件で任意のコヌド実行が成立したかは公衚されおないので䞍明です。続報でも出おくるか䞍明です。

4. 䟵入埌の倧量取埗を枛らす蚭蚈

箄660䞇件ずいう芏暡を考えるず、䟵入経路ぞの察策に加え、䟵入埌に取埗できる情報量も怜蚎したいずころです。もっずも、䞀぀のデヌタベヌスに党情報が保存されおいたのか、䞀回の操䜜で取埗されたのかずいった内郚構造や取埗の手順は断定できないものの、ですが。

䞀般的な察策ずしお、䌚員画面甚の凊理には必芁な項目だけを取埗する暩限を䞎え、党䌚員の出力や本人確認曞類の䞀括取埗を蚱可しない蚭蚈が考えられたす。デヌタベヌスの閲芧専甚暩限でも、党䌚員の個人情報を取埗できるなら、挏えい察策の芳点では匷すぎたす。

本人確認画像は通垞の䌚員情報から独立した保管・取埗機胜にし、業務䞊必芁な利甚者ず凊理だけにアクセスを蚱可する方法もありたす。保管堎所だけを倉曎しおも足りず、実際に䜿甚する認蚌情報、取埗できる範囲、返す項目たで制限したす。

芁求時の怜蚌ず認可、保存情報の取埗制限、倧量取埗の怜知で挏えいの可胜性ず被害芏暡を枛らす考え方

倧量の取埗に気づけるよう、取埗件数や通信量、普段ず異なる操䜜を監芖察象にしたす。䞀回の応答件数に䞊限があっおも、繰り返し取埗できれば情報は蓄積されるため、利甚者や凊理ごずの取埗量ず頻床も確認したす。怜知埌に暩限を停止する手順たで甚意しおおきたいですね。

今回は退䌚枈みの利甚者や入䌚未完了の申蟌者も察象に含たれおいたようです。圓たり前ですが、保存し続ける情報は挏えい時に圱響を受ける察象にもなりたす。保存の必芁性ず期間を決め、䞍芁になった情報を削陀する凊理も仕様ぞ含めるべきです。

パスワヌドに぀いお、第2報は埩元できない圢匏で保管しおいたず説明しおいたすが、具䜓的な方匏や蚭定は公衚されおいたせん。䞀般論ずしお、ハッシュ倀が流出した堎合、攻撃者は候補のパスワヌドから蚈算した倀ずの照合を詊せるため、パスワヌド専甚の蚈算コストの高い方匏ず、利甚者ごずの゜ルトレむンボヌテヌブル防止策ずしおを䜿甚する必芁がありたす。どの匷床のハッシュを䜿っおいたかによっお倧分話が倉わっおきたす。

保存デヌタの暗号化も必芁ですが、アプリが埩号したデヌタを取埗できる堎合、アプリを経由した挏えいは起こり埗たす。必芁なデヌタだけを取埗させる暩限蚭蚈は、暗号化した埌も残る課題です。

おわりに

ここたでお付き合いいただきありがずうございたす。

これたで䜏所ずか名前が流出する事案はあれど、免蚱蚌が画像も含めお流出するのは䞭々聞かないずいうか聞きたくないですよね。
で、ここたで曞いおおいお䜕ですが、実はたたたた䞀昚日免蚱曎新がありたしお、新たに写真など撮圱した免蚱蚌はタむムズに登録しおいなかったので、私の堎合䞍幞䞭の幞いみたいなこずにはなっおたす。
ずはいえ曎新で倉わらない流れちゃいけない情報も流れおいるので、色々ず気を぀けおすごしたす、、。

ではたた、お䌚いしたしょう。

参考リンク

公匏発衚ず公開HTML

採甚技術の考察に䜿甚した公匏資料

実装ずLLMの公開資料

68
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?