세션 고정 공격은 정당한 사용자가 공격자가 알고 있는 세션 아이디를 사용하도록 강제할 때 발생합니다. 고정 공격을 피하기 위해서는, 유저가 인증을 할 때 마다 새로운 세션을 생성하고, 세션이 만료될 때 기존 세션(공격자가 알고있는)을 삭제하거나 무효화하는 것이 좋은 습관입니다.
규칙을 어긴 코드
스프링 시큐리티 콘텍스트에서, 세션 고정 보호는 기본적으로 활성화되지만, sessionFixation().none()
메소드를 통해 비활성화 될 수 있습니다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement()
.sessionFixation().none(); // 규칙을 어긴 코드: 존재하는 세션이 계속 유지됩니다.
}
규칙을 준수한 해결책
스프링 시큐리티 콘텍스트에서, 세션 고정 보호는 다음과 같이 활성화 시킬 수 있습니다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement()
.sessionFixation().newSession(); // 규칙을 준수한 코드: 기존 세션의 Attributes 를 복사하지 않고 새로운 세션을 생성합니다.
// or
http.sessionManagement()
.sessionFixation().migrateSession(); // 규칙을 준수한 코드: 새로운 세션이 생성되면, 이전 세션은 만료되고 이전 세션의 Attributes 가 복사됩니다.
}
참고
- OWASP Top 10 2021 Category A7 - Identification and Authentication Failures
- OWASP Top 10 2017 Category A2 - Broken Authentication
- OWASP Sesssion Fixation
- MITRE, CWE-384 - Session Fixation
If you like SONARKUBE, don’t forget to give me a star.