Repository navigation
fix: 게임 빌드 시크릿 기본값을 없애고 비어 있으면 웹훅·업로드 토큰을 모두 막는다 - #143
Conversation
- application.yml의 GAME_BUILD_SECRET 기본값(local-dev-secret)을 제거한다. 이 값은 웹훅 인증과 업로드 토큰 HMAC 서명에 함께 쓰여, 환경변수가 빠지면 저장소에 공개된 값으로 둘 다 위조할 수 있었다. - 시크릿이 비어 있으면 웹훅은 401(이전에는 빈 시크릿과 빈 헤더가 일치해 통과), 토큰 발급은 503으로 막는다. - 웹훅 시크릿 비교를 SHA-256 후 MessageDigest.isEqual로 바꿔 상수 시간으로 비교한다.
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 44 minutes. View limit details
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
요약
app.game-build.secret은 홈페이지 서버와 공유하는 값으로 완료 웹훅 인증과 업로드 토큰 HMAC 서명에 함께 쓰인다. 기존 설정에는 세 가지 문제가 있었다.${GAME_BUILD_SECRET:local-dev-secret}— 환경변수가 빠지면 저장소에 공개된 값으로 웹훅과 업로드 토큰을 둘 다 위조할 수 있었다.""로 받으므로"".equals("")가 되어 시크릿 헤더 없는 웹훅이 통과했다(/v1/games/**는 permitAll이라 시크릿이 유일한 인증이다).String.equals비교라 응답 시간으로 값이 드러날 수 있었다.변경
secret: ${GAME_BUILD_SECRET:}.GameBuildProperties.matchesSecret(): 설정이 비었거나 헤더가 비면 항상 불일치, 아니면 SHA-256 후MessageDigest.isEqual(봇 서비스 토큰 인증과 같은 방식).503 GAME_BUILD_UPLOAD_NOT_CONFIGURED(이전에는 빈 키로 HMAC을 만들다 500)..env.example에GAME_BUILD_SECRET설명 추가.배포 전 확인
운영
deploy.yml은GAME_BUILD_SECRET저장소 시크릿을 넘긴다. 이 시크릿이 설정돼 있으면 동작 변화 없음. 비어 있으면 머지 후 게임 빌드 업로드가 503이 되므로, 홈페이지 서버와 같은 값을 넣어야 한다. 로컬 개발에서 게임 빌드 업로드를 쓰려면.env에 값을 넣는다.테스트
GameBuildPropertiesTest(단위): 일치/불일치, 빈 설정에서 빈 값도 불일치, 빈 설정에서 토큰 발급 거부.GameBuildWebhookNoSecretIntegrationTest: 시크릿 미설정 서버에서 헤더 없음·빈 헤더 웹훅 모두 401.AdminGameBuildIntegrationTest는 저장소 기본값 대신 테스트 프로퍼티로 시크릿을 받는다../gradlew test: 537건 중 536 통과, 1 스킵.Summary by CodeRabbit