Skip to content

CodeQL Code Scanningアラート対応 (critical 1件 + high 22件のコード修正) - #2

Merged
mt3hr merged 1 commit into
mainfrom
fix/codeql-security-alerts
Jul 17, 2026
Merged

CodeQL Code Scanningアラート対応 (critical 1件 + high 22件のコード修正)#2
mt3hr merged 1 commit into
mainfrom
fix/codeql-security-alerts

Conversation

@mt3hr

@mt3hr mt3hr commented Jul 17, 2026

Copy link
Copy Markdown
Owner

概要

GitHub Security > Code Scanning の27件のオープンアラートのうち、コード修正で対応すべき23件を修正します。残り4件 (#153, #154, #138, #139) は仕様上の誤検知としてマージ後にdismissします。

修正内容

アラート 内容 対応
#140 (critical) SSRF: URLog bookmarkletの image_url/favicon_url を無検証fetch httpGetBase64Data にスキーム制限(http/https)・内部アドレス拒否(Dialer.ControlでDNSリバインディング対策込み)・30sタイムアウト・10MB上限を追加
#141 割り当てサイズ未制御 get_kyous_mcp のDTO割り当てcapを定数 maxLimit で明示
#159-#161 path-injection: pluginsDirの userID 未検証 単一パス要素検証を追加、不正時はプラグイン無効化
#142-#152 TraceSQLログへの機密値出力 GOOGLE_MAP_API_KEYGKILL_NOTIFICATION_PRIVATE_KEYPASSWORD_SHA256PASSWORD_RESET_TOKEN*** にマスク (sqlite3impl.MaskSensitiveValueForLog)
#155-#158, #162, #163 path-injection/zipslip (実質防御済みだがCodeQL未認識) 手書きガードを reps.SecureJoin に統一
#164 Wear OS: 全証明書信頼TrustManager opt-in設定化。デフォルトは標準証明書検証、設定画面のチェックボックスで自己署名許可を明示的に有効化

検証

  • go vet ./... / go test ./... 全パス (SSRFガードのユニットテスト utils_ssrf_test.go を追加)
  • 検証用サーバー(:19999)で実機確認: 127.0.0.1 / 169.254.169.254 へのfetchがdial段階で拒否され、外部URLは正常取得できること
  • get_kyous_mcplimit: -1 / 999999 → 200
  • Wear OS :phone_companion:assembleDebug ビルド成功
  • MCPテストの既存失敗13件は変更前と同一(本PRと無関係)

🤖 Generated with Claude Code

- SSRF対策: httpGetBase64Data にスキーム制限・内部アドレス拒否(Dialer.Control)・サイズ上限・タイムアウトを追加 (#140)
- get_kyous_mcp のDTO割り当てサイズを定数上限で明示 (#141)
- plugin_manager: userID のパス要素検証を追加 (#159-#161)
- TraceSQLログの機密値(APIキー・秘密鍵・パスワードハッシュ・リセットトークン)をマスク (#142-#152)
- パストラバーサルガードを reps.SecureJoin に統一 (#155-#158, #162, #163)
- Wear OS companion: 自己署名証明書の信頼をopt-in設定化、デフォルトは標準証明書検証 (#164)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@mt3hr

mt3hr commented Jul 17, 2026

Copy link
Copy Markdown
Owner Author

フォローアップ課題: アカウントパスワードのサーバー側保存をsalted KDFに強化する

(リポジトリのIssueが無効のためPRコメントとして記録)

CodeQLアラート #138/#139 の調査で判明した根本課題。現状 /api/login はクライアントの password_sha256ACCOUNT.PASSWORD_SHA256 保存値と単純等値比較しており、保存値=送信値のためDB閲覧者はそのままログイン可能(パスワード同等物)。無塩SHA-256のためレインボーテーブルにも弱い。

提案: クライアント側プレハッシュは維持しつつ、サーバー側で受信sha256にsalted KDF (bcrypt等) を適用して保存・検証する。既存アカウントは初回ログイン成功時に透過的に再ハッシュ。影響: account_dao_sqlite3_impl.go / handle_login.go / handle_set_new_password.go / リセットフロー。MCP・Wear OS側は変更不要。

🤖 Generated with Claude Code

Comment thread src/server/gkill/api/gkill_server_api/utils.go Dismissed
@mt3hr
mt3hr merged commit 6554443 into main Jul 17, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants