CVE-2012-1889 — MSXML Uninitialized Memory Corruption - Security Bez Tabu

CVE-2012-1889 — MSXML Uninitialized Memory Corruption

TL;DR

  • CVE‑2012‑1889 to podatność RCE w Microsoft XML Core Services 3.0/4.0/5.0/6.0 (MSXML) wyzwalana przez przeglądarkę/ActiveX — masowo wykorzystywana w kampaniach watering‑hole (drive‑by).
  • Realistyczne mapowanie do ATT&CK: T1189 (wejście przez stronę), T1203 (eksploatacja klienta), T1204.001 (kliknięcie w link).
  • Detekcja: korelacja dziecko procesu iexplore.exe/Office ⇒ cmd.exe/powershell.exe/mshta.exe/rundll32.exe, ładowanie msxml*.dll, artefakty proxy/IDS (sygnatury CVE‑2012‑1889).
  • Priorytet: systemy z MSXML 4.0 (EoL) i legacy IE; podatność jest w CISA KEV — traktuj jako must‑patch.
  • Remediacja: MS12‑043 + usunięcie MSXML 4.0; krótkoterminowo (historycznie) „Fix it” blokował CLSID/ActiveX.

Krótka definicja techniczna

CVE‑2012‑1889 to błąd niezainicjalizowanego dostępu do pamięci w MSXML (klasa use‑after‑free), który podczas wywołań API obiektów DOM/ActiveX (np. getDefinition / get_definition) pozwala złośliwej stronie WWW doprowadzić do zdalnego wykonania kodu w kontekście użytkownika. Najczęściej exploit był dostarczany przez IE (ActiveX) w scenariuszu drive‑by lub jako zawartość dokumentów Office (MSXML5).


Gdzie występuje / przykłady platform

  • Windows (klient/VDI/serwery terminalowe) – Internet Explorer/ActiveX, MSXML 3/4/6 w systemie; MSXML 5 w Office 2003/2007.
  • Active Directory środowiska korporacyjne – wektory przez stacje użytkowników domenowych (przeglądarka).
  • M365/Exchange/SharePoint (historycznie) – dokumenty/komponenty wykorzystujące MSXML5.
  • Chmury (AWS/Azure/GCP) – wektorem jest klient użytkownika; payloady bywały hostowane na serwerach/obiektach web/S3 (telemetria proxy/CloudTrail pomocna, ale sama podatność nie dotyczy usług chmurowych).
  • ESXi/K8snie dotyczy bezpośrednio (klient‑side).

Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)

MSXML udostępnia obiekty COM/ActiveX do pracy z XML (DOM/SAX/XMLHTTP). W podatnych wersjach wywołanie metod na niezainicjalizowanym węźle mogło skutkować korupcją pamięci (UAF) i przekierowaniem sterowania do shellcode (typowo po heap‑sprayu). Atakujący osadzali kod w zainfekowanych stronach („watering‑hole”), iframe’ach lub reklamach (malvertising). Mechanizm działał bez dodatkowej interakcji poza odwiedzeniem strony (lub kliknięciem linku) i był aktywnie wykorzystywany przed poprawką (zero‑day); Microsoft opublikował tymczasowy „Fix it” oraz finalny biuletyn MS12‑043 z łatami dla MSXML 3/4/5/6.

Dlaczego skuteczne: powszechność MSXML/IE w tamtym okresie, niski próg aktywacji (wizyta na stronie), możliwość obejścia zabezpieczeń przeglądarki (wówczas). Kampanie Elderwood i VOHO używały m.in. tego CVE w łańcuchach SWC (strategic web compromise).


6) Artefakty i logi

ŹródłoArtefakt / poleCo szukaćUwagi
Sysmon EID 1/ProcessCreateParentImage=iexplore.exe/winword.exe/excel.exe/powerpnt.exe; Image w {cmd.exe,powershell.exe,mshta.exe,wscript.exe,cscript.exe,rundll32.exe,regsvr32.exe,bitsadmin.exe,certutil.exe}Dziecko procesu po renderowaniu treści/ActiveXTypowy post‑exploit (payload).
Sysmon EID 7/ImageLoadedImageLoaded ~ \msxml*.dllŁadowanie biblioteki MSXML w kontekście przeglądarki/OfficeKoreluj z EID 1.
Sysmon EID 11/FileCreateTworzenie plików w %TEMP%, %APPDATA% po wizycie na stronieWskaźnik droppera
Security 4688Tworzenie procesu (Windows)Lustrzane do Sysmon EID 1
WFP 5156 / ProxyPołączenia HTTP(S) do nieznanych domen bezpośrednio po wizycie na stronie; UA zaw. MSIE/TridentKorelacja czasu/Referrer
Aplikacja 1000/1001Błędy IE/wyjątkiCzasem towarzyszą RCE
IDS/IPS/WAFSygnatury „MSIE MSXML CVE‑2012‑1889”Trafienia podczas wizyty na stroniePrzykładowa sygnatura Broadcom.
CloudTrailNie dotyczy (klient‑side). Możliwa analiza S3 GetObject jako źródła payloadu.Patrz sekcja 7 (zapytanie pomocnicze).
K8s auditNie dotyczy
M365 Unified AuditNie dotyczy

Detekcja (praktyczne reguły)

Sigma (Windows / process_creation)

title: Suspicious Child from IE/Office After MSXML Rendering (CVE-2012-1889 Context)
id: 9f9f0f3e-7a4c-4c4b-9e1b-1889cve-msxml
status: experimental
description: Wykrywa potencjalny post-exploit po drive-by (IE/Office → LOLBIN/skr. interpretery)
author: Badacz CVE
date: 2025/11/05
logsource:
  category: process_creation
  product: windows
detection:
  parent_browsers:
    ParentImage|endswith:
      - '\iexplore.exe'
      - '\winword.exe'
      - '\excel.exe'
      - '\powerpnt.exe'
  suspicious_children:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\mshta.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\rundll32.exe'
      - '\regsvr32.exe'
      - '\bitsadmin.exe'
      - '\certutil.exe'
  condition: parent_browsers and suspicious_children
fields:
  - CommandLine
  - ParentCommandLine
  - Image
  - ParentImage
  - User
falsepositives:
  - Dodatki/plug-iny Office, instalatory/dystrybutory oprogramowania
level: high
references:
  - https://learn.microsoft.com/en-us/security-updates/securitybulletins/2012/ms12-043
  - https://nvd.nist.gov/vuln/detail/CVE-2012-1889

(MS12‑043/NVD potwierdzają kontekst RCE klienta; reguła celuje w fazę po‑eksploatacyjną.)

Splunk (Sysmon)

index=endpoint sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
| eval parent=lower(coalesce(ParentImage,ParentProcessName))
| eval child=lower(Image)
| search parent IN ("*\\iexplore.exe","*\\winword.exe","*\\excel.exe","*\\powerpnt.exe")
| search child IN ("*\\cmd.exe","*\\powershell.exe","*\\mshta.exe","*\\wscript.exe","*\\cscript.exe","*\\rundll32.exe","*\\regsvr32.exe","*\\bitsadmin.exe","*\\certutil.exe")
| table _time, Computer, User, ParentImage, CommandLine, Image, ParentCommandLine

KQL (Microsoft 365 Defender)

let parents = dynamic(["iexplore.exe","winword.exe","excel.exe","powerpnt.exe"]);
let children = dynamic(["cmd.exe","powershell.exe","mshta.exe","wscript.exe","cscript.exe","rundll32.exe","regsvr32.exe","bitsadmin.exe","certutil.exe"]);
DeviceProcessEvents
| where Timestamp > ago(7d)
| where InitiatingProcessFileName in~ (parents)
| where FileName in~ (children)
| join kind=leftsemi (
    DeviceImageLoadEvents
    | where FileName startswith_cs "msxml" // korelacja ładowania MSXML
) on DeviceId, InitiatingProcessId
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine, InitiatingProcessCommandLine, AccountName

CloudTrail Lake (pomocniczo: hostowanie payloadu na S3/CloudFront)

Uwaga: sama podatność jest kliencka; to zapytanie pomaga znaleźć źródła plików potencjalnie serwujące exploity/payloady do przeglądarek użytkowników (np. S3/public bucket).

SELECT eventTime, userAgent, sourceIPAddress,
       requestParameters.key AS object_key, recipientAccountId
FROM   $EDS
WHERE  eventSource = 's3.amazonaws.com'
  AND  eventName = 'GetObject'
  AND  (userAgent LIKE '%MSIE%' OR userAgent LIKE '%Trident/%')
  AND  (object_key LIKE '%.hta' OR object_key LIKE '%.js' OR object_key LIKE '%.cab' OR object_key LIKE '%.dll' OR object_key LIKE '%.exe')
ORDER BY eventTime DESC
LIMIT 200;

Elastic / EQL

process where event.type == "start" and
  process.parent.name in ("iexplore.exe","winword.exe","excel.exe","powerpnt.exe") and
  process.name in ("cmd.exe","powershell.exe","mshta.exe","wscript.exe","cscript.exe","rundll32.exe","regsvr32.exe","bitsadmin.exe","certutil.exe")

Heurystyki / korelacje

  • Sekwencja czasu: wizyta na stronie (proxy) → iexplore.exe ładuje msxml*.dll (EID 7) → proces‑dziecko LOLBIN/script engine (EID 1) → plik w %TEMP% (EID 11).
  • Punkt ciężkości: hosty z MSXML 4.0 (brak wsparcia, duże ryzyko), legacy IE/tryb kompatybilności.
  • Źródło payloadu: domeny niedawno zarejestrowane/CDN‑y/obiekty S3 z publicznym dostępem (UA MSIE/Trident).
  • Proxy + IDS: trafienie sig. „MSIE MSXML CVE‑2012‑1889” + korelacja z pobraniem pliku i uruchomieniem dziecka przeglądarki.

False positives / tuning

  • Prawdziwe aktualizatory/instalatory wywołujące skrypty z aplikacji Office/IE (rzadkie dziś, ale możliwe w środowiskach legacy).
  • Dodatki Office/COM mogą sporadycznie tworzyć procesy pomocnicze — ogranicz listę do „red flag” (mshta, wscript, cscript, rundll32 z nietypowymi argumentami).
  • Warunek czasowy i kierunek: ucinaj FP, jeśli brak poprzedzającego ruchu web lub brak ładowania msxml*.dll.
  • Rozważ listy wyjątków dla znanych ścieżek podpisanych instalatorów.

Playbook reagowania (IR)

  1. Triage & izolacja: odłącz host (EDR isolate), zapisz pamięć RAM/dysk jeśli to możliwe.
  2. Szybkie KQL/Splunk: wyszukaj łańcuch parent browser/Office → LOLBIN/script engine (zapytania z sekcji 7).
  3. Inwentaryzacja MSXML (PowerShell, tylko w labie/IR): gci "$env:WINDIR\System32" -Filter "msxml*.dll" | Select Name, @{n='Version';e={(Get-Item $_.FullName).VersionInfo.FileVersion}}
  4. Zabij procesy / usuń artefakty: taskkill /IM iexplore.exe /F; zidentyfikuj pliki z %TEMP%/%APPDATA% powiązane czasowo, Get-FileHash.
  5. Blokada źródeł: domeny/URL z proxy/EDR; jeżeli payload z S3 — zablokuj bucket/klucz na bramie.
  6. Łatanie: wdroż MS12‑043 (KB2719985, KB2721691, KB2596856/KB2687497 dla MSXML5/Office) oraz usuń MSXML 4.0 (EoL).
  7. Hunting retrospektywny (7–30 dni): sprawdź podobne sekwencje, zbieżne domeny, UA MSIE.
  8. Lessons learned: egzekwuj politykę „remove legacy ActiveX/MSXML4”, wymuś modernizację przeglądarek.

Przykłady z kampanii / case studies

  • Elderwood Project (2012) — łańcuch watering‑hole wykorzystujący m.in. CVE‑2012‑1889 obok CVE‑2012‑1875/CVE‑2012‑0779. Raport Symantec dokumentuje listę zerodayów i modus operandi.
  • VOHO / RSA FirstWatch — kompromitacje stron branżowych z przekierowaniami do exploitów, m.in. XML Core Services (CVE‑2012‑1889).
  • Zscaler (2013) — obserwacje, że exploity na CVE‑2012‑1889 „wciąż żyją” w dzikich kampaniach (obfuskowane strony dla graczy).

Lab — przykładowe komendy

Wyłącznie w izolowanym labie. Nie używamy exploitów. Celem jest wygenerowanie telemetrii odpowiadającej post‑eksploitowi (T1189/T1203/T1204.001), aby zweryfikować reguły.

  1. Atomic Red Team (Invoke‑Atomic) # Przygotowanie Set-ExecutionPolicy Bypass -Scope Process -Force iwr https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/install.ps1 -UseB -OutFile install.ps1 .\install.ps1 # Przykładowe atomiki pokrewne (execution / user execution) Invoke-AtomicTest T1204.002 -ShowDetails # Malicious File (bezpieczne warianty) Invoke-AtomicTest T1204.002 -TestNumbers 1 Zweryfikuj, że reguły z sekcji 7 wyłapują procesy potomne/LOLBIN‑y.
  2. Symulacja post‑eksploatacyjna z przeglądarki
    • Uruchom iexplore.exe (w labie) i ręcznie uruchom benigny proces (np. notepad.exe) z EDR console lub skryptu testowego, aby zasymulować „dziecko przeglądarki”.
    • Potwierdź, że Sysmon EID 1 + korelacja z EID 7 (ładowanie msxml*.dll jeśli środowisko ładuje biblioteki) wyzwala alert.

Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK Enterprise):

  • M1051 — Update Software (łatanie MSXML/IE/Office).
  • M1042 — Disable or Remove Feature or Program (usunąć MSXML 4.0, wyłączyć ActiveX/nieużywane komponenty).
  • M1021 — Restrict Web‑Based Content (URL filtering, blokada typów plików/iframe/legacy UA).
  • M1031 — Network Intrusion Prevention (IDS/IPS sygnatury dla znanych exploitów/payloadów).

Powiązane techniki ATT&CK:

  • T1189 — Drive‑by Compromise (Initial Access).
  • T1203 — Exploitation for Client Execution (Execution).
  • T1204.001 — User Execution: Malicious Link (Execution).

Źródła / dalsza literatura

  • Microsoft Security Bulletin MS12‑043 – szczegóły poprawki, produkty i KB. (Microsoft Learn)
  • Microsoft Security Advisory 2719615 – opis podatności i „Fix it”. (Microsoft Learn)
  • NVD: CVE‑2012‑1889 – opis, CVSS, wpis w CISA KEV. (NVD)
  • ESET / WeLiveSecurity – analiza techniczna (UAF, get_definition). (We Live Security)
  • Symantec: The Elderwood Project – kampanie watering‑hole, lista CVE (w tym 2012‑1889).
  • Krebs on Security – VOHO/watering‑hole z wykorzystaniem CVE‑2012‑1889. (Krebs on Security)
  • Broadcom/Symantec – sygnatura IDS „MSIE MSXML CVE‑2012‑1889”. (Broadcom)
  • ATT&CK techniki – T1189 / T1203 / T1204.001 (wersje i daty modyfikacji). (MITRE ATT&CK)

15) Checklisty dla SOC / CISO (krótko)

SOC (operacyjnie):

  • Włącz i zbieraj Sysmon (EID 1/3/7/11/13) + Security 4688/5156; korelacje parent‑child (IE/Office → LOLBIN).
  • Monitoruj ładowanie msxml*.dll w kontekście przeglądarki/Office.
  • Reguły na UA MSIE/Trident + pobrania .hta/.js/.cab/.dll/.exe i referrery do iFrame.
  • IDS/IPS/WAF – aktywne sygnatury dla CVE‑2012‑1889.
  • Prowadź threat hunting za okres przed‑ i po‑patchu (MS12‑043).

CISO (strategicznie):

  • Usuwanie MSXML 4.0 i wyłączenie ActiveX w środowisku (jeśli jeszcze obecne).
  • Wymuszenie łatek MS12‑043 (compliance), weryfikacja zgodności na hostach VDI/TS.
  • Polityka Restrict Web‑Based Content (URL filtering, blokada rzadkich typów).
  • Program NIDS/NIPS (M1031) oraz telemetria proxy z korelacją do endpointów.
  • Regularne testy z Atomic Red Team (kontrola pokrycia detekcji).

Uwagi końcowe: CVE‑2012‑1889 jest starszą, ale dobrze udokumentowaną podatnością z bogatą historią realnych nadużyć. Nawet dziś bywa przydatna do huntingu retro oraz do budowy uniwersalnych detekcji post‑exploit po Drive‑by Compromise. W praktyce kluczowe są: łatanie (MS12‑043), eliminacja komponentów legacy (MSXML4/ActiveX) oraz korelacje telemetryjne opisane wyżej.