권한 체계를 사내 모드 기준으로 정리하고 실행 단위 승인 범위를 바로잡음
사내 모드에서 process/build_run/open_external 경로의 외부 접근 차단 범위를 강화했습니다. http_tool과 외부 URI 차단에 더해 curl, Invoke-WebRequest 같은 네트워크성 명령과 build_run custom 실행을 내부 정책으로 막아 실제 동작이 정책 선언과 더 가깝게 맞춰지도록 했습니다. ChatWindow의 '이번 실행 동안 허용' 승인 규칙을 run-scope로 변경했습니다. 탭 실행 시작과 종료 시 승인 캐시를 초기화하고 같은 실행 안에서만 동일 범위 접근을 재질문 없이 재사용하도록 정리해 창 수명 동안 규칙이 남던 문제를 줄였습니다. 권한 건너뛰기 관련 UI/상태 문구를 실제 동작과 맞췄고, OperationModePolicyTests·OperationModeReadinessTests·AgentLoopE2ETests·LlmOperationModeTests를 통해 권한 정책과 사내 모드 차단 회귀를 검증했습니다. dotnet build 경고 0 / 오류 0, 권한 관련 테스트 49건 통과를 확인했습니다.
This commit is contained in:
@@ -1436,3 +1436,37 @@ UI ?붿옄???洹쒕え 由ы뙥?좊쭅 ???꾪뿕 ?묒뾽 ??湲곕줉???덉쟾
|
||||
- `src/AxCopilot.Tests/Services/AgentLoopE2ETests.cs`에 세 가지 회귀를 추가했습니다. 대화 워크스페이스가 stale settings 폴더보다 우선 적용되는지, 사내 모드 + BypassPermissions에서 워크스페이스 내부 쓰기가 승인 없이 허용되는지, 외부 경로 쓰기는 반드시 승인 콜백을 타는지를 각각 검증합니다.
|
||||
- 검증: `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_workspace_permission_fix\\ -p:IntermediateOutputPath=obj\\verify_workspace_permission_fix\\` 경고 0 / 오류 0
|
||||
- 검증: `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "FullyQualifiedName~RunAsync_CodeRuntimeWorkspaceOverride_PrefersConversationWorkspaceOverSettingsFolder|FullyQualifiedName~RunAsync_InternalMode_BypassPermissions_AllowsWorkspaceWriteWithoutPrompt|FullyQualifiedName~RunAsync_InternalMode_BypassPermissions_RequestsApprovalForPathOutsideWorkspace|FullyQualifiedName~RunAsync_EmptyWorkspace_BlocksExternalFallbackAndRecoversToFileWrite|FullyQualifiedName~RunAsync_EmptyWorkspace_DisallowsSkillManagerAndRecoversToFileWrite|FullyQualifiedName~RunAsync_TextEmbeddedToolCall_RecoversAndExecutesFileWrite" -p:OutputPath=bin\\verify_workspace_permission_fix_tests\\ -p:IntermediateOutputPath=obj\\verify_workspace_permission_fix_tests\\` 통과 6
|
||||
업데이트: 2026-04-15 16:30 (KST)
|
||||
|
||||
### 권한 체계 정리 1차
|
||||
- `src/AxCopilot/Services/OperationModePolicy.cs`
|
||||
- 사내 모드에서 차단할 외부 접근 기준을 보강했습니다.
|
||||
- `open_external`은 HTTP/HTTPS뿐 아니라 `mailto:` 같은 외부 URI scheme도 차단하고, `process`/`build_run`에서 재사용할 네트워크성 명령 패턴 판정 helper를 추가했습니다.
|
||||
- `src/AxCopilot/Services/Agent/ProcessTool.cs`
|
||||
- 사내 모드에서 `curl`, `Invoke-WebRequest` 등 외부 네트워크 접근 가능성이 높은 명령은 실행 전에 즉시 차단합니다.
|
||||
- `src/AxCopilot/Services/Agent/BuildRunTool.cs`
|
||||
- 사내 모드에서 `action=custom`은 차단하고, 알려진 네트워크성 명령 패턴도 실행 전에 막습니다.
|
||||
- `src/AxCopilot/Services/Agent/OpenExternalTool.cs`
|
||||
- 직접 도구 호출 경로에서도 외부 URI 차단이 일관되게 적용되도록 `OperationModePolicy.IsExternalUri(...)`를 사용하도록 정리했습니다.
|
||||
- `src/AxCopilot/Views/ChatWindow.xaml.cs`
|
||||
- `이번 실행 동안 허용` 승인 규칙을 탭 실행 단위로 관리하도록 바꿨습니다.
|
||||
- 실행 시작과 종료 시 run-scope 승인 캐시를 비우고, 같은 실행 안에서만 동일 범위 접근을 재질문 없이 통과시킵니다.
|
||||
- `src/AxCopilot/Services/Agent/PermissionModePresentationCatalog.cs`
|
||||
- 권한 모드 설명을 실제 동작에 맞게 재작성했습니다.
|
||||
- `src/AxCopilot/Views/ChatWindow.PermissionPresentation.cs`
|
||||
- `권한 건너뛰기` 배너 문구를 사내 모드 예외까지 반영하도록 수정했습니다.
|
||||
- `src/AxCopilot/Services/AppStateService.cs`
|
||||
- 앱 상태 요약의 권한 설명도 동일한 의미론으로 맞췄습니다.
|
||||
|
||||
### 테스트
|
||||
- `src/AxCopilot.Tests/Services/OperationModePolicyTests.cs`
|
||||
- 외부 URI/mailto 차단
|
||||
- 네트워크성 shell 명령 감지
|
||||
- `ProcessTool` 사내 모드 차단
|
||||
- `BuildRunTool` custom 차단
|
||||
- `src/AxCopilot.Tests/Services/OperationModeReadinessTests.cs`
|
||||
- `OpenExternalTool`의 외부 URI scheme 차단 회귀 추가
|
||||
- 검증
|
||||
- `dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_permission_policy_cleanup\\ -p:IntermediateOutputPath=obj\\verify_permission_policy_cleanup\\` 경고 0 / 오류 0
|
||||
- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "OperationModePolicyTests|OperationModeReadinessTests|AgentLoopE2ETests" -p:OutputPath=bin\\verify_permission_policy_cleanup_tests\\ -p:IntermediateOutputPath=obj\\verify_permission_policy_cleanup_tests\\` 통과 46
|
||||
- `dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "LlmOperationModeTests" -p:OutputPath=bin\\verify_permission_policy_llm_tests\\ -p:IntermediateOutputPath=obj\\verify_permission_policy_llm_tests\\` 통과 3
|
||||
|
||||
Reference in New Issue
Block a user