【要約】エージェントが Skill を呼べないのに動いていた ── C3 v2.8.0 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がC3のエージェントを定義する際、設計上の不整合やセキュリティ上の脆弱性に直面した。具体的には以下の問題が発生していた。
- ・エージェントの
tools定義にSkillが欠落し、意図しないBashのdateコマンドへフォールバックしていた。 - ・パス検証の不備により、URLエンコードや混在区切りを用いたパス・トラバーサル攻撃の懸念があった。
- ・権限リクエストの非同期処理により、ユーザーの承認がClaude Codeに届かないUX上の問題があった。
- ・Hookの文字列指定により、シェルインジェクションのリスクが存在していた。
// Approach
開発チームは、システムの堅牢性と予測可能性を高めるために、以下の修正を行った。
- ・6つのエージェント定義の
toolsにSkillを追加し、ツール呼び出しの契約を正常化した。 - ・パスをセグメント単位で検証し、
urllib.parse.unquote()によるデコード処理を導入して防御を強化した。 - ・
permission_handlerをsubprocess.runによる同期実行へ変更し、承認待ちの確実性を向上させた。 - ・Hook定義を
args配列形式(exec形式)へ移行し、シェルを介さないプロセス起動を実現した。
// Result
18サイクルの厳格なレビューを経て、システムの信頼性が大幅に向上した。
- ・High/Critical/Mediumの全脆弱性検知数が0件を達成した。
- ・境界ケースを含む12件の防御テストを完備し、セキュリティの網羅性を確保した。
- ・プロジェクトルートからの相対パス指定が可能になり、環境依存を排除した。
- ・承認プロセスが同期化され、ユーザーの操作が確実に反映されるUXを実現した。
Senior Engineer Insight
> 「契約の不一致がフォールバックによって隠蔽される」という指摘は、大規模システム開発における教訓だ。暗黙的な挙動は、予期せぬ副作用を生む。また、パス検証において「デコード後のセグメント検証」を行う実装は、実戦的な防御の鉄則である。18サイクルに及ぶレビュー体制は、ミッションクリティカルな現場でも通用する高い品質基準だ。今後は、ツール契約の不一致をCI等で機械的に検出する仕組みの導入が期待される。