왜 지금 Keycloak에 주의가 필요한가?

기업용 솔루션 개발 회사에서 일하다 보면, 자사 솔루션 뿐만 아니라, 기간계 시스템에서 로그인을 해야 할 여러 시스템 들이 많기 때문에 이러한 계정을 하나로 통합하는 일들이 적지 않습니다. 뭐 자금력이 풍부한 기업들은 상용 SSO을 많이 사용하지만, 그렇지 않은 기업이나, 경제성을 따진다면 오픈소스로 많이 알려진 Keycloak을 쓰는 경우도 많을 것 같습니다.
그런데 최근 이 Keycloak에서 보안이슈가 등작했습니다. 2026 년 8 월 발표된 CVE‑2026‑18963 은 바로 그 시나리오를 현실로 만들 수 있는 취약점입니다. 올해 초부터 연속된 세 건의 중대 CVE가 보고된 바 있어, 보안팀이 눈을 뗄 수 없는 상황입니다.
이번 취약점은 비밀번호 재설정 흐름(reset‑credentials) 에서 상태 검증이 누락돼, 인증 토큰 없이 바로 새 비밀번호를 지정할 수 있게 합니다. CVSS 9.1 (Critical) 점수는 “인증 없이 원격에서 전체 계정 탈취 가능”을 의미합니다. 그러면 “Forgot Password” 기능 하나만으로 조직 전체가 위험에 처하게 됩니다.
원래 보안 관련된 포스팅을 다루진 않지만, 자주 고려되는 시스템인 만큼 기록하는 의미에서 포스팅을 해보도록 하겠습니다.
취약점 메커니즘 상세 – 흐름도와 실제 요청 예시
비밀번호 재설정 흐름의 기존 구조
Keycloak은 사용자가 “비밀번호를 잊었습니다”를 클릭하면 /reset-credentials 엔드포인트를 통해 이메일에 전송된 토큰을 검증하고, 검증 성공 시 비밀번호 변경 UI를 표시합니다. 핵심은 상태(state) 파라미터가 서버‑사이드에 저장된 토큰과 매칭되는지 검증하는 과정입니다.
상태 검증 부재가 초래하는 취약점
CVE‑2026‑18963 은 reset‑credentials 흐름에서 state 검증 로직이 누락 된 버전을 대상으로 합니다. 공격자는 토큰 없이 특수한 POST 요청을 바로 /reset-credentials 로 전송하면, 서버는 세션 상태를 “비밀번호 변경 단계”로 전이시키고, 이후 newPassword 파라미터만 전달하면 즉시 비밀번호가 변경됩니다.
POST /auth/realms/master/reset-credentials HTTP/1.1
Host: keycloak.example.com
Content-Type: application/x-www-form-urlencoded
client_id=admin-cli&username=admin&newPassword=NewPass!2026
위와 같은 요청에 대해 200 OK와 함께 “Password updated successfully” 메시지가 반환됩니다. 정상 흐름에서는 code 혹은 token 파라미터가 반드시 존재해야 하지만, 해당 버전에서는 체크가 이루어지지 않아 인증 없이 비밀번호가 교체됩니다.
시퀀스 다이어그램 (요약)
Attacker → /reset-credentials (POST) → [State 검증 없음] → 비밀번호 변경 UI 표시 →
Attacker → /reset-credentials (POST, newPassword) → 비밀번호 즉시 교체 → 계정 장악
이와 같은 흐름은 관리자 계정을 포함한 모든 사용자를 대상으로 할 수 있어, 전체 시스템 장악이 가능해집니다.
실제 위험·영향도 – 조직 전반에 미치는 파급 효과
관리자 계정 탈취 = 전체 시스템 장악
Keycloak은 SSO·OAuth·OpenID Connect의 중추 역할을 수행합니다. 관리자가 탈취되면 클라이언트 등록, 역할(Roles) 수정, 사용자 프로비저닝 등 모든 IAM 기능을 조작할 수 있습니다. 결과적으로 내부 포털, CI/CD 파이프라인, 클라우드 콘솔 등 연동 서비스가 전부 위험에 노출됩니다.
영향을 받는 버전과 배포 형태
| 구분 | 영향을 받는 버전 |
|---|---|
| Upstream Keycloak | 26.7.2 이상 (2026‑08‑19 발표) |
| Red Hat Build of Keycloak (RHBK) | 26.4.15, 26.6.6 (RHSA‑2026:5651x) |
Red Hat Enterprise Linux 8/9 컨테이너 이미지와 OpenShift Operator 역시 동일 버전에서 동일 취약점이 발견되었습니다.
연관된 최근 CVE와 복합 위협
- CVE‑2026‑15571 – 예측 가능한 계정‑링크 해시를 이용한 정보 수집
- CVE‑2026‑17059 – Access‑control 우회 취약점
이들 취약점과 결합될 경우, 공격자는 먼저 비밀번호 재설정으로 계정을 장악한 뒤, 링크 해시를 통해 추가 사용자 정보를 수집하거나, 부적절한 권한 상승을 시도할 수 있습니다.
패치·업데이트 가이드 – 즉시 적용해야 할 단계
최신 버전 다운로드 및 적용 절차
- 업스트림:
https://github.com/keycloak/keycloak/releases/tag/26.7.2에서 최신 JAR·Docker 이미지 다운로드. - Red Hat:
yum update keycloak-26.4.15혹은oc adm upgrade로 Operator 버전을 26.6.6 이상으로 전환. - 데이터베이스 마이그레이션:
bin/kc.sh build --features=none후,bin/kc.sh start로 마이그레이션 스크립트 자동 실행.
임시 완화 조치
패치를 바로 적용할 여유가 없다면, Forgot Password 기능을 전체 비활성화하는 것이 가장 안전합니다. Realm → Login → Forgot password 옵션을 OFF 로 전환하면, 해당 엔드포인트가 차단됩니다.
# kc.sh을 이용한 API 비활성화 예시
kcadm.sh update realms/master -s 'resetPasswordAllowed=false'
비활성화 후에도 비밀번호 정책(예: 최소 12자, 특수문자 포함)과 MFA(다중 인증) 를 강제 적용해 추가 방어막을 구축합니다.
테스트 검증 팁
- 취약점 시뮬레이션: 위 HTTP 요청을 테스트 환경에 보내
401 Unauthorized혹은403 Forbidden응답을 확인. - 로그 확인:
org.keycloak.events로깅을 활성화해RESET_PASSWORD이벤트가 정상 흐름인지 검증.
재발 방지를 위한 베스트 프랙티스 – 보안·운영 관점에서의 가이드
흐름에 CSRF·OTP 추가
reset‑credentials 단계에 CSRF 토큰을 요구하고, 비밀번호 변경 시 OTP(One‑Time‑Password) 를 추가하면, 무증거·무공격 검증의 위험을 크게 감소시킵니다.
Realm‑별 보안 정책 강화
- 로그인 시도 제한: 동일 IP에서 5회 초과 실패 시 자동 차단.
- MFA 강제 적용: 관리자와 고위험 사용자에 대해 TOTP 혹은 FIDO2 인증을 필수화.
자동화된 CVE 스캔·패치 파이프라인
CI/CD 파이프라인에 Snyk, GitHub Dependabot 등 자동 보안 스캔 도구를 연동하고, 취약점이 발견되면 GitOps 기반 자동 업데이트(ArgoCD, Flux) 를 도입합니다.
정기적인 보안 감사
외부 펜테스트 업체와 연계해 6개월마다 IAM 전반에 대한 침투 테스트를 수행하고, 결과를 토대로 보안 정책을 갱신합니다.
결론/요약 – 지금 조직이 해야 할 일
- Critical 취약점: CVE‑2026‑18963 은 인증 없이 전체 계정을 탈취할 수 있는 CVSS 9.1 수준.
- 즉시 적용: Keycloak 26.7.2 이상 또는 Red Hat Build 26.4.15/26.6.6 이상으로 패치하고, 임시 완화로 Forgot Password 기능을 비활성화.
- 보안 팀 알림: CVE 정보를 공유하고, 침해 사고 대응 매뉴얼을 업데이트.
- 장기 전략: MFA·CSRF·OTP 적용, 자동 패치 파이프라인 구축, 정기적인 보안 감사·펜테스트 수행.
추가 참고
https://access.redhat.com/security/cve/CVE-2026-18963– Red Hat CVE 어드바이저https://bugzilla.redhat.com/show_bug.cgi?id=2511595– Bugzilla 보고서https://keycloak.org/2026/08/keycloak-2672-released– 공식 릴리즈 노트https://github.com/keycloak/keycloak/releases– GitHub 릴리즈 페이지






답글 남기기