Kimi Work、最近の5件のエージェントセッションの生の記録をフィードバックレポートに密かに添付

Moonshot AIのWindowsデスクトップアプリは、ユーザーがフィードバックを送信するたびに、直近で更新されたKimi Workの会話5件からの上限が設けられた生レコードをパッケージ化します。フォームはそれらの添付ファイルや選択された会話を特定しません。

By · Published · Updated

RUNTIMEWIRE INVESTIGATION — Scoop

Original reporting by RuntimeWire, based on reverse engineering, testing.

Why it matters

Kimi Work can handle private files, source code and shell output. Packaging five recent sessions without listing them prevents users from reviewing the data attached to feedback.

Reporting record

Finding

Submitting feedback in Kimi Work automatically triggers uploads of a diagnostic archive and bounded raw-record archives from the five most recently updated agent sessions, while the form does not list those attachments or let users choose which sessions are included.

How we verified

Methods: reverse engineering, testing.

RuntimeWire reverse-engineered Kimi Desktop 3.1.5 and its bundled Daimon 0.5.49 service. Static tracing established that the renderer invokes diagnostic-log and raw-record uploads before submitting feedback; the main process sorts all Work conversations by updatedAt, selects five, requests an archive for each and sends the ZIPs to /file/upload_simple. In a Windows Firewall-blocked test launched from Plugins feedback, Kimi selected five distinct conversation IDs, each reached the HTTP upload stage and failed with ERR_NETWORK_ACCESS_DENIED. Kimi's log concluded: "ok: 0/5 archives uploaded in 166ms." Official documentation describes wire.jsonl as the agent's complete communication record and says it includes request parameters, tool schemas and MCP tool listings.

RuntimeWire extracted the production ASAR and Windows Daimon bundle without modifying them, hashed the relevant files and traced the feedback flow from the renderer through preload IPC, the desktop main process, Daimon's archive generator and the two Kimi HTTP endpoints. We decoded the archive limits and sanitization logic, checked Kimi's public help, session-export documentation and privacy policy, and searched for prior reporting. For runtime validation, we blocked outbound traffic from the signed Kimi.exe, started the application, submitted harmless feedback from the Plugins page and reviewed the resulting main-process logs. The firewall denied every external request. We did not inspect or transmit conversation-record contents.

Tested versions: Kimi Desktop 3.1.5, release 3.1.5+c88420152; Daimon 0.5.49; Windows x64; Electron 41.7.2.

Reproduction

RuntimeWire independently reproduced the core finding.

Install Kimi Desktop 3.1.5 on Windows and ensure the Work interface has at least five recent conversations. Fully exit Kimi. Create a temporary outbound Windows Firewall block for Kimi.exe. Start Kimi and open Work > Plugins. Click the feedback icon, enter harmless test text and press Submit. Open %APPDATA%\kimi-desktop\logs\main.log. Search for FeedbackRawRecords. Confirm five distinct conversation entries fail with ERR_NETWORK_ACCESS_DENIED, followed by "ok: 0/5 archives uploaded." Remove the temporary firewall rule.

File hashes

  • 4ecfdc4ff9ad57707f050888056babeac79eb85b61c3e0a369b612d809f80122 app.asar
  • f92a5544c72a51e742060866a9cdb7c8129b553b36739a8d45a96e5aa9884e23 daimon-bundle.tar.gz
  • bc7a22afe8c91b8196550e6401797d55ff7565f80da5dd6109bcff38ee5eb079 out/main/index.js
  • aa4193cf1ac834842219823adaeb65d91c30d6b4739a95aad36c1a63e69dc508 preload-kimi-agent.mjs
  • 57e81f63c0d21f38a2c74f0ea55edb63e4a07f8e9e64dda20a3e2cabf64028ea common-DPn1pjsS.js
  • 794019269179bd285a5c16cdb7abe2f7d8f82737e1a3e1d1e90efd6422faca5d c-TFPRZLAB.js
  • 799d67dc410e99553e68c9bc151cf95c559f2cedcc3936ab8f8800e8fc97cb28 c-ECRC3J6R.js

Company response

RuntimeWire requested comment; the company had not responded by publication time.

Five numbered agent-session records feeding into a Kimi Work feedback form marked Records attached, showing how submitting feedback silently bundles the user's five most recent sessions.

Moonshot AIのKimi Workデスクトップアプリは、ユーザーがフィードバックを送信するたびに、直近のエージェントとの会話5件からの生の診断記録を添付するよう設計されている、とRuntimeWireによるWindowsアプリケーションの分析で判明した。

その収集はユーザーが報告しているタスクを超えて及ぶ。Kimi Desktopはローカルに登録されたすべてのWork会話を最終更新時刻でソートし、最新の5件を取り、バンドルされたバックグラウンドサービスにそれぞれの別個のZIPアーカイブを作成するよう要求する。これらのアーカイブはデスクトップの診断ログパッケージとともにアップロードされ、フィードバックのテキスト送信が行われる。

RuntimeWireは、Kimi.exeからの送信トラフィックをブロックするWindowsファイアウォールルールを使用して、インストールされたKimi Desktop 3.1.5のコピー上でこの動作を確認した。テストではKimi WorkのPluginsページからフィードバックを開き、無害なフレーズ「RuntimeWire test」を送信した。Kimiは直ちに診断アーカイブを含むmultipartアップロードを試行した。その後、5つの異なる最近の会話IDに関連する生レコードアーカイブのアップロードを試みた。

すべての試行は意図どおり net::ERR_NETWORK_ACCESS_DENIED で失敗した。Kimiのメインプロセスのログには5回の失敗が5ミリ秒内に記録され、続いて以下が記録された:

[FeedbackRawRecords] ok: 0/5 archives uploaded in 166ms

ファイアウォールは記録の機械外流出を阻止し、ハンドラの本番実行を確認した。

一般的なフィードバックフォームが最近の作業にまたがる

Pluginsのフィードバック画面は特に示唆に富む入口だった。その内部メタデータはレポートがプラグインハブからのものであると識別しており、そのバージョンのフォームはユーザーによる画像添付を無効にしている。それを送信しても、アカウントメニュー、アクティブ会話、Kimiの生成したウェブサイトプレビューからのフィードバックで使われるのと同じグローバルな収集ルーチンが呼び出された。

レンダラはレポートを送信する前に2つのバックグラウンド操作を開始する:

Promise.allSettled([
  feedbackUploadLogs(),
  feedbackUploadRawRecords()
])

生レコードハンドラは conversations.list を呼び出し、返された会話を updatedAt でソートし、.slice(0, 5) を適用する。現在の会話は引数として渡されない。Kimiの出荷済みpreloadコードの内部コメントは、このメソッドをデスクトップのメインプロセスで選択が固定された、最新5セッションをエクスポートしてアップロードするものと説明している。

各完了したアップロードはオブジェクト名を返す。Kimiはそれらの識別子をフィードバック本文内の非表示メタデータプレフィックス rawRecordsObjectNames の下に配置する。通常の file_object_names 添付フィールドはユーザーが選択した画像用に予約されている。

その区分はインターフェイス上で重要である。英語のフォームは問題を説明するようユーザーに促し、画像はアップロードまたは貼り付けできると記載している。診断アーカイブや5つの会話アーカイブ、あるいはそれらの合計サイズの可能性については記載がない。添付ファイルのプレビュー、同意ボックス、あるいは関連するセッションを選択するコントロールは存在しない。

Kimiの公開ヘルプページは、製品内レポートが自動的に「device and account context」を添付すると述べている。直近のエージェントセッションの生レコードについては言及していない。RuntimeWireが2024年8月15日にレビューした時点で、同社のヘルプドキュメントは最新だった。

Kimiが生レコードアーカイブに入れるもの

Kimi WorkはDaimonというバンドルされたバックグラウンドコンポーネントを使用している。RuntimeWireが調べたWindowsパッケージはバージョン0.5.49で、7月24日作成だった。これは conversations.getRawRecordsArchive という本番制御メソッドを公開および登録し、そのルートをフィードバック送信時に使われるアーカイブ生成器に結び付けている。

選択された各会話について、Daimonはメインエージェントの wire.jsonl ファイルとサブエージェントに属するレコードを検出する。1つの会話アーカイブに最大100個のレコードファイルを含めることが可能で、各ファイルから最後の500件のJSONLレコードを読み取る。単一の圧縮ZIPは8 MiBに制限されており、クライアント側の上限は5つの生レコードアーカイブで合計40 MiB、これに別個のデスクトップログパッケージが加わる。

Kimi自身のドキュメントは agents/main/wire.jsonl をメインエージェントの「完全な通信記録」と説明している。これらのファイルはセッションの復元とリプレイをサポートする。また、同社のセッションドキュメントによれば、これらはツールスキーマ、リクエストパラメータ、MCPツール一覧を含むリクエストトレースを運ぶ。

Daimonは限定的なサニタイズを適用する。大きなbase64の塊と見える文字列を削除し、過大な値を長さとハッシュのマーカーに置換し、通常の文字列を8,192文字に制限する。これらのチェックはサイズとエンコーディングに基づいている。コードはパスワード、APIキー、アクセストークン、プライベートなソースコード、シェル出力、機密ファイルパスを探すことはしない。サイズ制限内の通常の文字列はそのまま保持される。

不正な形式または異常に大きなJSONLレコードには256文字のプレビューを含む診断的置換が行われる。アーカイブのマニフェストはローカルセッションパス、レコードパス、識別子および処理統計も記録する。

KimiのCLIは別個の明示的なセッションエクスポートフローを提供している。そのドキュメントはエクスポートされたファイルにコード、コマンド出力、ファイルパスが含まれる可能性があり、共有前に内容を確認するようユーザーに警告している。フィードバックワークフローには同等の警告や確認ステップは存在しない。

プライバシーポリシーの記載内容

Moonshot AIのprivacy policy、8月4日発効は、同社が会話情報、フィードバックデータおよび会話内容を含む可能性のあるログを収集する場合があると述べている。その文言はKimiが扱う情報の広範なカテゴリをカバーしている。

実装は、ユーザーが送信時に見ることのできないより狭い製品上の選択を行っている: プラグインレポート、ウェブサイトプレビューのレポート、または一般的なアカウントレポートは、関連性のない最近のWorkセッション5件からの限定されたレコードを運ぶ可能性がある。それらのセッションは異なるプロジェクト、フォルダ、クライアント、あるいは資格情報を含む場合がある。

出荷されたクライアントは通常のフィードバックハンドラの一部として収集を実行する。これは収集範囲と開示の問題である。テストはリモートからの悪用経路を明らかにしなかった。

RuntimeWireは5セッション選択の公開文書を見つけられず、内部メソッド名 conversations.getRawRecordsArchive やログタグ FeedbackRawRecords の以前の公開結果も見つけられなかった。

Moonshot AIはこの振る舞いがいつ出荷されたか、どのデスクトップバージョンとプラットフォームに含まれているか、アップロードされたアーカイブがどのくらい保持されるか、誰がアクセスできるか、サーバー側で追加の編集(redaction)が行われるかを説明すべきである。ユーザーには提案されている添付ファイルを検査する方法、報告対象のセッションに収集を限定する方法、および会話記録を提供せずにフィードバックを送信する方法も必要である。

RuntimeWireのテスト方法

RuntimeWireはKimi Desktop 3.1.5の本番ASARとWindows x64用Daimon 0.5.49バンドルを調査した。静的解析によりレンダラからElectron IPC、ZIP生成、/file/upload_simple、および/user/feedbackへのフィードバックボタンの経路が追跡された。

実行時テストでは、署名済みの Kimi.exe 実行ファイルに対してWindowsファイアウォールの送信アクセスをブロックしてからアプリケーションを起動した。RuntimeWireは無害なプラグインフィードバックを送信し、生成されたローカルログを観察した。アプリケーションは5つの会話IDを選択し、各アーカイブのアップロード段階に到達した。外向きのすべてのリクエストは ERR_NETWORK_ACCESS_DENIED で失敗した。RuntimeWireは会話のレコード内容を検査または送信しなかった。

主要なファイルハッシュと詳細な制限はRuntimeWireの報告者ノートに記載されている。

Reader comments

Conversation for this story loads after sign-in.