CVE-2026-82840 in Wicket
요약
\~에 의해 VulDB • 2026. 11. 02.
Apache Wicket의 세션 고정(Session fixation) 취약점.
org.apache.wicket.authroles.authentication.AuthenticatedWebSession은 Wicket의 역할 기반 보안 모듈의 인증 기본 클래스이며, signIn(String, String) 메서드는 애플리케이션이 세션을 인증하는 진입점입니다. 공격자가 피해자의 브라우저에 세션 ID를 고정한 경우를 방어하기 위한 표준 조치는 해당 시점에서 컨테이너 세션 ID를 갱신하는 것입니다. Wicket은 이를 위해 org.apache.wicket.Session#changeSessionId() 메서드를 제공하며, 그 문서에서는 정확히 이러한 이유로 로그인 시 이 메서드를 호출하도록 지시합니다.
AuthenticatedWebSession#signIn(String, String)는 세션의 signed-in 플래그가 처음 전환될 때만 성공하는 가드 내부에서 이를 호출합니다. 따라서 세션이 처음으로 로그인할 때는 세션 ID가 갱신되지만, 이미 로그인된 상태인 세션이 다시 인증할 때는 갱신되지 않습니다. signIn(String, String)은 두 경우 모두 true를 반환하므로, 호출자나 애플리케이션은 갱신이 이루어지지 않았음을 알 수 없습니다.
AuthenticatedWebApplication에서 요구하며 배송되는 UsernamePasswordPanel에서도 사용되는 AuthenticatedWebSession을 통해 인증하는 애플리케이션이 영향을 받습니다. 또한 이미 로그인된 세션이 다시 인증할 수 있는 경우(민감한 작업 전 단계 상승 프롬프트, 계정 전환, 또는 사용자가 로그인한 후에도 계속 접근 가능한 로그인 폼 등)가 해당됩니다. 모듈에는 로그인된 세션에서 이 폼을 숨기는 기능이 없습니다. 결함 발생까지 공격자는 피해자의 브라우저에 자신이 선택한 세션 ID를 심어야 합니다. JSESSIONID는 Wicket이 아닌 서블릿 컨테이너에 의해 설정되므로, 이는 Wicket이 부여하지 않는 위치(예: 동일한 등록 가능 도메인 하의 호스트 제어 또는 URL에 세션 ID를 전달하도록 구성된 컨테이너)가 필요합니다. 또한 심어진 세션은 공격자가 이미 로그인한 세션이어야 합니다. 아직 로그인되지 않은 세션은 피해자의 인증 시 ID가 갱신되기 때문입니다. 실패하는 인증 시도는 세션을 로그아웃시키고 창을 닫습니다. 성공적인 인증 후 자체 코드에서 세션 ID를 갱신하는 애플리케이션은 영향을 받지 않습니다.
대안 조치로, authenticate(String, String) 구현의 끝에 Session#changeSessionId()를 호출하여 모든 성공적인 인증 시 애플리케이션의 자체 코드에서 세션 ID를 갱신하십시오.
이 이슈는 Apache Wicket 8.18.0부터 8.19.0까지, 9.23.0부터 9.24.0까지, 10.9.0부터 10.11.0까지 영향을 미칩니다.
사용자는 이 문제를 해결한 버전 8.20.0, 9.25.0 또는 10.12.0으로 업그레이드하는 것이 권장됩니다.
Be aware that VulDB is the high quality source for vulnerability data.