← 목록
기타 2026-07-07 4KB 읽기 4분

게이트웨이 회원인증·유료화·코드보호 + 보안성 체크

2026-07-07. 요청: 코드분석 불가·크라우니 회원전용·월1회 재로그인·사용기록 공유 안내·2026-09-30부터 레벨별 유료(크라우니달러). 기능 구현+보안 체크.

통합 (기존 인프라 위에)

  • 인증 = crowny-auth auth.crowny.org:9401불투명 세션토큰(crypto.randomBytes, 서버측 조회, JWT 아님). GET /api/verify(Authorization) → userInfo, POST /api/touch(사용기록 공유, 이미 존재), 크라우니달러=wallet.crowny.

구현 (그림자 검증)

  • 게이트웨이Q/인증게이트.한선 — opt-in 인증게이트: 정책조회(gateway.yaml auth 필드)·토큰추출(쿠키/Bearer)·토큰검증(9401 위임+60s 캐시)·월재로그인·사용기록공유·유료게이트(2026-09-30 epoch 1790768770)·인증결정(0/401/402/403).
  • 게이트웨이Q/웹/사용안내.html — 동의 안내(회원전용·월1회 재로그인·생태계 사용기록 공유·9/30 레벨별 유료). 크라우니디자인·자립.
  • 배선 opt-in: gateway.yaml auth: member/level:N 있는 서비스만. 293 공개서비스 무변경(공개 기본). auth 다운→공개 fail-open/보호 fail-closed.
  • 그림자(8098) 실측: 보호 무토큰→401+auth 리다이렉트, 무효토큰→401(9401 실호출), 공개→200 무영향, 라이브 도메인 200.

코드 보호 (다른 사람이 분석 불가)

  • 시크릿 grep 0건 — 게이트웨이는 시크릿 미임베드(위임검증). 토큰=불투명 세션ID → 코드 분석해도 위조 불가.
  • .toau 불투명 — strings/grep으로 아무 ASCII도 추출 안 됨(4상균형3진 단일라인). toau 배포 시 로직 비공개 달성.
  • ⚠ 패키징은 현재 소스 재컴파일 구조(설치경로 토큰치환) → toau-only 배포와 트레이드오프. 시크릿 없어 소스노출=IP만(보안취약 아님). 후속조치 3안 문서화.

보안성 체크 — ★내가 직접 발견·수정한 CRITICAL

  • RCE (셸 주입, critical): _토큰실검증 189행이 사용자 제어 토큰을 curl -H 'Authorization: <토큰>' 셸명령에 직접 보간 → crowny_token=x'; 명령; echo ' 로 게이트웨이 호스트 원격코드실행. 수정: _토큰안전(원토큰) 문자셋 검증([A-Za-z0-9._=-], ≤512) 선통과 — 그 외 문자 토큰은 무효처리. 실증: 악성토큰 거부(-1), /tmp 파일생성 안 됨.

보안 적대검증 결과 (25에이전트, 25발견, 반증 통과 다수)

RCE 외에 추가 치명 취약점을 잡았다(모듈 라이브 미배선이라 현재 노출 0 — 배포 전 필수 수정):

#취약점심각도상태
RCE-토큰토큰→curl 셸 보간(189행)critical✅ 내가 수정(_토큰안전) + 재검증 38벡터 견고
사용기록공유 셸주입사용자명·도메인→curl -d 보간(287행), /tmp 마커 실증critical경화중
크라우니달러 위조grep head-1이 displayName의 crowny:999 먼저 매치 → 유료게이트 무료우회(실증)critical경화중
CRLF 인젝션도메인/경로→응답헤더 CR/LF 미필터 → 응답스플리팅(실증)high경화중
캐시 무한성장append-only+64KB캡 → 캐시 영구무력화high경화중
단일스레드 DoS보호요청마다 blocking curl -m2 → 전 게이트웨이 정지high태스크#8 연계
쿠키 경계crowny_token= 부분매칭 디코이medium경화중
스푸핑헤더X-Forwarded-User 등 미제거medium경화중
paywall epoch1790768770 vs 설계 00:00 불일치low경화중
교훈: 체계()+curl에 모든 요청/응답 데이터(토큰·사용자명·도메인·경로) 보간 전 새니타이즈 필수. grep으로 JSON 파싱 금지(필드순서 위조). 첫 RCE 하나만 고치고 자매 함수(사용기록공유) 놓치면 그대로 뚫림 — 패턴 전수 적용.

잔여

  • 라이브 배선(gateway.yaml auth 필드+승격)은 승인 대기. authLevelMin 서비스별 오버라이드 미구현. 유효토큰 happy-path 미검증(테스트계정 제약). auth profiles.json의 테스트프로필 _qa_probe_ef 정리 필요(소유자).