From a5deecf51968782bbcc7e9434ec338ba057d2eb0 Mon Sep 17 00:00:00 2001 From: AWESOMEDEV Date: Fri, 17 Jul 2026 19:01:46 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20SEC-02=C2=B703=C2=B704=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EC=99=84=EB=A3=8C=20=ED=91=9C=EA=B8=B0=20+=20CI=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=8A=A4=EC=BA=94=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 티켓 풀: 감사로그(SEC-02)·레이트리밋(SEC-03)·접근로그(SEC-04) '구현됨' 표기 - CI.md: npm audit·OSV-Scanner(비차단) 구성과 Spring Boot 3.4.2 누적 CVE 발견 기록 Co-Authored-By: Claude Opus 4.8 --- deploy/CI.md | 17 +++++++++++++++++ frontend/public/docs/ticket-pool.html | 6 +++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/deploy/CI.md b/deploy/CI.md index aeb3160..637192e 100644 --- a/deploy/CI.md +++ b/deploy/CI.md @@ -83,6 +83,23 @@ CI가 통과해야 하는 관문이 아래처럼 늘었다. **로컬에서 먼 > 커버리지 바닥(30%/40%)은 "지금보다 나빠지지 마라"는 **래칫(ratchet)**이다. > 테스트를 늘리면 이 숫자도 함께 올려 바닥을 끌어올리는 게 건강한 흐름. +## 의존성 취약점 스캔 (라이브러리 CVE) + +우리가 직접 쓴 코드뿐 아니라 "가져다 쓰는 라이브러리"에도 취약점이 생긴다. CI가 이를 훑는다. + +| 대상 | 도구 | 방식 | +|---|---|---| +| 프론트(npm) | `npm audit --omit=dev --audit-level=high` | 온디맨드(대용량 DB 없음) | +| 백엔드(Maven) | OSV-Scanner v2.4.0, `scan source -r backend` | osv.dev 온디맨드 질의 | + +**둘 다 비차단(`continue-on-error`)으로 "보고 전용" 시작한다.** 이유: 이 스캔은 "코드"가 +아니라 "외부 권고 DB 상태"에 결합돼, 우리가 한 줄도 안 고쳐도 새 CVE가 공개되면 차단형이면 +무관한 PR까지 전부 CI가 붉어진다. 팀이 수용목록(allow-list) 운영에 익숙해지면 차단으로 승격한다. + +> ⚠️ **첫 스캔이 이미 값어치를 증명했다**: 백엔드 OSV 스캔이 Spring Boot 3.4.2의 +> 누적 CVE(tomcat-embed-core·spring-security-* 등, 일부 CVSS 9점대)를 다수 찾아냈다. +> 대부분 **Spring Boot 패치 버전 업그레이드로 한 번에 해결**된다 — 별도 후속 티켓 권장. + ## main 브랜치 보호 (PR 워크플로) `main`은 보호 규칙이 걸려 있다(Gitea → 저장소 설정 → 브랜치): diff --git a/frontend/public/docs/ticket-pool.html b/frontend/public/docs/ticket-pool.html index 81d7f05..58c954c 100644 --- a/frontend/public/docs/ticket-pool.html +++ b/frontend/public/docs/ticket-pool.html @@ -438,7 +438,7 @@
-
SEC-02

민감 PII 작업 감사로그

1일
+
SEC-02

민감 PII 작업 감사로그 ✅ 구현됨

1일
무엇을전체 인적사항 CSV 다운로드·멘토 비번 재설정·명단 조회에 "행위자(멘토)+대상 학생 id+시각"을 log.info로 남긴다. 세션 Authentication에서 행위자를 얻는다.
찾는 법백엔드 log.* 호출은 LoginAttemptService·TelegramNotifier뿐. mentor/auth/profile 경로엔 감사로그가 전무 — 누가 전체 명단을 받았는지 추적 불가.
@@ -448,7 +448,7 @@
-
SEC-03

공개 쓰기 엔드포인트 레이트리밋

★★2일
+
SEC-03

공개 쓰기 엔드포인트 레이트리밋 ✅ 구현됨

★★2일
무엇을이미 있는 LoginAttemptService 패턴(IP+창시간)을 재사용해 POST /api/auth/signupPUT /api/profile/me에 분당 상한을 건다.
찾는 법signup은 무인증으로 DB에 계정을 쓰고 성공마다 텔레그램 알림까지 쏜다 — 남용 시 가짜계정·알림 폭주 표면.
@@ -458,7 +458,7 @@
-
SEC-04

개인정보 열람·내보내기 접근 로그

0.5일
+
SEC-04

개인정보 열람·내보내기 접근 로그 ✅ 구현됨 (SEC-02에 통합)

0.5일
무엇을/api/mentor/students(전체 인적사항)와 /export.csv에 접근 한 줄(사용자·행위·시각) 로그를 남긴다. SEC-02와 짝.
찾는 법두 경로 모두 누가·언제 접근했는지 기록이 0. 유출 시 추적 근거가 없다.