Contents
1️⃣ 最近注目された脆弱性 2 種類
| # | 脆弱性概要 | 主な影響範囲 | 公開日・出典 |
|---|---|---|---|
| 1 | Git リポジトリにシークレットが残存し、クローンだけで RCE と API キー漏洩が可能 | ソースコード管理(GitHub/GitLab 等) Claude Code の設定ファイル・スクリプト |
2026‑02‑15 ※ OWASP Secret Management Cheat Sheet (2023) に記載例あり |
| 2 | Rails アプリの CSRF 設定ミス(SameSite が None、Origin ヘッダー未チェック) |
Claude Code と Codex Security の内部管理画面/API エンドポイント | 2026‑04‑02 GMO サイバーセキュリティ調査レポート(公式ブログ) |
注: 本稿で取り上げる脆弱性は実在する問題に概念的に基づいていますが、製品名は Claude Code / Codex Security としています。実装例や設定はあくまで「参考」情報です。
2️⃣ 脆弱性 1 – リポジトリ公開によるシークレット漏洩と RCE
2‑1. 発生メカニズム(要点)
.claude/ディレクトリに平文の API キーやサンプルスクリプトが格納- Claude Code は起動時にプロジェクト直下の
.claude/*を自動ロードします。 .gitignoreに除外設定が無い → リポジトリをgit cloneしただけで攻撃者が取得可能- スクリプト内に危険なシステムコマンドが記述(例:
system("curl $MALICIOUS")) - Claude Code が起動するとスクリプトが実行され、リモートコード実行 (RCE) と同時に API キーが外部へ送信
2‑2. 防御策(ベストプラクティス)
| カテゴリ | 推奨施策 | 具体例 |
|---|---|---|
| シークレット管理 | 環境変数・外部シークレットストアに移行 | dotenv の .env.example を配布し、実ファイルは .gitignore に追加。本番環境は HashiCorp Vault もしくは AWS Secrets Manager 経由で取得 |
| コードレビュー | CI 時点でシークレット検出ツールを走らせる | GitHub Actions + trufflehog / git-secrets を利用し、プッシュ前にスキャン |
| ディレクトリ除外設定 | .gitignore に必ず .claude/ を追加 |
<br># .gitignore<br>.claude/<br> |
| 起動時の安全チェック | 起動スクリプトで config.yml の存在・権限を検証 |
bash<br>if [ -f ".claude/config.yml" ] && [ "$(stat -c %a .claude/config.yml)" -le 640 ]; then echo "OK"; else exit 1; fi<br> |
2‑3. 参考リンク(公式・信頼できる情報)
- OWASP Secret Management Cheat Sheet
https://cheatsheetseries.owasp.org/cheatsheets/Secret_Management_Cheat_Sheet.html - GitHub Docs – Removing sensitive data from a repository
trufflehog公式リポジトリ
https://github.com/trufflesecurity/trufflehog
3️⃣ 脆弱性 2 – Rails アプリの CSRF 設定ミス
3‑1. 正しい Rails バージョン情報
- 現行安定版は Rails 7.1(2024 年リリース)です。
- 本脆弱性は Rails 6 系以降で適切に設定されていないケース に起因します。
「Rails 8.2」や「トークン不要型」という表記は公式には存在せず、誤情報となります。
3‑2. 問題点の概要
| 項目 | 誤った設定例 | 正しい設定例 |
|---|---|---|
| SameSite 属性 | same_site: :none(外部サイトからも送信) |
same_site: :strict または :lax(デフォルトは :lax) |
| CSRF トークンの送付先 | ヘッダーやクエリパラメータに漏洩する実装 | デフォルトはフォーム内 hidden フィールドのみ |
| Origin / Referer のチェック | 無効化または未実装 | protect_from_forgery と併せてカスタム verify_origin_header を設定 |
3‑3. 推奨設定(Rails 7.1 での実装例)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# app/controllers/application_controller.rb class ApplicationController < ActionController::Base # API 用に JSON リクエストはトークン不要だが、Origin ヘッダーで保護 protect_from_forgery with: :exception, unless: -> { request.format.json? } before_action :verify_origin_header private def verify_origin_header allowed = ['https://your-domain.com'] head :forbidden unless allowed.include?(request.origin) end end |
|
1 2 3 4 5 6 |
# config/initializers/session_store.rb Rails.application.config.session_store :cookie_store, key: '_your_app_session', same_site: :strict, # ← 重要 secure: Rails.env.production? |
補足 – SameSite の挙動
| SameSite | ブラウザの送信条件 |
|---|---|
Strict |
同一サイトからのリクエストのみ送信 |
Lax |
GET 系は同一サイト、他はサードパーティブロック |
None |
常に送信(Secure が必須) |
3‑4. 参考リンク(公式情報)
- Rails Guides – Cross-Site Request Forgery (CSRF) Protection
https://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf - OWASP – Cross Site Request Forgery Prevention Cheat Sheet
https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Request_Forgery_Prevention_Cheat_Sheet.html
4️⃣ 実装レベルでの総合的な防御策
4‑1. サンドボックス化と最小権限実行
| 手段 | 主な効果 |
|---|---|
| Docker + 非 root ユーザー | ファイルシステム・ネットワークをコンテナ単位で分離 |
| Firejail プロファイル | カーネルレベルの権限削減(capabilities、seccomp) |
| AppArmor / SELinux | OS の Mandatory Access Control による強制的なアクセス制御 |
Docker 実装例(最小権限)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
FROM ruby:3.2-slim # ---- 非 root ユーザー作成 ---- RUN groupadd -r claude && useradd -r -g claude claude_user WORKDIR /opt/claude_workspace COPY . . # 必要最小限のパッケージだけインストール RUN apt-get update && \ apt-get install -y --no-install-recommends libsqlite3-dev && \ rm -rf /var/lib/apt/lists/* USER claude_user # 起動は Firejail でサンドボックス化 ENTRYPOINT ["firejail", "--private=/opt/claude_workspace"] CMD ["bash", "-c", "claude-code start"] |
Firejail プロファイル例(~/.config/firejail/claude.profile)
|
1 2 3 4 5 |
private-opt /opt/claude_workspace caps.drop all netfilter protocol unix,inet,tcp,udp |
4‑2. 依存ライブラリの自動更新
GitHub Actions + Dependabot(例)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
name: Weekly Dependency Update on: schedule: - cron: '0 3 * * MON' # 毎週月曜 03:00 UTC workflow_dispatch: jobs: bundle-update: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: '3.2' - name: Install Bundler & deps run: | gem install bundler bundle config set --local without 'development test' bundle install - name: Run bundle update run: bundle update - name: Commit changes env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | git config user.name "github-actions" git config user.email "actions@github.com" git add Gemfile.lock git commit -m "🔧 Weekly bundle update" git push |
|
1 2 3 4 5 6 7 8 9 |
# .github/dependabot.yml version: 2 updates: - package-ecosystem: "bundler" directory: "/" schedule: interval: "weekly" open-pull-requests-limit: 5 |
4‑3. 脆弱性スキャニングの導入例
| ツール | スキャン対象 | 主な検出項目 |
|---|---|---|
| Trivy | Docker イメージ、OS パッケージ | CVE (High/Critical) |
| Brakeman | Rails アプリコード | XSS, SQLi, CSRF などの静的解析結果 |
| Bandit(Python) | Python スクリプト | 不適切なシステムコマンド呼び出し |
GitHub Actions 統合サンプル
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
name: Security Scan on: push: branches: [main] pull_request: jobs: trivy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install Trivy run: | curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin - name: Build image run: docker build -t claude-app . - name: Scan image run: trivy image --severity HIGH,CRITICAL claude-app brakeman: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: '3.2' - name: Install Brakeman run: gem install brakeman - name: Run Brakeman run: brakeman --exit-on-warn |
5️⃣ インシデント対応フロー(実務で使えるチェックリスト)
5‑1. 緊急時のログ取得とサービス切り離し
| 手順 | 実行コマンド例 |
|---|---|
| コンテナログ収集 | docker logs <container> --since 24h > claude_logs.txt |
| systemd ログ取得 | journalctl -u claude.service -n 2000 > claude_journal.log |
| ネットワーク遮断 | docker pause <container> または systemctl stop claude.service |
| 影響範囲チェックリスト | * API キーが漏洩したか データベースへの不正アクセス有無 外部 IP からの接続履歴 |
取得したログは 改ざん防止のため只読モード(例:
chmod 0444)で保管し、証拠として保存してください。
5‑2. ロールバック & パッチ適用手順
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 1️⃣ バックアップ確認 pg_dump -U $PGUSER -Fc yourdb > backup_$(date +%F).dump docker cp claude_container:/opt/claude_workspace/config.yml ./backup_config.yml # 2️⃣ 安定版へロールバック git checkout tags/v2.3.0 # 安全が確認されたタグ docker compose build && docker compose up -d --force-recreate # 3️⃣ 脆弱性修正パッチ適用(例: CSRF 設定の修正をコミット) git cherry-pick abcdef12 # 修正コミットハッシュ docker compose build && docker compose up -d # 4️⃣ 動作確認 bundle exec rspec # 自動テスト実行 curl -s -o /dev/null -w "%{http_code}" http://localhost/health # ヘルスチェック # 5️⃣ 監視再開 prometheus reload && grafana-cli admin reset-admin-password # 必要に応じて |
5‑3. 脆弱性報告フロー(HackerOne 経由)
| ステップ | 内容 |
|---|---|
| 1️⃣ 再現手順の文書化 | PoC コード、実行環境、影響バージョンを明記。機密情報は除外し、スクリーンショットはマスク処理。 |
| 2️⃣ HackerOne アカウント作成 | 企業向けプログラムに参加していない場合は「個人」アカウントでも報告可。 |
| 3️⃣ バグレポート作成 | タイトル例:[Claude Code] CSRF Origin Header が検証されていない 内容に「概要」「再現手順」「推奨修正案」を記載。 |
| 4️⃣ 添付ファイル | PoC を ZIP に圧縮し、パスワードは不要(機密情報が無い前提)。 |
| 5️⃣ フィードバック対応 | ベンダーから追加情報要求が来たら速やかに返信。修正が公開されたら報告者へバウンティ支払いや感謝の連絡が行われます。 |
Claude Code の公式ハッカープログラムは [HackerOne – Claude Code Program](※実在 URL は例示)で管理されています。開示ポリシーに沿って、ベンダーがパッチ提供後に脆弱性情報を公開します。
6️⃣ まとめと次のアクション
| 項目 | 推奨アクション |
|---|---|
| シークレット管理 | .env は開発専用、運用は Vault/Secrets Manager に統一。CI で自動除外を徹底。 |
| CSRF 対策 | Rails 7.1 のデフォルト設定(same_site: :strict)と Origin ヘッダー検証を必ず有効化。 |
| 最小権限実行 | Docker + Firejail、もしくは Kubernetes の PodSecurityPolicy を活用し、root 権限なしで起動。 |
| 自動アップデート | Dependabot と週次 GitHub Actions による bundle update を導入。 |
| 脆弱性スキャン | CI に Trivy + Brakeman を組み込み、High/Critical が検出されたらビルドをブロック。 |
| インシデント対応体制 | ログ取得・サービス遮断手順書(Runbook)を社内 Wiki に掲載し、年2回のテーブルトップ演習で熟練度を維持。 |
| 外部報告 | 発見した脆弱性は必ず HackerOne 経由で正式に報告。 |
これらを 「開発フロー」+「運用プロセス」 の両軸から継続的に実装・改善していくことで、Claude Code/Codex Security 環境のセキュリティレベルは大幅に向上します。ぜひ本稿を社内の SecDevOps ガイドライン に組み込んでご活用ください。
この記事は 2026 年第1四半期に公表された情報を元に作成しました。内容の正確性を保つため、定期的なレビューとアップデートを推奨します。