weaver2๋ ๋ณด์ผ๋ฌํ๋ ์ดํธ์ด๋ฏ๋ก ํญ์ main ๋ธ๋์น์ ์ต์ ์ปค๋ฐ๋ง ๋ณด์ ํจ์น๋ฅผ ๋ฐ์ต๋๋ค.
์ด ์ ์ฅ์๋ฅผ forkยท๋ณต์ ํด์ ์ด์ ์ค์ธ ํ๋ก์ ํธ๋ ์์ฒด ์ ์ฑ
์ ๋์
์ผ ํฉ๋๋ค.
| ๋์ | ๋ณด์ ํจ์น |
|---|---|
main ๋ธ๋์น |
โ ํ์ฑ |
| ๊ณผ๊ฑฐ ํ๊ทธ | โ ์์ (ํ์ ์ ์ง์ cherry-pick) |
| ์ธ์ฃผ ๋ณต์ ๋ณธ | ๊ฐ ํ๋ก์ ํธ ์ฑ ์ |
GitHub Security Advisories๋ฅผ ํตํด ๋น๊ณต๊ฐ๋ก ๋ณด๊ณ ํด์ฃผ์ธ์.
- ๊ณต๊ฒฉ ์๋๋ฆฌ์ค + ์ฌํ ์ ์ฐจ
- ์ํฅ ๋ฒ์ (์ด๋ค ๋ผ์ฐํธยท๊ธฐ๋ฅ)
- ๊ฐ๋ฅํ๋ฉด PoC
๋์ ์ํ:
- 48์๊ฐ ์ด๋ด ์ ์ ํ์ธ (Acknowledge)
- 7์ผ ์ด๋ด ์ด๊ธฐ ๋ถ๋ฅ + ๋ฑ๊ธ ๋ถ์ฌ (CVSS ๊ธฐ์ค)
- 30์ผ ์ด๋ด ํจ์น ๋ฐฐํฌ (High/Critical์ ๊ฐ๋ฅํ ๋นจ๋ฆฌ)
์ด๋ฏธ ๊ณต๊ฐ๋ CVE์ด๊ฑฐ๋ third-party ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด์์ธ ๊ฒฝ์ฐ ์ผ๋ฐ Issue๋ก๋ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ณด์ผ๋ฌํ๋ ์ดํธ๊ฐ ๊ธฐ๋ณธ ์ ๊ณตํ๋ ๋ณด์ ์ฅ์น (์ธ์ฃผ ๋ณต์ ์ ๊ทธ๋๋ก ๋ฐ๋ผ์ด):
- JWT HttpOnly ์ฟ ํค (Access 15๋ถ / Refresh ์ต๋ 30์ผ)
- Refresh token rotation (์ฌ์ฉ ํ ์ฆ์ ํ๊ธฐ + ์ ํ ํฐ ๋ฐ๊ธ)
- ๊ณ์ ์ ๊ธ (5ํ ์คํจ โ 15๋ถ)
- ๊ณ์ ์ ์ง (
suspendedUntil) - ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ์ ์ ์ฒด ์ธ์ ๋ฌดํจํ
- 2FA: TOTP + Email OTP
- ์ญํ ๋์ ๊ถํ ๊ทธ๋ฃน ๊ธฐ๋ฐ
@RequirePermission๋ฐ์ฝ๋ ์ดํฐ +PermissionGuard(๊ธ๋ก๋ฒ)- ํ๋ก ํธ:
RequirePermission์ปดํฌ๋ํธ +hasPermission()์์ผ๋์นด๋ - ์ต๋ช
IDOR ์ฐจ๋จ (
board-permission.service.ts)
csrf-csrf(active maintenance) + double-submit ํจํด- Helmet (HSTS, X-Frame-Options, CSP ๋ฑ)
useStaticAssets์ dotfile ์ฐจ๋จยทindex ๋นํ์ฑ
- ์ ์ญ 60์ด/100ํ
- sign-in: 60์ด/10ํ
- 2FA: 60์ด/3~5ํ
- password-reset: 60์ด/3~5ํ
- email-change: 60์ด/3~5ํ
- upload: 60์ด/10ํ
- search: 60์ด/20ํ
- report: 60์ด/5ํ
- 3-layer ๊ฐ๋ (
.gitignore+ husky pre-commit + CIsecret-filesjob) - ์ฐจ๋จ ํจํด:
.env*(๋จ,.env.example์์ธ),*.pem/.key/.p12/.pfx/.crt/.cer,id_rsa*,id_ed25519*
pnpm audit --audit-level=high๋งค์ฃผ ์ 09:00 KST + ์์กด์ฑ PR๋ง๋ค- CodeQL
security-extended๋งค์ฃผ ์ 14:00 KST + PR๋ง๋ค - ๋ฐ๊ฒฌ ์ GitHub Issue ์๋ ์์ฑ ๋๋ PR ์ฐจ๋จ
- High/Critical CVE ๋ฐ๊ฒฌ ์ ์ฆ์ ํจ์น PR
- Dependabot ํ์ฑํ ๊ถ์ฅ (์ธ์ฃผ ๋ณต์ ์๋ ๋์ผ)
package.json์engines.node >= 22,pnpm >= 11๊ฐ์
- Security Advisory ๋๋ ๋ด๋ถ ๋ชจ๋ํฐ๋ง (Sentry, CodeQL Issue)
- ์ํฅ ๋ฒ์ ํ๊ฐ: ์ด๋ค ์ฌ์ฉ์ยท๋ฐ์ดํฐยท๊ธฐ๊ฐ
- ์ฆ์ ์ํฅ ๋ผ์ฐํธ ๋นํ์ฑํ (feature flag ๋๋ deploy ๋กค๋ฐฑ)
- ํ์ ์ ์ํฅ ์ฌ์ฉ์ ์ธ์ ๊ฐ์ ๋ง๋ฃ
fix/security-XXX๋ธ๋์น์์ ์์- ํ๊ท ๋ฐฉ์ง unit test ํจ๊ป ์ถ๊ฐ (ํ์)
- High/Critical์ PR ๋ฆฌ๋ทฐ์ด 2๋ช + ์๋์ด sign-off
- staging ๊ฒ์ฆ ํ ์ฆ์ production deploy
- DB ๋ง์ด๊ทธ๋ ์ด์ ๋๋ฐ ์ rollback plan ์ค๋น
- ์ํฅ ์ฌ์ฉ์ ์๋ฆผ (๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ ์ด์๋ฉด ์ ๊ณ ์๋ฌด)
- Postmortem ์์ฑ (
docs/incidents/<date>-<title>.md) - ์ฌ๋ฐ ๋ฐฉ์ง ์ก์ โ ROADMAP.md ๋๋ Issue๋ก ๋ฑ๋ก
๋ชจ๋ PR
โ
ci.yml::secret-files โ .env/key ํ์ผ ์ฐจ๋จ
ci.yml::test-integration โ auth-security ํ๊ท ํ
์คํธ
codeql.yml โ security-extended ์ ์ ๋ถ์
security.yml โ deps ๋ณ๊ฒฝ ์ audit
๋งค์ฃผ ์์์ผ
โ
security.yml::audit (09:00) โ pnpm audit
codeql.yml::analyze (14:00) โ CodeQL ์ ๊ท ๋ฃฐ ์ ์ฉ
- ๋ณด์ ๋ณด๊ณ : GitHub Security Advisories (์ ๋งํฌ)
- ์ผ๋ฐ ๋ฌธ์: Issue ๋๋ README์ ๋ฉ์ธ contact
m(_ _)m ๋ณด์ ๋ณด๊ณ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฌ์ฉ์ ์์ ์ ํจ๊ป ์ง์ผ์ฃผ์๋ ๋ชจ๋ ๋ถ๊ป ๊ฐ์ฌํฉ๋๋ค.