Skip to content

Security: TaewonyNet/ArachneControl

Security

SECURITY.md

보안 정책

취약점 신고

보안 취약점은 공개 이슈로 올리지 말고 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=1 opt-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, CSP connect-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)

There aren't any published security advisories