22228에 대한 상세 분석
- 영향을 받는 제품:Spring® Security
- 영향을 받는 패키지: spring-security-crypto
- 영향을 받는 버전
- 5.6.12 이상
- 5.7.0 - 5.7.15
- 5.8.0 - 5.8.17
- 6.0.0 - 6.0.15
- 6.1.0 - 6.1.13
- 6.2.0 - 6.2.9
- 6.3.0 - 6.3.7
- 6.4.0 - 6.4.3
- GitHub 리포지토리:
- https://github.com/spring-projects/spring-security
- 게시된 패키지:
- https://mvnrepository.com/artifact/org.springframework.security/spring-security-crypto
- 수정됨:ELS forSpring® Security v5.8.16.TuxCare
BCrypt 해시 비밀번호의 최대 길이는 72자입니다. 스프링 보안 암호의 BCrypt 클래스에 있는 hashpw 함수는 비밀번호의 처음 72자만 해시합니다. 이보다 긴 비밀번호는 처음 72자를 기준으로만 유효성을 검사합니다.
패치를 적용한 후에는 72자를 초과하는 기존 비밀번호가 제대로 작동하려면 해당 비밀번호를 사용하는 사용자는 로그인할 수 없으므로 비밀번호를 재설정해야 합니다. 72자를 초과하는 새 비밀번호는 허용되지 않습니다.
재현 단계
아래 테스트(출처: Joe Grandja)를 적용하면 이 취약점을 테스트할 수 있습니다.
@Test
public void enforcePasswordLength() {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String password72chars = "123456789012345678901234567890123456789012345678901234567890123456789012";
assertThat(encoder.matches(password72chars, encoder.encode(password72chars))).isTrue();
String password73chars = password72chars.concat("a");
assertThatIllegalArgumentException()
.isThrownBy(() -> encoder.matches(password73chars, encoder.encode(password73chars)));
}
완화
Spring® Security 5.8.x는 오픈소스 커뮤니티에서 더 이상 지원되지 않습니다. 해당 버전의 지원 종료일은 2023년 12월 31일입니다. 이는 단순히 해당 날짜 이후 버전에서는 이 문제를 해결하기 위한 업데이트를 받지 못함을 의미합니다.
영향을 받는 컴포넌트의 사용자는 다음 완화 조치 중 하나를 적용해야 합니다:
- 정기적인 커뮤니티 EOL 보안 지원을 연장하는 TuxCare의 무한 수명 주기 지원을 활용하세요.
- 또는 수정 사항이 통합된 최신 지원 중인Spring® Security 오픈소스 버전(6.3.8 또는 6.4.4)으로 업그레이드하는 노력을 기울이십시오.
다른Spring® Security 버전에 대한 이 취약점 패치가 필요하신 경우, 저희에게 연락해 주십시오. 도움을 드리겠습니다!