Closed4
Serena MCPのセキュリティチェック

概要
Serena MCP使うにあたって調査する
インデックス作成というぼんやりした理解なのでインデックス作成時に.envなどが含まれる可能性はあるのかが気になるところ
調査にはClaude Codeを使う

Claude Codeで概要調べてもらった
Serenaは、LLMを本格的なコーディングエージェントに変える強力なツールキットです。
主な特徴
- 無料・オープンソース - サブスクリプション費用なしでClaude等のLLMをコーディングエージェント化
- 言語サーバー統合 - シンボルレベルでの精密なコード操作が可能(Python、TypeScript、Go、Rust、C#、Java等13言語対応)
- MCPサーバー - Claude Desktop、Claude Code、Cline、Cursor等のMCPクライアントと統合可能
- エージェントフレームワーク - Agnoを通じて任意のLLMでエージェント化
アーキテクチャ
1. SerenaAgent (src/serena/agent.py) - 中央オーケストレーター
2. SolidLanguageServer (src/solidlsp/ls.py) - LSP統合レイヤー
3. ツールシステム (src/serena/tools/) - ファイル操作、シンボル検索・編集、メモリ管理
4. 設定システム (src/serena/config/) - コンテキスト、モード、プロジェクト設定
使用例
Claude Codeとの統合:
claude mcp add serena -- uvx --from git+https://github.com/oraios/serena serena start-mcp-server --context ide-assistant
--project $(pwd)
プロジェクトのインデックス化(大規模プロジェクト推奨):
uvx --from git+https://github.com/oraios/serena serena project index

さらにCluade Codeで調査
プロジェクトのインデックス化をするときにAPIキーなどの機密情報が流出するリスクはありますか?
● プロジェクトのインデックス化における機密情報の流出リスクについて調べます。
● Task(調査:インデックス化の実装)
⎿ Done (22 tool uses · 61.9k tokens · 2m 13.8s)
● セキュリティリスクの評価
Serenaのプロジェクトインデックス化には以下のリスクがあります:
🔴 高リスク:ローカル保存
- シンボル名や関数名が.serena/cache/ディレクトリに平文で保存される
- APIキー名や機密情報を含む変数名・関数名がキャッシュファイルに残る可能性
- pickleファイル形式で保存されるため、他のユーザーが読み取り可能
🟡 中リスク:アクセス制御
- キャッシュファイルのファイル権限によっては、同一システムの他ユーザーがアクセス可能
- .gitignoreで除外されていても、ファイルシステムレベルでは保護されない
🟢 低リスク:外部通信
- インデックス化処理自体は完全にローカルで実行
- ネットワーク通信や外部APIへの送信は行われない
推奨対策
1. .gitignoreに追加
.serena/
2. 機密プロジェクトでの使用前確認
- APIキーを変数名に含めない
- 機密情報を関数名・クラス名に含めない
3. 定期的なキャッシュクリア
rm -rf .serena/cache/
結論:
インデックス化でAPIキーが外部流出するリスクは低いですが、ローカルファイルシステムへの機密情報保存リスクは注意が必要です。

ultrathink. OSSアプリケーションです。深刻な脆弱性、特にトークンの露呈や権限周りで攻撃される可能性やバックドアが仕込まれている可能性はないかをセキュリティエンジニアとして隅から隅まで調べてください。
Serena セキュリティ監査報告書
包括的なセキュリティ監査を完了いたしました。Serenaは正当なオープンソースコーディングエージェントツールキットであり、悪意の
あるバックドアやマルウェアは発見されませんでした。ただし、いくつかの重要なセキュリティ脆弱性が特定されました。
🚨 最重要脆弱性(即座の対応必要)
1. Webダッシュボードの無認証公開
場所: src/serena/dashboard.py:188
def run(self, host: str = "0.0.0.0", port: int = 0x5EDA) -> int:
問題:
- ダッシュボードが0.0.0.0(全ネットワークインターフェース)で公開
- 認証メカニズムが一切なし
- ポート24282でローカルネットワーク上の誰でもアクセス可能
影響:
- システムログの閲覧
- ツール使用統計の取得
- サーバーシャットダウン機能の悪用
対策: host="127.0.0.1"に変更するか認証機能を実装
2. シェルインジェクション脆弱性
場所: src/serena/util/shell.py:15
process = subprocess.Popen(
command,
shell=not is_windows, # Unix系でshell=True
問題:
- Unix系システムでshell=True使用
- コマンド文字列の適切なエスケープなし
- shlex.quote()等の保護機能なし
影響: 任意のシェルコマンド実行が可能
対策: shlex.quote()でコマンドをエスケープ
⚠️ 高リスク脆弱性
3. ログ情報漏洩
場所: src/serena/dashboard.py:70-90
- すべてのログメッセージが未フィルタでダッシュボードに表示
- コマンドライン引数、ファイルパス、システム情報が露出
- /get_log_messagesエンドポイントで機密情報アクセス可能
⚡ 中リスク脆弱性
4. HTMLエスケーピング不足
- ダッシュボードでのログ表示時にXSS攻撃の可能性
- markupsafe.escape()等の実装が必要
5. 依存関係管理の問題
- 多数の重要ライブラリで上限制約なし(Flask、Anthropic、Pydantic等)
- 将来の破壊的変更や脆弱性への対策不足
✅ 良好なセキュリティ実装
ファイルパス検証
src/serena/project.py:157-166で包括的な検証:
- プロジェクト境界チェック
- パストラバーサル攻撃防止
- Gitignore準拠の自動除外
read_only モード
- read_only: trueで危険なツール(シェル実行、ファイル編集)を無効化
- ToolMarkerCanEditによる編集ツールの識別と制御
APIキー管理
- 環境変数からの安全な読み込み
- ハードコーディングなし
🔍 バックドア調査結果
結論: 悪意のあるコードは発見されませんでした
- 暗号化/難読化された疑わしいコードなし
- 予期しない外部通信なし
- 時限爆弾的機能なし
- 権限昇格の試みなし
📋 推奨事項
即座に実施すべき対策
1. ダッシュボードを127.0.0.1バインディングに変更
2. シェルコマンド実行にshlex.quote()を実装
3. ログ出力に機密情報フィルタを追加
中期的改善
1. ダッシュボードアクセスに認証機能を追加
2. 依存関係に適切な上限制約を設定
3. HTMLエスケーピング機能を実装
総合評価
Serenaは正当なオープンソースプロジェクトですが、現在の設定ではローカルネットワーク環境での使用に重大なリスクがあります。特
にダッシュボードの無認証公開は即座の対応が必要です。read_onlyモードを有効にすることで、多くのリスクを軽減できます。
このスクラップは1ヶ月前にクローズされました