ThingLinksに認証不要のSQLインジェクション、修正版あり
IoTプラットフォームThingLinksの1.4.0より前の版に、ログインなしで時系列データを書き換えられる脆弱性が見つかりました。TDengineにセンサー値を保存している組織は、版を調べて1.4.0へ更新してください。
急ぎ度: 早めに
CVSS v3は9.1で、認証なしにネットワーク越しで悪用でき、修正版の1.4.0がすでに公開されているためです。
関係があるか
ThingLinksでデバイスの計測値を集め、時系列データベースのTDengineに保存している組織が対象です。ThingLinksのAPIがインターネットや広い社内ネットワークから届く構成は、とくに優先して確認してください。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| ThingLinks(mqttsnet/thinglinks) | 1.4.0より前の版(TDSモジュールのデータ登録処理) | 1.4.0 |
確かめ方
- 1ThingLinksの稼働版を調べ、1.4.0より前でないかを見る。ビルド成果物の版、コンテナーのイメージタグ、管理画面の表示などで分かる。
- 2TDSモジュールとTDengineを連携させる構成で使っているかを、設定とデータ保存先から確認する。
- 3データ登録用のAPIが、外部ネットワークや、デバイス以外の端末から届く状態になっていないかを、ファイアウォールやリバースプロキシの設定で確認する。
- 4影響する版の下限など細かい範囲は、ベンダーのアドバイザリとリリースノートで確認する。
何が起きたか
ThingLinksは企業向けのIoTプラットフォームです。1.4.0より前の版には、時系列データベースTDengineへデータを登録するAPIに脆弱性があり、外部から送られた入力がデータベースへの命令の組み立てにそのまま使われます。
具体的には、/anyUser/tds/insertTableData に送られるJSONのフィールド値が、TDS mapperのSQL生成処理に安全でない形で渡ります。種類はSQLインジェクション(CWE-89)で、影響はTDSモジュールのデータ登録処理とTDengine向けのSQL生成に限られます。
結果として、保存済みの計測値の上書きや、存在しない行の追加が起こり得ます。情報が盗まれる型ではなく、データの信頼性を壊す型の脆弱性です。
修正版が出ており、修正のコミットも公開されています。公開から間もないいまのうちに更新を済ませておくのが無難でしょう。
攻撃の流れ
-
1
APIへ到達
ネットワーク越しに、データ登録用のAPIへJSONのリクエストが届く。
-
2
入力がSQLに混入
JSONの値が検証されないまま、TDS mapperのSQL文の組み立てに使われる。
-
3
意図しないSQL実行
開発者が想定していない内容のSQLがTDengineに対して実行される。
-
4
計測値の改ざん
不要な行が追加され、既存の計測値が上書きされる。
どう悪用されるか
悪用に認証は要りません。攻撃者はネットワーク越しに対象のAPIへ到達できればよく、利用者に何かを操作させる必要もありません。攻撃の複雑さも低いと評価されています。
被害の中心はTDengine内の時系列データです。意図しない行の挿入と、既存の読み取り値の上書きが起こり得ます。CVSSでは整合性と可用性への影響が高く、機密性への影響は付いていません。
今すぐやること
-
1
稼働中の版を確認する
ThingLinksが1.4.0より前かどうかを調べます。Dockerで動かしているなら、イメージのタグから版を読み取れます。複数の環境(本番・検証・拠点ごとの設置)がある場合は、すべて洗い出してください。
docker ps --format '{{.Names}} {{.Image}}' -
2
1.4.0へ更新する
更新の前にTDengineのデータとThingLinksの設定をバックアップしてください。更新後は、デバイスからのデータ登録が通常どおり動くことを確認します。回避策の有無やアップグレード時の注意は、ベンダーのアドバイザリとリリースノートで確認してください。
-
3
アクセスログを調べる
データ登録用APIへの、想定外の送信元からのリクエストや、いつもと違う形のリクエストがないかをログの保存期間いっぱいまでさかのぼって見ます。リバースプロキシやアプリケーションのログが対象です。ログの場所は環境に合わせて読み替えてください。
grep "/anyUser/tds/insertTableData" /path/to/access.log -
4
保存データの整合を点検する
デバイスが送っていないはずの行、急に変わった過去の値、欠けた系列がないかを、バックアップや元のデバイス側の記録と照らして確認します。アラート、レポート、自動制御がこのデータを使っている場合は、その結果も見直してください。
すぐ更新できないとき
すぐに更新できないときは、/anyUser/tds/insertTableData へのアクセスをリバースプロキシやWAFで、正規のデバイスや管理用ネットワークの送信元だけに絞ります。デバイス側がこのパスを使っている場合は、通信が止まらないよう送信元を確認してから適用してください。完全な対策ではないので、更新までのつなぎとして扱ってください。
背景
ThingLinksは、デバイスから集めた計測値を保存して管理するIoT基盤です。TDengineは時系列データ向けのデータベースで、温度や電力量、稼働状況のような読み取り値を時刻とともに蓄えます。そのデータは監視、アラート、請求や分析のもとになるため、ここが書き換えられると、画面に出る数字そのものが信頼できなくなります。
SQLインジェクションは、外部からの入力をSQL文に直接組み込むと起こる脆弱性です。今回は、その入力経路がログイン不要のデータ登録APIにあります。情報漏えいよりも、気づかないうちに値が差し替わる点が厄介です。データが壊れた時期と範囲は、あとから特定しにくいからです。
よくある質問
Q.情報漏えいの心配はありますか。
Q.TDengine側も更新する必要がありますか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
ThingLinks is an enterprise IoT platform. Prior to 1.4.0, an unauthenticated SQL injection vulnerability in the TDengine TDS APIs allows request-controlled JSON field values submitted to /anyUser/tds/insertTableData to reach unsafe SQL construction in the TDS mapper. A remote unauthenticated attacker can tamper with TDengine time-series data, including inserting unintended rows or overwriting existing readings. The affected surface is the TDS module's insert-table-data flow and TDengine mapper SQL generation. This issue is fixed in version 1.4.0.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory github.com
- advisory github.com
- advisory nvd.nist.gov
- patch github.com
- web github.com