検査の範囲と限界(Cheloop)

版: 1.1.0 / 作成日: 2026-10-08 / 改訂: 2026-11-12 / 施行日: 2026-11-11 / 対象: Cheloop 1.1.0(AI との接続を含む版。macOS/Apple Silicon)・自社静的ルール 1.10.0・DB 対応表 1.1.0・Firebase の rules 検査 1.1.0・公開URL検査 url-check-0.1.0

本文書は、「Cheloop(チェループ)」(以下「本製品」)が何を検査し、何を検査しないかを説明します。本製品は、事業者(個人事業主を含みます)に限って販売します。本文書は利用規約から参照され、アプリ内と販売サイトから閲覧できるようにします。本文書の記載は本製品の実装(ルール台帳・DB 対応表・検査エンジンの版)と一致させ、実装を変えるときは本文書も同時に更新します。

1. 標準表示文

結果画面・すべての export(JSON・Markdown・HTML)に、次の文を一字一句そのまま表示します。

この結果は、今回実施した検査の範囲内での確認結果です。検出がない場合も、脆弱性が存在しないことやアプリの安全性を保証しません。未検査項目を確認し、必要に応じて追加の診断を実施してください。

2. 本製品が行うこと(概要)

本製品は、対応する言語・ルール・依存情報・取得可能なレスポンスについて、特定時点で問題候補を検査する補助ツールです。

3. 結果の読み方

3.1 結果の分類

分類 意味
検出事項 ルールの条件に一致したもの。実環境で悪用できることを確認したという意味ではありません。
要確認 認可・データ公開の意図・解析できなかった箇所など、人の判断が必要なもの。
未実施/失敗 未対応の言語、lockfile が無い、通信の失敗・同意なし、解析エラー、制限時間超過など、検査できなかったもの。
条件を満たした 検査した限定的な条件を満たした項目。その条件の外のことは確認していません(以前の表示名は「確認済み」。要確認をあなたの確認・AI の報告で確認済みにしたものとは別です)。

未実施・失敗・除外・未対応の項目は、検査済みではありません。 結果画面の上部に「重大問題」「開発用の部品の重大な脆弱性」「要確認」「検査未完了」を別々に表示し、検査未完了の件数を隠しません。重大問題は、検出事項のうち危険度 Critical・High のもので、開発用の依存(devDependencies 等)からだけ届く依存パッケージ(依存の種類が「直接依存(開発用)」「間接依存(開発用のみ)」のもの)を除きます。依存の種類を判定できないものは重大問題に含めます。除いたものは「開発用の部品の重大な脆弱性」として件数を別に表示し、一覧からは消しません(危険度・分類は変えません)。AI への依頼で AI が「誤検知」と報告した修正の依頼の検出事項も、重大問題に数えたままにし、そのうちの件数を「AI が誤検知と報告(未確認・重大問題の数には含めています)」として重大問題の近くに別に表示します(3.7。アプリは確かめていません。数から外すのは、あなたが確かめて非表示にしたときだけです)。依存の種類は lockfile の記録だけから判定しており、開発用と判定したものが本番のビルドに取り込まれる場合があります。また、開発用の部品の脆弱性も、開発者の端末や CI(自動ビルド)に影響することがあり、安全という意味ではありません。重大問題には、利用者が対応する単位で数え直した「対応単位」(依存パッケージの lockfile・パッケージ・版の組の数、秘密情報の候補のファイルの数、それ以外の件数)を併記します(件数そのものは 1 件ずつのままです)。結果画面とレポートは同じ集計を使います。

3.2 検査の状態

検査の状態は「完了(今回の検査範囲内)」「一部未完了」「失敗」「取消」などで表示します。対象としたすべての検査エンジンが成功したときだけ「完了(今回の検査範囲内)」とし、一部の検査が完了していない場合を成功として表示しません。0〜100 点の点数や、安全を示すバッジは表示しません。

3.3 検出事項が 0 件のとき

検出事項が 0 件の場合も、標準表示文を同じ画面に並べて表示します。検査が失敗・取消で終わった場合は、検出事項の有無を判断できる結果ではないと表示します。

3.4 危険度と確信度

危険度(Critical / High / Medium / Low / Info / Unknown)と確信度(高・中・低)は独立した評価です。Critical は直接的な重大影響を裏付ける限定的なルールにだけ使います。依存関係の脆弱性は情報源の severity・CVSS をそのまま表示し、情報源に無ければ Unknown とし、推測で数値を作りません。危険度は色だけでなく記号と文字でも示します。

3.5 再検査の比較

前回の同じプロジェクトの検査と比べて「新規」「引き続き検出」「今回未検出」「比較不能」を表示します。

3.6 誤検知として非表示にした項目

利用者が非表示にした項目は削除せずに記録し、レポートには除外件数を表示します。結果画面の検出事項から非表示にするときは、利用者が理由を書いて非表示にします。AI への依頼の列の「誤検知と報告済み」の行(3.7)では、「誤検知として非表示にする」を 1 回押すだけで、理由の入力と見直しの期限の選択を求めずに、決まった理由「AI の誤検知の報告を確かめて非表示にしました。」と既定の 90 日の見直しの期限で非表示にします。非表示にしたことは、その項目に問題が無いことを意味しません。

結果画面の検出事項から非表示にするときは、見直しの期限(30 日・90 日・1 年・期限なし。既定は 90 日)を選びます。選ばなければ 90 日です。選んだ期限は、非表示の記録に日時(expires_at)として保存します。期限なしの場合は空です。期限が過ぎた非表示は自動で効かなくなり、その項目は通常の表示(件数・確認項目・前回からの変化・AI への依頼)に戻り、「見直しの期限が来ました」と、非表示にした日と理由を添えて表示します。期限の前でも、結果画面の非表示の一覧から「元に戻す」で取り消すことができ、取り消した項目は次の表示から通常の表示に戻ります。元に戻したときは、その日時(revoked_at)を非表示の記録に書き、記録そのものは消しません。期限が来た項目には「見直し済み(表示のままにする)」の操作が出ます。これを押すと、元に戻すのと同じく revoked_at を書いて、「見直しの期限が来ました」の添え書きを消し、その項目を通常の表示のままにします。もう一度非表示にしたときは、同じ記録を新しい理由・日時・期限で上書きし、revoked_at を空に戻します。同じ組・同じ依頼でまとめて非表示にした項目は、まとめて元に戻ります。期限・取り消しは表示の計算だけを変え、保存済みの検査の結果は書き換えません。期限が来ても定期的な通知はしません(結果を開いたときに表示します)。この版より前に非表示にした項目は、期限なしとして扱います(見直しの期限は来ません。非表示の一覧から元に戻せます)。

3.7 確認項目とアプリの判定

結果画面とレポートは、要確認と手動確認項目を「何を確かめるか」でまとめた 確認項目 として示します(「確かめること N(対象 M 件)」)。1 件ずつの検出・比較・非表示の記録は変わりません。

3.8 ループの記録の保存

点検・依頼・もう一度点検するの流れ(ループ)の記録は、この端末の中にだけ保存します。回ごとの要約(loop_rounds)は、件数などの数だけを持ち、パス・パッケージ名・検出内容は持ちません。30 日の自動削除の対象外で、1 プロジェクトにつき新しい 400 回分まで保存し、検査履歴の削除・プロジェクトの削除で削除されます。AI への依頼の列の記録(依頼文をコピーした回数と日時・単位の識別用ハッシュ)と、まとめてコピー・書き出しの 1 回ごとの記録(まとめの種類・件数・書き出しのフォルダー名・日時)は検査履歴に付き、30 日で削除されます。「もう一度点検する」は URL を引き継ぎません(入力した URL の一覧は、もう一度点検するためには保存しないため、点検の前の確認の画面で入れ直します。検出事項に含まれる対象の URL は、検査結果に保存します)。詳しくはプライバシーポリシー 2.2・2.5 を参照してください。

3.9 自動の見張り(毎日の部品の照会と週 1 回の自動点検)

3.10 悪用の情報(CISA KEV・EPSS)の印と並び

4. カテゴリごとの検査範囲と限界

4.1 秘密情報

4.2 依存パッケージの既知の脆弱性

4.3 危険なコード・Next.js/React の設定(自社静的ルール 1.10.0)

型検査をしない構文解析(AST)による限定的な判定です。関数の戻り値の流れ・実行時の設定は追跡していません。別ファイルの定数・呼び出し元は、3.7 の範囲と限界のとおり一部だけ辿ります。ルールに一致しないことは、問題が無いことを意味しません。

.gitignore 等で除外され git で追跡されていない作業ファイル(ビルド・配布の出力先を除く)での CODE-001〜005・DB-001 の候補は「要確認」(危険度は Low まで)とし、題名に「(git 管理外の作業ファイル)」を付け、配布・デプロイ対象外の可能性が高い旨を添えます。ビルド・配布の出力先の配下は危険度を変えず、根拠に「git 管理外の生成物(配布される可能性があります)」と添えます。

テスト・検査用のファイル(選択フォルダーの直下、または packages/・apps/ 等の各パッケージの直下の tests/・test/・fixtures/・fixture/・testdata/・test-data/・__tests__/・__fixtures__/ の配下(tests/e2e/ 等を含む)、どの階層でも __tests__/・__fixtures__/ の下、*.test.*・*.spec.*)での CODE-001〜005・CFG-001〜002・SEC-002・DB-001〜004・SUPA-001〜005・FB-001〜006 の候補は、git の状態に関係なく「要確認」(危険度は Low まで)とし、題名に「(テスト・検査用のファイル)」を付け、何が困るかの先頭に「テスト・検査用のファイルです(意図的に脆弱に書いた見本の可能性があります)。本番のコードから読み込まれていないか確認してください。」と添えます(重大問題・対応単位には数えません)。src/app/api/test/ のように本体のコードの中にある test という名前のフォルダーは対象にしません。Supabase の migration から判定する SUPA-001〜003・005 は、migration のフォルダー自体がテスト・検査用のフォルダーの下にある場合だけこの扱いにします(ファイル名が *.test.sql 等でも、supabase/migrations の本物の migration は下げません)。Firebase の Security Rules から判定する FB-001〜005 は、そのファイルを指す firebase.json がすべてテスト・検査用のフォルダーの中にある場合だけこの扱いにします(テスト・検査用のフォルダーの外の firebase.json が指していれば、本番に配備され得るため下げません)。ビルド・配布の出力先の配下と、上記の git 管理外の作業ファイルの扱いになるものは、この扱いにしません。ただし、確認項目のアプリの判定(3.7 の読み込み関係)で、そのファイルが本番のコードから読み込まれている(import・require・パスとして使われ得る文字列・package.json の入口)と判定できたときは、危険度・分類を元に戻し(重大問題・対応単位にも数えます)、何が困るかの先頭に「テスト・検査用のフォルダー等にあるファイルですが、本番のコードから読み込まれているため、危険度を下げていません。」と添えます。読み込み関係を判定できなかったとき・読み込みが見つからなかったときは、上の扱い(要確認・Low まで)のままです。読み込みが見つからなかったことは、本番のコードから読み込まれていないことの確認ではありません(3.7「読み込み関係の判定の限界」)。SEC-001(秘密情報)は 4.1 の文書・テストの扱いによります。

CODE-003 は、JSX の dangerouslySetInnerHTML(spread の中の短縮記法 {...{ dangerouslySetInnerHTML }} を含みます)を調べます。値を DOMPurify・isomorphic-dompurify・sanitize-html・xss から import(または require)した関数に通しているときだけ要確認(Low)に下げ、自前で定義した sanitize 等の関数を通しているだけでは下げません。サニタイザーの設定内容と、値がどこから来たかは確かめていません。innerHTML への代入・iframe の srcDoc・href の javascript: は見ていません。

CODE-001・CODE-002・CFG-001・CFG-002 は、よく使う書き方(const の別名・カンマ式・bind・process.getBuiltinModule・文字列の計算キー・メソッドの短縮記法・import の別名・spread の後勝ち)を辿ります。辿れない書き方(解決できない spread・束縛の分からない cors(...) 等)は、危険度を下げすぎないよう要確認として出すことがあります。辿れる書き方は限られ、ルールに一致しないことは問題が無いことを意味しません。

CODE-004 は、fs・fs/promises・fs-extra のファイル操作と Express の res.sendFile・res.download に渡すパスの出どころを調べます。値は同じファイルの中で辿り(ファイルの最上位の const も辿ります)、許可したフォルダーに収まっているかの確かめは同じ関数の中だけで探します。環境変数から組んだパス、アップロードで multer がサーバーの側で作る値(保存先のパス・ファイル名)、リクエストを処理しないファイルの出どころの分からない値は、検査カバレッジの件数にだけ数え、項目にしません。このため、別のファイルから渡された値(例: lib/ の補助関数 getPost(slug) を、ルートが params.slug を渡して呼ぶ場合)は報告されません。ファイルをまたぐ値の流れ・許可リストとの照合・書庫の展開(Zip Slip)・express.static の設定・stat/access/exists は確認していません。許可したフォルダーに収まっているかの確かめを見つけても検出を消さず、要確認(危険度は Low まで)にします。path.basename を通した値と、res.sendFile に root の指定がある場合も、消さずに要確認(Low)に下げます。

CODE-005 は、外から来たキーでオブジェクトの共通のひな形を書き換え得る箇所を、同じファイルの中だけで調べます。値は同じファイルの中で辿り(ファイルの最上位の const も辿ります)、変数の別名・ループは同じ関数の中(その場で書く forEach・map・reduce 等の関数を含む)で辿ります。外から来たキーで 2 段以上の代入をする箇所(同じ関数の中の別名・ループで辿る場合を含む)、書き込み先を外から来たキーで決める Object.assign・深いマージ・部品の関数(lodash の merge 等でも、書き込み先が外から来たキーで決まるなら High になり得ます)、危ないキー(proto・constructor・prototype)を拒まない自前の深いマージ・パスで辿って入れる自作の関数(path.split('.') の部品のように、引数から作ったキーで降りて代入する関数)へ外部入力を渡す呼び出しを、重要度 High の候補にします。自前の深いマージ・パスで辿って入れる関数は、名前のある関数(function 宣言、const に入れた関数・矢印関数)だけを見ます。クラスの static メソッド・オブジェクトリテラルのメソッドとして書いたものは見ません。外部入力を渡す呼び出しが同じファイルに無ければ、関数の位置に要確認(Medium)として出します(パスで辿って入れる関数で、ファイルの外へ出しておらず、同じファイルの呼び出しがすべて固定のキー・固定の入れ物のときは報告しません)。別のファイルからの呼び出しは辿りません。自分を再帰で呼んで辿るパスの関数と、引数をそのままキーに使う関数(split・ループ等で作ったキーでないもの)は、パスで辿って入れる関数として見ません(後者は、リクエストを処理するファイルでは書き込みの位置に要確認(Medium)として出します)。lodash の merge・set 等、部品の深いマージ・パスを指定した代入の関数に外部入力を渡す箇所は、使っている部品と版によって安全かどうかが変わるため、要確認(Medium)とし、確かめを見つけても下げません。既知の脆弱な版は依存の検査で見つけます。部品(lodash 等)の中のコードは見ません。1 段の代入は要確認(Low)にとどめます。危ないキーを拒む確かめ(3 つのキーとの比較、定数の許可・拒否の一覧、書き込み先についての hasOwn)は、その代入の降りる段ごとに同じ関数の中だけで探し、見つけても検出を消さず要確認(Low)にします。ひな形の無い入れ物(Object.create(null) 等)への書き込みも、消さずに要確認(Low)にします。書き込み元についての hasOwn の確かめ(受け取った JSON の proto は自分の項目になるため通り抜けます)は確かめとみなしません。Object.assign・スプレッドの書き込み元は対象にしません。キーを列挙する先が同じファイルの単純な z.object・z.strictObject で検証した結果の場合は対象にしません。キーの出どころが分からない場合は、2 段の代入だけを、リクエストを処理するファイルで要確認(Medium)にします。1 段の代入・部品の関数・自前の深いマージの呼び出しで出どころが分からないキーは、検査カバレッジの件数にだけ数えます。ファイルをまたぐ値の流れ・実行時の対策(Object.freeze 等)は確認していません。

ルール ID 内容
SEC-001 Supabase の秘密キーがコード・設定ファイルに書かれている候補
SEC-002 ブラウザーへ公開される環境変数に秘密が入っている候補
CODE-001 eval / new Function へ外部入力が渡る候補
CODE-002 コマンド実行へ外部入力が渡る候補
CODE-003 dangerouslySetInnerHTML の利用(利用だけでは高い危険度にしません)
CODE-004 ファイル操作へ外部入力が渡る候補(パストラバーサル)
CODE-005 外部入力でオブジェクトの共通のひな形を書き換え得る候補(プロトタイプ汚染)
CFG-001 TLS 証明書の検証を無効にする設定
CFG-002 広い CORS 設定・オリジンの無制限な反映

複雑な汚染解析(入力から危険な処理までの全経路の追跡)は行いません。

4.4 DB 共通の検査

ルール ID 内容
DB-001 生 SQL の API で、外部入力が SQL 文へ連結・埋め込みされている候補
DB-002 DB 接続で TLS 証明書の検証(または TLS)が無効になっている候補
DB-003 SQLite のデータベースファイルが Web 公開ディレクトリに置かれている候補
DB-004 DB の接続文字列にパスワードが直書きされている候補

4.5 Supabase

ルール ID 内容
SUPA-001 Supabase の新規 public テーブルで RLS の有効化を migration 内で確認できない
SUPA-002 Supabase の public テーブルで RLS を無効化している
SUPA-003 Supabase で anon / authenticated への広い権限と、常に真のポリシーが組み合わされている候補
SUPA-004 クライアント側のコードから Supabase の service_role key を使っている可能性
SUPA-005 Supabase の新規テーブルに Data API 用の明示的な GRANT が無い(公開設定・動作確認事項。情報漏えいとしては扱いません)

4.6 公開URL検査

ルール ID 内容
URL-000 URL を取得できなかった
URL-001 HTTPS の利用
URL-002 TLS 証明書の検証
URL-003 HSTS(Strict-Transport-Security)
URL-004 CSP(Content-Security-Policy)
URL-005 X-Content-Type-Options
URL-006 フレーム埋め込みの制限
URL-007 Referrer-Policy
URL-008 Permissions-Policy
URL-009 Cookie の Secure 属性
URL-010 Cookie の HttpOnly 属性
URL-011 Cookie の SameSite 属性
URL-012 Cookie の観測
URL-013 サーバーの版の表示
URL-014 リダイレクト先の未取得

4.7 業務上の認可(手動確認)

認可は自動では判定しません。次の項目は確認リストとして表示し、利用者が手動で確認します(AI への確認の依頼で AI にコードを読んで確かめてもらうこともできますが、AI の報告は、あなたが外部の AI から得て記録するものです。本製品は、AI がコードを読んだこと、実際に試したこと、報告の内容が正しいことを確かめていません)。コードに関係なく毎回表示するため、結果画面・レポートの「要確認」の件数には含めず、「手動確認項目」として別に数えます(一覧には表示します)。

ルール ID 内容
AUTHZ-001 【手動確認】別のユーザーのデータを参照・更新できないか
AUTHZ-002 【手動確認】管理者限定の処理が管理者以外から実行できないか
AUTHZ-003 【手動確認】課金・Webhook の検証が行われているか

4.8 Firebase(Firestore・Storage の Security Rules)

ルール ID 内容
FB-001 Firestore の rules で、条件が常に真(if true・条件の省略)の allow(検出事項。write を含めば Critical、read だけなら High)
FB-002 期限付きの公開(request.time < timestamp.date(...) だけの条件。テストモードの既定の形。期限が過ぎていても検出事項・High)
FB-003 条件が request.auth != null(ログインしていれば誰でも)だけで、再帰のワイルドカード・コレクション全体の一致に付いている(要確認・Medium)
FB-004 再帰のワイルドカード(match /{document=**} 等)に付いた FB-001〜003 以外の条件、または関数を展開できず判定できない条件(要確認・Medium)
FB-005 Storage の rules で FB-001・FB-003 と同じ形(分類・危険度も同じ)
FB-006 【手動確認】firebase-admin(Security Rules を通らない)を使う処理の利用者ごとのアクセスの確認(要確認・Info)

5. DB 製品別の対応表

次の表は、本製品の DB 対応表から作っています。

対応表の版: 1.1.0(src/db/support-matrix.json)

製品 SQL 方言・rules の言語 対応パッケージ(対応する版) 区別する API
PostgreSQL postgresql pg(>=8 <9) パラメーター化して渡す API(SQL 文への外部入力の連結を検査): query
未対応(呼び出しを記録し要確認): native
PostgreSQL postgresql postgres(>=3 <4) タグ付きテンプレート(値を分離して渡す書き方として区別): sql`…`
生 SQL・unsafe 系 API(外部入力の連結・埋め込みを検査): unsafe
未対応(呼び出しを記録し要確認): file
MySQL mysql mysql2(>=2 <4) パラメーター化して渡す API(SQL 文への外部入力の連結を検査): query execute prepare
SQLite sqlite better-sqlite3(>=7 <13) パラメーター化して渡す API(SQL 文への外部入力の連結を検査): prepare
生 SQL・unsafe 系 API(外部入力の連結・埋め込みを検査): exec pragma
未対応(呼び出しを記録し要確認): loadExtension
SQLite sqlite sqlite3(>=5 <6) パラメーター化して渡す API(SQL 文への外部入力の連結を検査): run get all each prepare
生 SQL・unsafe 系 API(外部入力の連結・埋め込みを検査): exec
未対応(呼び出しを記録し要確認): loadExtension
Prisma postgresql, mysql, sqlite, sqlserver, cockroachdb @prisma/client(>=4 <8) タグ付きテンプレート(値を分離して渡す書き方として区別): $queryRaw $executeRaw $queryRawTyped Prisma.sql`…`
生 SQL・unsafe 系 API(外部入力の連結・埋め込みを検査): $queryRawUnsafe $executeRawUnsafe Prisma.raw
未対応(呼び出しを記録し要確認): $runCommandRaw
Drizzle ORM postgresql, mysql, sqlite drizzle-orm(>=0.28 <1) パラメーター化して渡す API(SQL 文への外部入力の連結を検査): execute run all get values
タグ付きテンプレート(値を分離して渡す書き方として区別): sql`…`
生 SQL・unsafe 系 API(外部入力の連結・埋め込みを検査): sql.raw
Supabase postgresql 専用のパッケージ対応なし(migration・設定を解析) —
Firebase/Firestore firestore-rules, storage-rules 専用のパッケージ対応なし(firebase.json が指す Firestore・Storage の Security Rules と、直下・workspace のパッケージ直下の firestore.rules・storage.rules を解析。利用の検出: firebase firebase-admin @google-cloud/firestore) —
共通層(製品を問わないクエリビルダー) — knex(>=2 <4) 生 SQL・unsafe 系 API(外部入力の連結・埋め込みを検査): raw whereRaw orWhereRaw havingRaw orderByRaw groupByRaw joinRaw fromRaw

表に無いパッケージ・API・版は未対応です(検出した場合は「未対応API」「要確認」として表示し、検査済みとは扱いません)。

専用検査が未対応の製品(利用を検出した場合も、接続秘密などの共通検査だけを行い、専用検査は「未対応」と表示します):

製品 利用の検出に使うパッケージ 接続文字列のスキーム
MongoDB mongodb mongoose mongodb mongodb+srv
SQL Server mssql tedious sqlserver mssql
Oracle Database oracledb oracle
libSQL/Turso @libsql/client libsql
Amazon DynamoDB @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb —
Redis redis ioredis @upstash/redis redis rediss

MongoDB の専用検査(クエリ演算子への外部入力など)は未対応です。 利用を検出した場合も、接続秘密などの共通検査だけを行い、専用検査は「未対応」と表示します。Firebase は Firestore・Storage の Security Rules の検査と、firebase-admin の利用の検出(FB-006。認可の手動確認)を行います(4.8)。Realtime Database の rules(database.rules.json)は未対応です。 すべての DB に対応しているわけではありません。

6. 本番環境について

本番 DB の認証、実効権限、ネットワーク公開、暗号化、稼働中の RLS 等は、ローカルのソースだけでは確認済みにしません。ローカルの migration・設定ファイルが本番と一致するとは限りません。本番環境の設定・権限・適用状態は、利用者が別途確認してください。

7. 手動確認が必要な領域

次の文は結果画面とすべての export にも表示します。

8. 結果の読み方の固定の注意事項

次の文は結果画面とすべての export にも表示します。

AI との接続(3.7)で、AI が依頼を受け取り、報告を集め箱に入れ、再点検を始めた場合も、上の注意事項の読み方は同じです。AI から受け取った報告は、利用者が画面で確かめて確定するまで記録しません。AI が始めた再点検で検出されなくなったことも、修正済みであることは意味しません(3.5)。

9. 本製品が行わないこと

10. 研究の統計について

本製品の説明で引用することがある研究(公開 Web アプリ 200 件中 182 件(91%)で脆弱性を確認、再実装実験での再導入率 25.7% から 11.0% への改善など)は、その研究の対象(特定条件で抽出した標本)と方法(コード監査と専門家の検証を含む)に限られた統計です。本製品の検出率・安全率・改善効果を表すものではなく、本製品で同等の問題を同じように検出できることを示すものでもありません。

11. 対応 OS

12. レポートの共有

レポート(JSON・Markdown・HTML)には、検査日時、対象、検査エンジンとルールの版、検査範囲、除外・失敗・未実施の項目、本文書の限界の説明を含め、共有後も説明が残るようにします。検出事項・要確認の一覧は、重大度の高い順に並べ、同じ重大度の依存パッケージは依存の種類(本番経路あり → 判定できず → 開発用)の順に並べ、その旨をレポートにも記載します(レポート形式 2 で JSON に表示用の組の種類・並べ方の説明・重大問題のうち依存パッケージの件数を、形式 3 でその依存の種類ごとの内訳と次に確認するとよい更新の候補を追加。形式 4 で対応単位・手動確認項目の件数、実行コマンド(bin)を含む本番の依存の補足、日本時間の表記を追加し、要確認の件数から手動確認項目を除きました。形式 9 で、重大問題・対応単位から開発用の部品を除き(既存の欄の意味の変更)、開発用の部品の重大な脆弱性の件数と数え方の説明を追加しました。形式 11 で、重大問題・対応単位・重大問題の内訳から AI が誤検知と報告した検出事項(秘密情報の候補を除く)を除き(既存の欄の意味の変更)、その件数と説明を追加しましたが、形式 15 でこの扱いを戻しました。現在のレポートでは、AI が誤検知と報告しただけでは、重大問題・対応単位・重大問題の内訳から除きません。重大問題のうち AI が誤検知と報告した件数は、別に示します)。保存の前に次の確認文を表示します。

OSV に照会した検出事項がある点検では、結果の画面とレポート(JSON・Markdown・HTML)の「検査の範囲と限界」に、脆弱性情報の出典(OSV)と、含まれる情報源ごとのライセンスを示します。検出事項ごとにも、情報源・元の勧告の URL・ライセンスを示します(例: ID が GHSA- で始まる記録は GitHub Advisory Database・CC BY 4.0、RUSTSEC- で始まる記録は RustSec Advisory Database・CC0 1.0、MAL- で始まる記録は OpenSSF Malicious Packages・Apache License 2.0)。表示は改変を含みます。本製品は情報源の概要(summary)だけを英語のまま表示し、空白をまとめ、200 文字を超える部分は省略し、秘密情報に見える文字列は伏せる場合があります。CC BY-NC-ND 4.0 で提供される記録(ID が CGA- で始まるもの)は、概要を表示せず、ID と URL だけを示します(レポート形式 16 で、JSON に出典の欄 attribution と、検出事項ごとの source.attribution を追加しました。追加のみです)。

ファイル名・URL・パスにも機密が含まれ得ます。共有前に内容を確認してください。確認した人の名前を入力していれば、レポートに含まれます。

公開URL検査の前には、次の注意も表示します: GET のみでもアクセスログや副作用が生じ得ます。

13. 改訂

検査エンジン・ルール・DB adapter・対応表を追加・変更するときは、検査条件と限界の説明、テスト、版の管理を同時に更新します。検査範囲を狭める等の重要な変更は重要な変更を含む版として記録し、重要な変更を含む版以降に同意していない場合はアプリ内で再同意を求め、DB 対応表の再生成・表現の整理等の軽微な変更はマイナー版・パッチ版を上げて周知だけを行います(利用規約 第14条)。

2026-10-10(0.2.0-draft): 確認項目とアプリの判定(3.7・8)を追加。結果の読み方を変える重要な変更として再同意の対象にした。自社静的ルールを 1.6.0 に更新(表の要素のキーが固定の値でないものは解決できず、読み込みの書き方の追加、ファイル一覧の上限・未解析の本番用ファイルでは判定できず)。

2026-10-11(0.3.0-draft): ファイルをまたぐ値の出どころ(C1)の範囲と限界を追記(3.7・4.3・8)。結果の読み方を変える重要な変更として再同意の対象にした。自社静的ルールを 1.7.0 に更新。

2026-10-11(0.4.0-draft): Firebase の Security Rules の検査(C2)の範囲と限界を追記(4.3・4.8・5)。DB 対応表を 1.1.0 に更新し、Firebase/Firestore を専用検査の対象に移した。Realtime Database の rules は未対応。結果の読み方を変える重要な変更として再同意の対象にした。

2026-10-11(0.5.0-draft): 重大問題から開発用の部品(開発用の依存からだけ届く依存パッケージ)の Critical・High を除き、「開発用の部品の重大な脆弱性」として別に数える変更(3・4.4・レポート形式 9)と、次の修正指示(対象外の AI の項)を追記。結果の読み方を変える重要な変更として再同意の対象にした。

2026-10-12(0.5.1-draft): Firebase の rules 検査を 1.1.0 に更新し、ファイルの最上位に書いた function を判定するようにした(4.8。これまでファイル全体を未実施にしていたもの)。検査する範囲が広がる軽微な変更のため、パッチ版とし再同意は求めない。

2026-10-12(0.6.0-draft): 点検のループ(前回からの変化・「済んだ」の確かめ・AI への依頼の列・確認の依頼と AI の報告の確認済み・ループの記録の保存)を追記(2・3.5・3.7・3.8)。ビルドの出力先と判定した out/ を既定で除外するようにした(検査範囲を狭める変更)。確認済みの根拠に AI の報告が加わり、「直ったもの」の意味を定めたため、結果の読み方を変える重要な変更として再同意の対象にした。テスト・検査用のファイルを「本番から読み込まれていません(アプリが確認)」とする判定は従来のアプリの判定のままで、表示の文だけを変えた。

2026-10-13(0.6.1-draft): AI への依頼の「済んだ」と AI の結論のボタンをなくし、AI の報告(返信ブロック)を貼り付けて記録する方法に変えた(3.5・3.7)。「誤検知と報告済み」「人の作業待ち」の表示と、利用者が理由を書いて非表示にする道を追記。確認済みの根拠の種類・「直ったもの」の意味・件数・検査の範囲は変わらず、記録の操作の手段が変わるだけのため、周知のみとし再同意は求めない。

2026-10-13(0.6.2-draft): 確認項目の質問を利用者に聞かず、すべて AI への確認の依頼にした(3.7「質問の方針」)。AI が確かめられないことは「判断できない」と報告させる。前の点検の AI の答えを次の点検に引き継ぐことを追記(3.7「AI の答えの引き継ぎ」)。表示・確かめ方の整理のため、パッチ版とし再同意は求めない(周知のみ)。

2026-10-13(0.6.3-draft): 結果の分類「確認済み」の表示名を「条件を満たした」に変えた(3.1・4.1。結果画面のカード・一覧・レポートの表示名も同じ)。要確認をあなたの確認・AI の報告で確認済みにしたもの(要確認の内訳)と取り違えないため。分類の意味・件数・検査の範囲は変わらず、表示名の変更だけのため、パッチ版とし再同意は求めない(周知のみ)。

2026-10-14(0.6.4-draft): 商用販売に向けて、施行日(2026-11-01)、事業者に限って販売すること、販売する製品の版の欄を冒頭に書いた。11 章に、macOS(Apple Silicon)が提供対象で、署名・公証をした配布版での確認はまだであること、Windows 版は提供していないことを書いた。検査の範囲・標準表示文・DB 対応表・結果の読み方は変えていない。表現の整理のため、パッチ版とし再同意は求めない(周知のみ)。冒頭の表示文を「この文書は弁護士のレビューを受けていません。」に改めた(2026-10-14 提供者の決定。表示だけの変更で、この版の内容に含める)。

2026-10-14(0.6.5-draft): 11 章に、対応する macOS の版(13 以降)と、Apple シリコン(M1 以降)を搭載した Mac が対象であることを書いた。検査の範囲・標準表示文・DB 対応表・結果の読み方は変えていない。表現の補充のため、パッチ版とし再同意は求めない(周知のみ)。

2026-10-14(0.6.6-draft。同じ日の 0.6.5-draft(動作環境の補充)の次の版): テスト・検査用のファイルの読み込み関係の判定で、文章の中のファイル名と、テスト用の場所を指す根拠の無いファイル名の文字列を読み込みとして数えないこと、git 管理外のビルド・配布の出力先のコンパイル後の .js を読み込み元にしないこと、見逃しになり得る書き方を追記した(3.7「アプリの判定」「読み込み関係の判定の限界」)。読み込み元の AI への質問を「本番のコードが、テスト・検査用のファイルを実行時に実際に読み込むか」に改めた。検査の対象・保存する内容は変わらず、判定の精度と説明の変更のため、パッチ版とし再同意は求めない(周知のみ)。

2026-10-14(0.6.7-draft): 誤検知として非表示にした項目に、見直しの期限(既定 90 日)と「元に戻す」を追記した(3.6)。期限が過ぎると通常の表示に戻る。検査の範囲・標準表示文・結果の分類・件数の定義は変えず、非表示の扱いの追加のため、パッチ版とし再同意は求めない(周知のみ)。

2026-10-14(0.6.8-draft): 3.6 に、非表示の見直しの期限の保存(expires_at。選ばなければ 90 日)、元に戻した日時の保存(revoked_at)、期限が来た項目の「見直し済み(表示のままにする)」の操作を、実装に合わせて正確に書いた。11 章の動作環境を、起動する設定と推奨の目安の書き方に改めた。検査の範囲・標準表示文・結果の分類・件数の定義は変えず、非表示の扱いの説明と表示の訂正だけのため、パッチ版とし、周知のみ(再同意の判断は 0.6.0-draft の重要な変更のまま変えない)。

2026-10-19(0.6.9-draft): 自動の見張り(毎日の部品の照会と週 1 回の自動点検)の範囲と限界を 3.9 に書いた。検査の範囲・標準表示文・結果の分類・件数の定義は変えず、追加機能の範囲と限界の説明のため、パッチ版とし、周知のみ(再同意の判断は 0.6.0-draft の重要な変更のまま変えない)。

2026-10-19(0.6.10-draft): 製品名を「App Safety Check」から「Cheloop(チェループ)」に改めた。検査の範囲・標準表示文・結果の分類は変えていない。内容の変更ではないため、周知のみ(再同意は求めない)。弁護士未レビュー。

2026-10-21(0.6.11-draft): 依存関係の脆弱性に、悪用の情報(CISA KEV・EPSS)の印と、import が見つかったかどうかの表示を足したことに合わせて、3.10 に範囲と限界(判断の補助であること・件数と危険度を変えないこと・限界の文・出典)を書き、4.2 から指した。検査の範囲・標準表示文・結果の分類・件数の定義は変えていないため、周知のみ(再同意は求めない)。弁護士未レビュー。

2026-10-21(0.6.12-draft): AI が「誤検知」と報告した修正の依頼の検出事項(開発用の部品を除く Critical・High。秘密情報の候補と、CISA KEV に載っている脆弱性を含む依頼を除く)を、結果画面とレポートの概要の重大問題に数えず、「AI が誤検知と判断(未確認)」として別に数えるようにした(3・3.7・レポート形式 11。これまでは件数・分類を変えず重大問題に数えていた)。アプリは確かめていないこと、秘密情報の候補と CISA KEV を含む依頼は人が確かめて非表示にするまで重大問題に数えること、「列に戻す」で重大問題に戻ることを書いた。検出事項の危険度・分類・一覧と検査の範囲・標準表示文は変えていない。提供者の決定(2026-10-21)により、パッチ版とし、周知のみ(再同意は求めない)。弁護士未レビュー。

2026-10-22(0.6.13-draft): AI への依頼をまとめてコピー・ファイルに書き出す方法と、AI が書いた返信ファイルの取り込みを 3.7 に書いた(「AI への依頼のまとめ」)。書き出し先は検査の対象のフォルダーの外に限ること、返信ファイルはあなたが確認の画面で確かめて確定したときだけ記録すること、点検し直して検出事項が見つからなくなった依頼への返事は記録せずに飛ばすことを書いた。依頼文は 1 件ずつのものと同じテンプレートから作り、AI へ送らない。検査の範囲・検査の方法・標準表示文・結果の分類・件数の定義は変えていないため、パッチ版とし、周知のみ(再同意は求めない)。弁護士未レビュー。

2026-10-22(0.6.14-draft): 自社静的ルールを 1.8.0 に更新し、CODE-004(ファイル操作へ外部入力が渡る候補)を足した(4.3・8)。検査する範囲が広がる変更のため、周知のみ(再同意は求めない)。弁護士未レビュー。

2026-10-23(0.6.15-draft): AI の報告の集め箱を 3.7 に書いた(「AI の報告の貼り付けと集め箱」「AI への依頼のまとめ」「確認済み(AI の報告をあなたが記録)」)。貼り付けた返事と取り込んだ返信ファイルは、まず集め箱に入れ、「まとめて記録」を押して確認の画面で確定したときだけ記録すること、入れる段では受け付けられない返信ブロックだけを 1 つずつ断ること、記録は確定の直前の照合で全部か無かであること、返信ファイルは断られた返信ブロックが無いときだけ 取込済 に移すことを書いた。検査の範囲・検査の方法・標準表示文・結果の分類・件数の定義は変えていないため、パッチ版とし、周知のみ(再同意は求めない)。弁護士未レビュー。

2026-10-23(0.6.16-draft): 3.6・3.7 に、AI への依頼の列の「誤検知と報告済み」の行は「誤検知として非表示にする」を 1 回押すだけで、理由の入力と見直しの期限の選択を求めずに、決まった理由と既定の 90 日の見直しの期限で非表示にすること(結果画面の検出事項からは今までどおり理由を書いて期限を選ぶこと)を書いた。検査の範囲・検査の方法・標準表示文・結果の分類・件数の定義は変えていないため、パッチ版とし、周知のみ(再同意は求めない)。弁護士未レビュー。

2026-10-23(0.6.17-draft): 自社静的ルールを 1.9.0 に更新し、CODE-005(外部入力でオブジェクトの共通のひな形を書き換え得る候補)を足した(4.3・8)。検査する範囲が広がる変更のため、周知のみ(再同意は求めない)。弁護士未レビュー。

2026-10-23(0.6.18-draft): ボタン名・状態名を画面に合わせた(3.7 の「まとめて記録」を「記録の内容を確かめる」と確認の画面の「確定して記録する」に、「人の作業待ち」を「あなたの作業待ち」に改め、集め箱の返事は記録前は「返事あり(まだ記録していない)」と表示されることを足した)。検査の範囲・検査の方法・標準表示文・結果の分類・件数の定義・記録の決まりは変えていないため、パッチ版とし、周知のみ(再同意は求めない)。弁護士未レビュー。

2026-10-25(0.6.19-draft): 外部 AI の評価の指摘の修正に合わせて改めた。(1) AI が「誤検知」と報告した検出事項も重大問題の数(対応単位・内訳を含む)から外さず、そのうちの件数を「AI が誤検知と報告(未確認・重大問題の数には含めています)」として別に表示することにした(3・3.7。0.6.12-draft の扱いを改めた。提供者の決定 2026-10-25)。確認の画面にアプリが見つけた場所と伏せ字にした根拠を出すことを書いた(3.7)。(2) テスト・検査用のファイルの候補は、本番のコードから読み込まれていると判定できたときは危険度を下げないことにした(4.3)。(3) 自社静的ルールを 1.10.0 に更新し、CODE-001・CODE-002・CODE-003・CFG-001・CFG-002 がよく使う書き方を辿ること、CODE-003 の範囲(innerHTML・srcDoc・href の javascript: は見ていない)と下げる条件を書いた(4.3)。(4) URL-006・URL-007 の判定の値を書いた(4.6)。(5) 前回からの変化の「直ったもの」を「今回の点検で見つからなくなったもの」に、「直ったことを点検で確認しました」を「点検で見つからなくなった」に改めた(3.5)。(6) 検査エンジンを置き場所に関係なく一時フォルダーへ複製して照合してから実行すること、解析の処理(worker)と WASM の照合と、その限界を書いた(2)。重大問題の数え方は 0.6.12-draft より前(0.6.0-draft で同意を得た内容)と同じく、数を減らさない側に戻す変更で、検査の範囲を狭める変更は無いため、パッチ版とし、周知のみ(再同意は求めない。再同意の判断は 0.6.0-draft の重要な変更のまま変えない)。弁護士未レビュー。

2026-10-25(0.6.20-draft): 最終レビューの指摘に合わせて改めた。(1) 2 の検査エンジン・解析の処理の照合が、本製品を使う利用者と同じ権限で動くほかのプログラムによる差し替え(確認から実行・読み込みまでの間を含む)を防ぐものではないこと(同じ利用者の権限で動く攻撃者は対象外)を書いた。(2) 2 の WASM が一致しないときの扱いを、解析の処理全体の「失敗」から、その部分の構文解析を行わず該当する migration を要確認・DB 検査を一部未完了とする、に正した(実装どおり)。(3) 4.6 の URL-006 の判定で、frame-ancestors * と X-Frame-Options: DENY を一緒に送るページを条件を満たしたと誤って判定すること、公開の接尾辞だけのワイルドカードも確かめないことを言い切った。検査の範囲・検査の方法・結果の分類・件数の定義は変えず、限界の説明を実装に合わせて正確にしたものであるため、パッチ版とし、周知のみ(再同意は求めない。再同意の判断は 0.6.0-draft の重要な変更のまま変えない)。弁護士未レビュー。

2026-11-09(0.6.21-draft): 12 に、結果の画面とレポートに示す脆弱性情報の出典(OSV と、情報源ごと・記録ごとの元の勧告の URL・ライセンス)と、情報源の概要の表示のしかた(改変を含むこと・英語のまま・200 文字を超える部分の省略・伏せ字・CC BY-NC-ND 4.0 の記録は概要を表示しない)、レポート形式 16 の attribution・source.attribution を書いた(T5。2026-11-09 の提供者の決定。周知のみ。再同意は 0.6.0-draft のまま)。弁護士未レビュー。

2026-11-09(0.6.22-draft): 販売開始日(2026-11-11)に合わせて施行日を改めた。検査の範囲・標準表示文・DB 対応表・結果の読み方は変えていない。内容の変更ではないため、周知のみ(再同意は求めない。再同意の基準は 0.6.0-draft のまま)。弁護士未レビュー。

2026-11-09(0.6.23-draft): 販売する製品の版を 1.0.0 とし、冒頭の対象の版を 1.0.0 で埋めた(製品の版の未確定の印を消した)。11 章の macOS の行から「内部検証で通し確認済み(未署名ビルド)」の表現を改め、配布版は Developer ID の署名と Apple の公証をしていることを書いた(重複していた「提供対象です」と、署名・公証をした配布版での確認はまだという記載を外した)。共有の部品の起動時の確認の記載(2 章)から、署名・公証をした配布版での確認はまだという括弧書きを外した。検査の範囲・標準表示文・DB 対応表・結果の読み方は変えていない。周知のみ(再同意は求めない。再同意の基準は 0.6.0-draft のまま)。弁護士未レビュー。

2026-11-10(0.6.24-draft): 冒頭の注記を削り、題の「(草案)」を外した(提供者の決定 2026-11-10)。あわせて、外部の評価の指摘に合わせて改めた。(1) 公開 URL 検査の URL-006(フレーム埋め込みの制限)の判定を直した。CSP に frame-ancestors があるときはその値だけで判定し、埋め込み元を限っていない値(*・スキームだけ等)は、有効な X-Frame-Options が一緒にあっても要確認にする(以前は条件を満たしたと判定していた。4.6)。CSP のヘッダーが複数あるときの扱いも 4.6 に書いた。(2) 2・4.1 の秘密情報の「値は保存しません」に、検査の間は検査対象のファイルを一時フォルダーへ平文のまま複製することと、伏せ字の限界を添えた。(3) 3.7 の集め箱は、入れた内容を端末の中に一時的に保存する(最長 30 日)が、確定するまで判定・確認済みの記録に反映しないことに、3.8 の URL は、入力した URL の一覧は保存しないが、検出事項に含まれる対象の URL は検査結果に保存することに書き分けた。(4) 3.10 の「送る情報が無い」を、送らない情報と、接続に伴って相手に伝わる情報に書き分けた。(5) 4.1 のダミー値・例示を、値の形から可能性が高いと推定したものと改めた。(6) 12 のレポート形式の説明に、形式 15 で AI の誤検知の報告の扱いを戻したことと、現在の数え方を書いた。(1) は判定が変わる(要確認が増える方向)。(2)〜(6) は書き方の整理で、検査の範囲・標準表示文・DB 対応表は変えていない。条項は変えていない。内容の変更ではないため、周知のみ(再同意は求めない。再同意の基準は 0.6.0-draft のまま)。施行日(2026-11-11)は変えない。

2026-11-10(1.0.0): 販売開始(2026-11-11)に合わせて正式版とした(版名の -draft を外した)。0.x の版に同意している場合は、再同意を求める(再同意の基準を 1.0.0 とした)。あわせて、外部の評価の指摘に合わせて、3.7・4.7・7 の AI の報告の説明を、あなたが外部の AI から得て記録したもので、本製品は AI がコードを読んだこと・実際に試したこと・報告の内容が正しいことを確かめていない、と改めた(レポートの同じ文も改めた)。同じ日の 0.6.24-draft の行に書いた変更(URL-006 の判定の修正など)を含む。施行日(2026-11-11)は変えない。

2026-11-12(1.1.0): AI との接続(MCP)を 3.7 に書いた。利用者が入にしたときだけ(最初は切・同意の前は入にできない)、同じ Mac の中で AI が依頼文を受け取り、返信ブロックを集め箱に入れ、再点検を始められること、AI から受け取った報告は利用者が画面で確かめて確定するまで記録しないこと、集め箱に記録していない報告があるアプリは AI から再点検を始められないこと、AI からの再点検の回数の上限、AI が始めた再点検は前回の点検と同じ設定で行うこと、別の作業ツリーには依頼を出さないこと、AI の誤検知の報告で重大問題の数を減らさないこと、同じ利用者のほかのプログラムもこの接続を使えること、管理者権限のないほかの利用者のプログラムからは使えないこと(管理者権限からの完全な隔離は保証できないこと)を書いた。8 に、AI との接続の場合も注意事項の読み方は同じであることを、9 に、AI との接続でも本製品から AI のサービスへは通信しないことを書いた。検査の範囲・検査の方法・標準表示文・結果の分類・件数の定義は変えていない。利用者の情報が AI に渡る経路と、AI が始められる操作が増えるため、重要な変更とし、再同意を求める(再同意の基準を 1.1.0 とした。提供者の決定 2026-11-11)。提供開始の時点で有償の購入者・無料体験の申込者がいなかったため、利用規約 第14条4項の予告の期間を置かずに提供を始めた(2026-11-12 提供者の判断)。冒頭の対象の製品の版を、AI との接続を含む Cheloop 1.1.0 とした。施行日(2026-11-11)は変えない。