Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Security: seoul-fit/backend

Security

SECURITY.md

Security Policy

πŸ” λ³΄μ•ˆ μ •μ±…

Seoul Fit ν”„λ‘œμ νŠΈμ˜ λ³΄μ•ˆμ„ μ€‘μš”ν•˜κ²Œ μƒκ°ν•©λ‹ˆλ‹€. 이 λ¬Έμ„œλŠ” λ³΄μ•ˆ 취약점을 μ‹ κ³ ν•˜λŠ” 방법과 우리의 λ³΄μ•ˆ 정책을 μ„€λͺ…ν•©λ‹ˆλ‹€.

πŸ“Œ μ§€μ›λ˜λŠ” 버전

ν˜„μž¬ λ³΄μ•ˆ μ—…λ°μ΄νŠΈλ₯Ό λ°›λŠ” 버전:

Version Supported
1.0.x βœ…
< 1.0 ❌

🚨 λ³΄μ•ˆ 취약점 μ‹ κ³ 

μ‹ κ³  방법

λ³΄μ•ˆ 취약점을 λ°œκ²¬ν•˜μ…¨λ‹€λ©΄, 곡개 이슈둜 λ³΄κ³ ν•˜μ§€ λ§ˆμ„Έμš”. λŒ€μ‹  λ‹€μŒ 방법 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•΄ μ£Όμ„Έμš”:

  1. 이메일: [email protected]
  2. GitHub Security Advisories: Security Advisories νŽ˜μ΄μ§€
  3. PGP μ•”ν˜Έν™” 이메일 (선택사항):
    PGP Key Fingerprint: [μΆ”ν›„ 제곡]
    

μ‹ κ³  μ‹œ 포함해야 ν•  정보

효과적인 취약점 처리λ₯Ό μœ„ν•΄ λ‹€μŒ 정보λ₯Ό 포함해 μ£Όμ„Έμš”:

  • 취약점 μœ ν˜• (예: SQL Injection, XSS, CSRF λ“±)
  • 영ν–₯λ°›λŠ” μ»΄ν¬λ„ŒνŠΈ (파일 경둜, λͺ¨λ“ˆλͺ…)
  • μž¬ν˜„ 단계 (μƒμ„Έν•œ 단계별 μ„€λͺ…)
  • 영ν–₯ λ²”μœ„ (μ–΄λ–€ λ°μ΄ν„°λ‚˜ κΈ°λŠ₯이 영ν–₯λ°›λŠ”μ§€)
  • κ°œλ… 증λͺ…(PoC) μ½”λ“œ (μžˆλŠ” 경우)
  • μ œμ•ˆν•˜λŠ” μˆ˜μ • 방법 (μžˆλŠ” 경우)

μ˜ˆμ‹œ ν…œν”Œλ¦Ώ

## 취약점 μš”μ•½
[취약점에 λŒ€ν•œ κ°„λ‹¨ν•œ μ„€λͺ…]

## 영ν–₯λ°›λŠ” 버전
- 버전: [예: 1.0.0 - 1.0.3]

## 취약점 상세
[μƒμ„Έν•œ μ„€λͺ…]

## μž¬ν˜„ 단계
1. [첫 번째 단계]
2. [두 번째 단계]
3. [κ²°κ³Ό]

## 영ν–₯
[이 취약점이 μ•…μš©λ  경우의 영ν–₯]

## μ œμ•ˆν•˜λŠ” ν•΄κ²°μ±…
[κ°€λŠ₯ν•œ ν•΄κ²° 방법]

⏱️ λŒ€μ‘ μ‹œκ°„

  • 졜초 응닡: 48μ‹œκ°„ 이내
  • μƒνƒœ μ—…λ°μ΄νŠΈ: 5μΌλ§ˆλ‹€
  • 패치 릴리슀: 심각도에 따라
    • πŸ”΄ Critical: 24μ‹œκ°„ 이내
    • 🟠 High: 7일 이내
    • 🟑 Medium: 30일 이내
    • 🟒 Low: λ‹€μŒ μ •κΈ° 릴리슀

πŸ“Š 심각도 λΆ„λ₯˜

πŸ”΄ Critical

  • 인증 우회
  • 원격 μ½”λ“œ μ‹€ν–‰
  • 데이터 유좜 (λŒ€λŸ‰)
  • μ„œλΉ„μŠ€ 전체 쀑단

🟠 High

  • κΆŒν•œ μƒμŠΉ
  • SQL Injection
  • 민감 정보 λ…ΈμΆœ
  • XSS (μ €μž₯ν˜•)

🟑 Medium

  • CSRF
  • XSS (λ°˜μ‚¬ν˜•)
  • μ„Έμ…˜ κ³ μ •
  • 정보 λ…ΈμΆœ (μ œν•œμ )

🟒 Low

  • 디버그 정보 λ…ΈμΆœ
  • λ³΄μ•ˆ 헀더 λˆ„λ½
  • 버전 정보 λ…ΈμΆœ

πŸ›‘οΈ λ³΄μ•ˆ λͺ¨λ²” 사둀

개발자λ₯Ό μœ„ν•œ κ°€μ΄λ“œλΌμΈ

1. μž…λ ₯ 검증

// ❌ 잘λͺ»λœ 예
public User getUser(String id) {
    return repository.findById(id);
}

// βœ… μ˜¬λ°”λ₯Έ 예
public User getUser(String id) {
    if (!isValidUserId(id)) {
        throw new IllegalArgumentException("Invalid user ID");
    }
    return repository.findById(id);
}

2. SQL Injection λ°©μ§€

// ❌ 잘λͺ»λœ 예
String query = "SELECT * FROM users WHERE id = " + userId;

// βœ… μ˜¬λ°”λ₯Έ 예 (Prepared Statement μ‚¬μš©)
@Query("SELECT u FROM User u WHERE u.id = :userId")
User findByUserId(@Param("userId") Long userId);

3. 민감 정보 보호

// ❌ 잘λͺ»λœ 예
log.info("User login: " + username + ", password: " + password);

// βœ… μ˜¬λ°”λ₯Έ 예
log.info("User login attempt: {}", username);

4. μ•”ν˜Έν™”

// λΉ„λ°€λ²ˆν˜ΈλŠ” 항상 ν•΄μ‹œν™”
@Service
public class PasswordService {
    private final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
    
    public String hashPassword(String rawPassword) {
        return encoder.encode(rawPassword);
    }
}

πŸ” λ³΄μ•ˆ 검사 체크리슀트

배포 μ „ 확인사항:

  • λͺ¨λ“  μ‚¬μš©μž μž…λ ₯이 κ²€μ¦λ˜λŠ”κ°€?
  • SQL Injection 취약점이 μ—†λŠ”κ°€?
  • XSS 취약점이 μ—†λŠ”κ°€?
  • CSRF λ³΄ν˜Έκ°€ ν™œμ„±ν™”λ˜μ–΄ μžˆλŠ”κ°€?
  • λ―Όκ°ν•œ 정보가 λ‘œκ·Έμ— κΈ°λ‘λ˜μ§€ μ•ŠλŠ”κ°€?
  • API 킀와 μ‹œν¬λ¦Ώμ΄ ν™˜κ²½λ³€μˆ˜λ‘œ κ΄€λ¦¬λ˜λŠ”κ°€?
  • HTTPSκ°€ κ°•μ œλ˜λŠ”κ°€?
  • λ³΄μ•ˆ 헀더가 μ„€μ •λ˜μ–΄ μžˆλŠ”κ°€?
  • μ˜μ‘΄μ„±μ΄ μ΅œμ‹  버전인가?
  • μ—λŸ¬ λ©”μ‹œμ§€κ°€ λ―Όκ°ν•œ 정보λ₯Ό λ…ΈμΆœν•˜μ§€ μ•ŠλŠ”κ°€?

πŸ† λ³΄μ•ˆ μ—°κ΅¬μž 인정

λ³΄μ•ˆ 취약점을 μ±…μž„κ° 있게 μ‹ κ³ ν•΄ μ£Όμ‹  μ—°κ΅¬μžλ“€κ»˜ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€:

Hall of Fame

  • [μ—°κ΅¬μž 이름] - [취약점 μœ ν˜•] (λ‚ μ§œ)
  • (λͺ©λ‘μ€ κΈ°μ—¬κ°€ μžˆμ„ λ•Œ μ—…λ°μ΄νŠΈλ©λ‹ˆλ‹€)

πŸ“š λ³΄μ•ˆ λ¦¬μ†ŒμŠ€

🀝 μ±…μž„κ° μžˆλŠ” 곡개

μš°λ¦¬λŠ” μ±…μž„κ° μžˆλŠ” 곡개 원칙을 λ”°λ¦…λ‹ˆλ‹€:

  1. 취약점 μ‹ κ³  μ ‘μˆ˜
  2. 취약점 확인 및 μž¬ν˜„
  3. 패치 개발 및 ν…ŒμŠ€νŠΈ
  4. 패치 릴리슀
  5. 곡개 λ°œν‘œ (μ‹ κ³ μžμ™€ ν˜‘μ˜ ν›„)

πŸ“ž μ—°λ½μ²˜


이 λ³΄μ•ˆ 정책은 μ •κΈ°μ μœΌλ‘œ κ²€ν† λ˜κ³  μ—…λ°μ΄νŠΈλ©λ‹ˆλ‹€.

λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈ: 2025-08-21

There aren’t any published security advisories