피드로 돌아가기
Dev.toSecurity
원문 읽기
Wrapper 기반 가드에서 State-level 강제 제어로 전환한 Safari MCP 보안 강화
My safety guard protected 2 tools and trusted the other 20
AI 요약
Context
AI 에이전트의 브라우저 제어 권한을 에이전트가 생성한 탭으로 제한하는 Ownership Guard 아키텍처 설계. 단순 Wrapper 함수에 보안 로직을 배치하여 실제 페이지 변이(Mutation)를 일으키는 다수의 Tool 경로가 검증 없이 엔진에 직접 접근하는 보안 허점 발생.
Technical Solution
- Chokepoint 강화를 위해 Wrapper 방식에서 모든 Mutation 경로에
_assertTabOwnership()를 강제 호출하는 전수 적용 구조로 변경 - Batch 실행 시 진입점(Entrance) 단일 검증에서 각 단계(Step)별 상태 변화 시점에 검증을 수행하는 State Change Guard로 전환
- 단순 String Prefix 매칭에서 세그먼트 경계를 포함한 정밀 매칭 로직으로 변경 및
ownership-match.js순수 모듈 분리를 통한 Unit Test 체계 구축 - TTL 갱신 로직을 로드 시점이 아닌 사용 시점으로 변경하여 세션 유지 기간 중 소유권이 무한히 확장되는 현상 해결
- MV3 Service Worker 재시작 시 메모리 맵 초기화로 인한 Fail-Open 문제를
storage.session기반의 Fail-Closed 구조로 개선
실천 포인트
1. 보안 검증 로직이 모든 진입 경로를 실제로 통과하는지 Call Graph 확인
2. `startsWith` 등 단순 문자열 비교를 권한 경계(Security Boundary)로 사용하고 있지 않은지 검토
3. 캐시 초기화나 프로세스 재시작 시 시스템이 허용(Open) 상태가 되는지 차단(Closed) 상태가 되는지 확인
4. 비즈니스 로직과 결합된 보안 규칙을 순수 함수 모듈로 분리하여 테스트 가능성 확보