서명을 검사하지 않은 토큰 하나가 관리자 열쇠가 됐다 — SharePoint 사전인증 RCE 체이닝
서명을 검사하지 않은 토큰 하나가 관리자 열쇠가 됐다 — SharePoint 사전인증 RCE 체이닝
분류: CVE · 웹·서버 · RCE [정보성] · CVE-2023-29357 / CVE-2023-24955
덱. Microsoft SharePoint Server에서 인증 우회 결함(CVE-2023-29357)과 원격 코드 실행 결함(CVE-2023-24955)을 이어 붙이면, 로그인 계정 없이도 서버에 임의 명령을 실행할 수 있는 사전인증(pre-auth) RCE 체인이 완성됩니다. 이 글이 다루는 원문은 이 체인을 실제로 재현한 뒤 메모리 덤프를 WinDbg로 뜯어보며 공격이 서버 내부에서 어떻게 흘러가는지 포렌식으로 되짚은 디버깅 사례 연구입니다.
리드
취약점 두 개를 따로 놓고 보면 심각도가 갈립니다. 하나는 “인증을 우회해 남의 권한을 얻는” 결함이고, 다른 하나는 “인증된 사용자가 서버에 파일을 심어 코드를 실행하는” 결함입니다. 후자만 보면 “어차피 로그인은 해야 하니 문턱이 있다”고 여길 수 있습니다. 하지만 전자가 그 문턱 자체를 없애버리면 이야기가 달라집니다. 이번 SharePoint 사례는 서명 검증이라는 아주 기본적인 절차 하나가 빠졌을 때, 그 구멍이 뒤에 있는 다른 기능(파일 업로드·역직렬화·명령 실행)까지 통째로 무인증 영역으로 끌어내릴 수 있음을 보여주는 사례입니다.
핵심 사실 요약
- CVE-2023-29357은 Microsoft SharePoint Server의 권한상승(EoP) 취약점입니다. 원격의 인증되지 않은 공격자가 위조한 JSON 웹 토큰(JWT)을 SharePoint 인증 헤더로 보내면, 서버가 이를 정상 인증된 사용자로 처리해버립니다.
- 원문이 확인한 위조 방식은 JWT 헤더의 서명 알고리즘(
alg)을"none"으로 지정하는 고전적인 “alg:none” 트릭입니다. 서버가 서명 검증 없이 페이로드의 클레임(claim)을 그대로 신뢰하면, 공격자는 페이로드에 관리자 권한에 해당하는 값을 채워 넣는 것만으로 관리자급 세션을 얻습니다. 원문의 메모리 덤프에서는 이렇게 조작된 토큰이Bearer eyJhbGciOiAibm9uZSJ9...형태로 SharePoint의/_vti_bin/client.svc/ProcessQuery요청 헤더에 실려 들어간 것이 실제로 관측됩니다. - CVE-2023-24955는 별도의 원격 코드 실행(RCE) 취약점으로, 이미 인증된 세션을 전제로 합니다. 원문의 재현 과정에서는 이 인증된 컨텍스트로 SharePoint의 비즈니스 데이터 연동 기능(Business Data Connectivity, 특정 외부 데이터 소스를 정의하는 메타데이터 파일을 다루는 기능)에 접근해, 조작된 메타데이터 파일(
BDCMetadata.bdcm)을 서버의BusinessDataMetadataCatalog폴더에 업로드하는 과정이 확인됩니다. - 두 취약점을 이으면 공격 순서는 이렇게 됩니다: (1) 서명 없는 JWT로 인증을 우회해 관리자급 컨텍스트를 얻는다 → (2) 그 컨텍스트로 조작된 메타데이터 파일을 업로드한다 → (3) 서버가 그 파일을 처리하는 과정에서 공격자가 지정한 코드가 실행된다. 원문의 메모리 분석에서는 이 실행 단계의 흔적으로
cmd.exe /c mspaint.exe를 실행하도록 구성된 프로세스 시작 정보(ProcessStartInfo) 객체와, 서버의 임시 컴파일 폴더에 남은.aspx웹셸 파일 흔적이 함께 발견됩니다. 원문이 실제로 기록한 실행 명령은cmd.exe /c mspaint.exe(그림판 구동)이며, 업로드된 XML 페이로드나 실제 악용에 쓰인 명령의 세부 구조까지는 다루지 않습니다. - 원문에 따르면 CVE-2023-29357은 2023년 6월 Patch Tuesday(매월 정기 보안 업데이트일)에 수정됐습니다. 원문은 SharePoint 패치가 Windows Update로 자동 적용되지 않으며 별도의 신중한 패치 절차가 필요하다는 점을 별도로 강조합니다.
- 원문은 두 CVE의 정식 발견자로 STAR Labs SG를 명시하지 않고, 참고 링크로 STAR Labs의 Pwn2Own Vancouver 2023 관련 분석 글을 안내합니다. 팩트체크로 확인: 이 체인은 2023년 3월 Pwn2Own Vancouver에서 STAR Labs SG 소속 연구자 Nguyễn Tiến Giang이 패치 완료 상태의 SharePoint Server 2019를 대상으로 최초 시연했고, 기술 분석은 2023년 9월 STAR Labs 블로그에 공개됐습니다. 공식 CVSS 기본점수는 CVE-2023-29357이 9.8(치명적), CVE-2023-24955가 7.2로, 여러 독립 매체에서 일치하게 확인됩니다. ⚠️미확인(잔여) — 두 CVE에 영향받는 SharePoint 전체 버전·에디션(2016 / 2019 / Subscription Edition 등) 목록은 MSRC 공식 페이지 접근 실패로 이 초안에서 직접 확증하지 못했습니다.
- 원문(GitHub 저장소)은 취약점을 최초 발견·공개한 리서치 글이 아니라, 공개된 익스플로잇 체인을 실제로 재현한 뒤 그 실행 흔적을 WinDbg 메모리 포렌식으로 되짚어본 디버깅 사례 연구입니다. 이 글도 그 성격을 그대로 따라, 재현이 아니라 공개된 분석 내용을 정리한 것입니다.
짧은 논평
이 사례가 인상적인 지점은 코드 인젝션 자체의 정교함이 아니라, 그 앞단을 지키던 문 하나가 통째로 열려 있었다는 점입니다. JWT의 alg:none 문제는 새로운 취약점 유형이 아닙니다. 서명 검증을 신뢰 경계로 삼는 시스템에서 “서명이 없다고 선언하면 검증을 건너뛴다”는 구현 실수는 여러 플랫폼에서 반복돼 온 클래식한 실패 패턴입니다. 저희가 다른 정보성 글에서 다룬 사례들과 마찬가지로, 여기서도 핵심은 “인증”과 “인가된 기능”을 분리해서 생각해야 한다는 원칙입니다. 인증 계층 하나가 무너지면 그 뒤에 잠들어 있던 “인증된 사용자만 쓸 수 있다고 가정하고 설계된” 다른 모든 기능이 한꺼번에 공격 표면으로 바뀝니다. 파일 업로드나 메타데이터 파싱처럼 평소엔 “로그인한 직원만 쓰는 기능이라 위험도가 낮다”고 분류되던 코드가, 인증 우회 취약점 하나로 사전인증 RCE의 마지막 퍼즐 조각이 되는 것도 같은 이유입니다. 방어 관점에서 이 사례가 남기는 교훈은 단순합니다 — 인증 계층은 그 자체로도 견고해야 하지만, 그 뒤에 있는 기능들도 “이미 인증됐으니 안전하다”는 가정에 기대지 않고 각자 입력을 의심해야 합니다.
References / 참고자료
- DebugPrivilege, “Debug Case Study: SharePoint Pre-Auth Code Injection RCE chain CVE-2023-29357 & CVE-2023-24955” — 이 글이 재구성한 원 분석. 재현된 공격 체인을 WinDbg 메모리 덤프로 추적한 디버깅 사례 연구. https://github.com/DebugPrivilege/InsightEngineering/tree/main/Debugging%20Case%20Studies/Debug%20Case%20Study%3A%20SharePoint%20Pre-Auth%20Code%20Injection%20RCE%20chain%20CVE-2023-29357%20%26%20CVE-2023-24955
- STAR Labs SG (Nguyễn Tiến Giang), “[P2O Vancouver 2023] SharePoint Pre-Auth RCE chain (CVE-2023-29357 & CVE-2023-24955)” — 위 원문이 인용한 취약점 체인의 원 분석(2023년 9월 공개, Pwn2Own Vancouver 2023 시연 기반). https://starlabs.sg/blog/2023/09-sharepoint-pre-auth-rce-chain/
이 글은 위 원 분석을 우리 관점에서 다시 쓰고 짧은 논평을 더한 정보성 초안입니다. 특정 문장·요청 페이로드·스크린샷을 그대로 옮기지 않았으며, 작동하는 재현 절차나 완성형 익스플로잇은 싣지 않았습니다. ⚠️미확인 표시 항목은 발행 전 독립 팩트체크에서 확증·정정되어야 합니다.
이 한 틈은 고쳐졌지만 이 사고방식은 다른 자리에서 또 나옵니다 — 그래서 저희는 도구가 아니라 방법을 남깁니다.