보안 취약점은 공개 이슈로 올리지 말고 GitHub의 비공개 신고 경로를 이용해 주세요:
- 저장소 Security → Report a vulnerability(GitHub Private Vulnerability Reporting).
가능하면 다음을 포함해 주세요: 영향 범위, 재현 절차, 영향을 받는 버전. 접수 후 합리적인 기간 내에 회신하고, 수정 릴리스와 함께 공개합니다.
최신 MINOR 릴리스에 대해 보안 수정을 제공합니다.
| 버전 | 지원 |
|---|---|
| 1.3.x | ✅ |
| < 1.3 | ❌ |
- 관리 인증 secure-by-default: 관리 API/WebUI는 기본 인증 ON(Jupyter식 자동 토큰, 미설정 시 기동 시 자동 생성·콘솔 출력). fail-open 폐기. 토큰 비교는 timing-safe(
secrets.compare_digest)이고, 토큰은 콘솔에만 출력되어 인메모리 로그(/admin/logs)로 새지 않습니다. (docs/specs/08_security_legal.md) - Zero-Footprint: 타겟 백엔드에 직접 부하를 주지 않고 사용자 브라우저 세션을 사용합니다. 핑거프린팅 미사용(client_id는 무의미 랜덤).
- 클라 실행 경계: 서버 응답을 클라가 eval하는
script커맨드는 기본 비활성(로더?allowScript=1opt-in),beacon송출 대상은 서버 오리진으로 제한(임의 외부 exfil 차단). - 액션 화이트리스트: 교정/수집 액션은
click·drag·scroll·hover·wait·swipe·type·extract·read_clipboard·fetch_image·frame_extract·frame_tour만 허용(Pydantic discriminated union 강제).script/eval류는 노출되지 않습니다 —type도 텍스트를 값으로만 주입할 뿐 코드를 실행하지 않습니다.read_clipboard는 실험적 액션으로, 브라우저 clipboard-read 권한이 그 origin에 사전 승인되어 있고 호출 시점에 탭이 포커스 상태여야만 동작합니다(둘 다 브라우저가 강제하는 조건이라 자동화가 우회할 수 없습니다).fetch_image(실험적, 이미지 한정 아님 —img요소의src만 있으면 어떤 바이너리든)는 로그인 세션에 묶인 바이너리를 로더가 쿠키 포함해서 fetch한 뒤<img src>GET 비콘으로 청크 분할 업로드(GET /api/v1/blob-chunk.json, CSPconnect-src우회 —img-src는 열려 있는 경우가 흔함)하고, 운영자는GET /agent/blob/{id}(admin 인증)로 내려받습니다 — 블롭은 op-스코프 + TTL 10분의 휘발성 메모리 저장소(adapters/blob_store.py)입니다. (POST /agent/blob도 무인증으로 서버에 남아있지만 로더는 호출하지 않음 — 향후 확장 브리지 전용.) MCP 도구도 host allowlist(기본 거부)·동시성 상한·rate-limit·op TTL을 코드 상수+게이트로 강제합니다. - 공개 엔드포인트 rate-limit: 전 엔드포인트에 고정 윈도(60s) 요청 상한(기본 600/분). 초과 시 429. 개방 읽기 채널(
/api/v1/*.json·sync.js)은 관리 인증 없이 op_id(96bit)·task_id(122bit) 엔트로피 + rate-limit로 방어합니다(의도된 설계 — 자기 제출 확인·클라 동기화 흐름 보존). - 로컬 자격증명(env 전용):
ADMIN_TOKEN등은 환경변수 또는 로컬.env에만 두며 저장소에 커밋하지 않습니다(.gitignore). 수집 DB(*.db)·인증서(*.pem)도 커밋 금지. - CI 시크릿 스캔: PR마다 시크릿/개인정보 패턴을 스캔해 유입을 차단합니다.
cloudflared 임시 터널(ENABLE_TUNNEL=1)이나 리버스 프록시로 외부 노출할 때는:
ADMIN_TOKEN을 명시 지정 → ALLOW_ORIGINS를 실제 출처로 제한 → ARACHNE_DISABLE_AUTH를
켜지 말 것. quick tunnel은 임시(테스트·HTTPS 구성)용이며, 정상 서비스는 고정 HTTPS 인증서 +
인바운드(PUBLIC_URL 또는 리버스 프록시)가 필요합니다. (docs/specs/21_tunnel.md)