[하루한줄] CVE-2025-59287: WSUS(Windows Server Update Services)의 인증되지 않은 RCE 취약점

URL

Target

WSUS가 설치 및 활성화된 서버에만 영향

  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016
  • Windows Server 2019
  • Windows Server 2022
  • Windows Server 2025

Explain

Windows Server Update Services(WSUS)는 기업 환경에서 Windows 업데이트의 승인, 배포, 모니터링을 중앙에서 담당하는 인프라 서비스입니다. CVE-2025-59287은 WSUS의 웹 보고&관리 엔드포인트가 외부에서 전송된 직렬화(serialized) 데이터를 적절히 검증하지 않고 .NET 런타임에서 역직렬화(deserialization)를 수행할 때 발생한 원격 코드 실행(RCE) 취약점입니다.

해당 취약점은 GetCookie() 엔드포인트로 전송된 AuthorizationCookie 객체의 역직렬화 과정에서 발생합니다. WSUS의 Microsoft.UpdateServices.Internal.Authorization.EncryptionHelper.DecryptData() 메서드는 복호화된 바이트를 충분히 검증하지 않고 BinaryFormatter.Deserialize()로 역직렬화하여 SYSTEM 권한으로 원격 코드 실행을 가능하게 합니다.

else
{
    BinaryFormatter binaryFormatter = new BinaryFormatter();
    MemoryStream memoryStream = new MemoryStream(array);
    try
    {
        obj = binaryFormatter.Deserialize(memoryStream); // [1]
    }
    catch (Exception ex2)
    // ...
    if (obj.GetType() != this.classType) // [2]
    {
        throw new LoggedArgumentException("Decrypted cookie has the wrong data type. Expected type = " + this.classType.ToString() + ", actual type = " + obj.GetType().ToString(), "cookieData");
    }
}
return obj;

[1] 위 과정은 복호화된 쿠키 바이트(array)를 MemoryStream에 담아 BinaryFormatter.Deserialize()로 역직렬화하는 과정입니다. 하지만 [2] 이에 대한 타입 검사가 역직렬화 후에 일어납니다. 이에 공격자는 soserial.net과 같은 도구로 가젯 체인 페이로드를 만들어 BinaryFormatter로 역직렬화될 때 애플리케이션이 임의의 코드를 실행하도록 유도할 수 있습니다. 이러한 악용은 RCE로 이어질 수 있습니다.

Flow

취약점 흐름은 아래와 같습니다.

1) 조작된 SOAP 요청 전송

인증되지 않은 공격자가 WSUS의 SOAP의 엔드포인트 /ClientWebService/Client.asmx 로 조작된 요청을 전송합니다. 이 때 요청 헤더에는 SOAPAction: “…/GetCookie" 등이 포함됩니다.

POST /ClientWebService/Client.asmx HTTP/1.1
Host: WSUS-SERVER:8530
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetCookie"
Content-Length: 3632

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetCookie xmlns="http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService">
      <authCookies>
        <AuthorizationCookie>
          <PlugInId>SimpleTargeting</PlugInId>
          <CookieData>[GENERATED PAYLOAD]</CookieData>
        </AuthorizationCookie>
      </authCookies>
      <oldCookie xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
      <protocolVersion>1.20</protocolVersion>
    </GetCookie>
  </soap:Body>
</soap:Envelope>

2) AuthorizationCookie 안에 악성 페이로드 삽입

요청의 본문에 AuthorizationCookieCookieData 필드에 악성 페이로드가 들어갑니다. 해당 페이로드는 Base64로 인코딩된 후 AES-128-CBC로 암호화된 형태로 전송됩니다.

3) 서버의 요청 수신 → 처리

해당 요청은 AuthorizationManager.GetCookie로 전달되고, 내부적으로 CrackAuthorizationCookiesCrackAuthorizationCookie 호출 경로를 따라 EncryptionHelper.DecryptData()에 도달합니다.

4) 복호화 단계

DecryptData()는 하드코딩된 AES키를 사용해 페이로드를 복호화합니다.

5) 역직렬화

복호화된 바이트는 MemoryStream으로 감싸져 바로 BinaryFormatter.Deserialize()에 전달됩니다. 이 지점에서 BinaryFormatter는 바이트 스트림의 타입 정보를 이용해 객체를 복원하고 생성자, ISerializable 후크·OnDeserialized 같은 콜백을 자동으로 실행할 수 있습니다. 이 때 역직렬화 후에 obj.GetType()으로 타입을 검사하므로, 이미 일어난 악성 동작을 차단하지 못합니다.

6) 가젯 체인 실행 → RCE

공격자의 페이로드는 서버의 가젯체인을 악용한다면,
WSUS 프로세스(wsusservice.exe 또는 w3wp.exe)가 SYSTEM 권한으로 동작하는 환경에서 RCE가 발생할 수 있습니다.

현재 PoC는 찾아볼 수 있지만, 이 게시글에서 다루지 않습니다.

Fetch

Microsoft는 CVE-2025-59287과 관련한 보안 업데이트를 발표했으나, 초기 패치가 완전하지 않아 추가 긴급 패치가 배포되었고 실제 공격 시도/악용이 보고되어 즉시 패치 적용 및 포트 완화 조치가 필요합니다.

Reference

https://socprime.com/blog/cve-2025-59287-detection

https://www.picussecurity.com/resource/blog/cve-2025-59287-explained-wsus-unauthenticated-rce-vulnerabili



본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.