
TL;DR
CVE‑2015‑2545 to krytyczna podatność RCE w parserze EPS pakietu Microsoft Office, umożliwiająca wykonanie kodu po otwarciu dokumentu z osadzonym plikiem EPS. Była szeroko wykorzystywana w kampaniach APT (m.in. PLATINUM, APT16). Dziś kluczowe jest: pełne łatanie (MS15‑099), blokada EPS w Office (domyślnie wyłączone od 2017 r.), filtrowanie w bramkach pocztowych oraz detekcje „Office → nietypowe dziecko” i (na starszych hostach) ładowanie EPSIMP32.FLT.
Krótka definicja techniczna
CVE‑2015‑2545 to błąd w obsłudze grafiki Encapsulated PostScript (EPS) w Office, który po otwarciu dokumentu z wbudowanym EPS pozwala napastnikowi doprowadzić do korupcji pamięci i zdalnie wykonać kod w kontekście użytkownika. Exploit wykorzystuje kod PostScript, a historycznie potrafił omijać ASLR/DEP.
Gdzie występuje / przykłady platform
- Windows / Office: Office 2007 SP3, 2010 SP2, 2013 SP1, 2013 RT SP1 (późniejsze Office miały zablokowaną obsługę EPS).
- M365 (Exchange/Defender): wektor pocztowy (załączniki DOC/DOCX/RTF z EPS); telemetria EmailEvents, EmailAttachmentInfo, DeviceProcessEvents.
- Pozostałe platformy (AD, AWS, Azure, GCP, K8s, ESXi, M365): wpływ pośredni (np. phishing do skrzynek M365; hosty Windows). CloudTrail/K8s/ESXi zazwyczaj nie dotyczy samej eksploatacji, ale można korelować pobrania plików z S3 (jeśli dokument był hostowany w chmurze).
Szczegółowy opis techniki (jak działa, cele, dlaczego skuteczna)
Atakujący wysyła do ofiary dokument Office (DOC/DOCX/RTF) z osadzonym EPS. Po otwarciu dokumentu silnik importu grafiki (EPSIMP32.FLT) parsuje treść EPS, co przy specjalnie spreparowanych danych prowadzi do RCE. W praktyce łańcuch wyglądał następująco:
- Initial Access: spearphishing z załącznikiem zawierającym EPS (T1566.001).
- Execution: użytkownik otwiera plik (T1204.002), Office ładuje filtr EPS i wyzwala błąd → shellcode.
- Post‑exploitation: uruchomienie procesu lolbin (np.
rundll32.exe,regsvr32.exe,mshta.exe) lub droppera.
Eksploatacja była popularna, bo łączyła socjotechnikę z błędem klienta (Office), a ochrona oparta wyłącznie na AV bywała nieskuteczna. Microsoft wydał poprawki w MS15‑099 (09.2015; 11.2015 re-release), a w 04.2017 domyślnie wyłączył EPS w Office (trwale od 05.2018 w M365/Office 2019+).
Artefakty i logi (co zbierać)
| Źródło | Pole / EID | Co szukać | Uwagi |
|---|---|---|---|
| Windows Security | 4688 (Process Creation) | WINWORD.EXE / EXCEL.EXE / POWERPNT.EXE / OUTLOOK.EXE → dziecko: cmd.exe, powershell.exe, wscript.exe, cscript.exe, mshta.exe, regsvr32.exe, rundll32.exe, schtasks.exe, certutil.exe | Silny wskaźnik post‑exploitation |
| Sysmon | 1 (Process Create) | Jak wyżej + CommandLine z nietypowymi parametrami | Korelować z 7 i 11 |
| Sysmon | 7 (ImageLoad) | ImageLoaded kończy się na \EPSIMP32.FLT ładowane przez Office | Ma sens wyłącznie na starych, niezałatanych hostach/wersjach Office (EPS włączony) |
| Sysmon | 11 (FileCreate) / 15 (FileStreamCreated) | Zapisy Office do %TEMP% i strumieni z URL/UNC; wkrótce spawn lolbin | Dobrze korelować w oknie 0–5 min |
| M365 Defender | DeviceProcessEvents | InitiatingProcessFileName ∈ {WINWORD, EXCEL, POWERPNT, OUTLOOK} → child z listy lolbinów | T1204.002 / T1203 |
| M365 Defender | EmailEvents, EmailAttachmentInfo | Załączniki .doc/.docx/.rtf z nietypowych nadawców, tematy kampanii APT | Wspiera triage Initial Access |
| Exchange Online | Audit/Search | Compliance Search po Attachments:*.eps | Po stronie poczty |
| CloudTrail (S3 Data Events) | GetObject | Pobrania dokumentów z rozszerzeniami .doc/.docx/.rtf/.eps z nieznanych lokalizacji/IP | Opcjonalne, jeśli hosting w S3 |
| K8s audit / ESXi | — | [brak danych / zwykle nie dotyczy] | Eksploatacja dotyczy klienta Office |
Źródła podatności i wersji: NVD/MS15‑099; KEV potwierdza eksploatację w realu.
Detekcja (praktyczne reguły)
Sigma (dwie gotowe reguły)
A) Office → nietypowe procesy potomne (T1204.002 / T1203 / T1566.001)
title: Office Spawns Unusual Child Process (EPS/CVE-2015-2545 tradecraft)
id: 1b3ef8a6-5d5e-4f79-8c42-3f9f5f0c9b15
status: stable
description: Detects Office applications spawning suspicious system utilities often used post-exploitation.
references:
- https://attack.mitre.org/techniques/T1204/002/
- https://attack.mitre.org/techniques/T1203/
- https://attack.mitre.org/techniques/T1566/001/
tags:
- attack.T1204.002
- attack.T1203
- attack.T1566.001
logsource:
category: process_creation
product: windows
detection:
parent_office:
ParentImage|endswith:
- '\WINWORD.EXE'
- '\EXCEL.EXE'
- '\POWERPNT.EXE'
- '\OUTLOOK.EXE'
suspicious_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\mshta.exe'
- '\regsvr32.exe'
- '\rundll32.exe'
- '\schtasks.exe'
- '\certutil.exe'
condition: parent_office and suspicious_child
falsepositives:
- Legalne dodatki Office, automatyzacja skryptowa w działach DTP
level: high
fields:
- ParentImage
- Image
- CommandLine
- ParentCommandLine
- User
B) (Środowiska legacy) Ładowanie filtra EPS przez Office
title: Office Loads EPS Filter (EPSIMP32.FLT) - Legacy Host
id: 0e7a0c6e-c9f0-4c8a-b0a3-7c3a1d0a9c01
status: experimental
description: Detects image load of EPSIMP32.FLT by Office processes (should be disabled on modern Office).
tags: [ attack.T1203, attack.T1204.002 ]
logsource:
category: image_load
product: windows
detection:
selection:
ImageLoaded|endswith: '\EPSIMP32.FLT'
Image|endswith:
- '\WINWORD.EXE'
- '\EXCEL.EXE'
- '\POWERPNT.EXE'
condition: selection
falsepositives:
- Stare, niezałatane instalacje Office z włączonym EPS
level: medium
Kontekst ATT&CK i status technik: T1203, T1204.002 oraz T1566.001 w ATT&CK v18.0.
Splunk (SPL)
Office → nietypowe dziecko
index=endpoint sourcetype IN ("Sysmon:ProcessCreate","WinEventLog:Security")
| eval Parent=coalesce(ParentImage,ParentProcessName)
| eval Image=coalesce(Image,NewProcessName)
| where like(lower(Parent), "%\\winword.exe")
OR like(lower(Parent), "%\\excel.exe")
OR like(lower(Parent), "%\\powerpnt.exe")
OR like(lower(Parent), "%\\outlook.exe")
| where like(lower(Image), "%\\cmd.exe")
OR like(lower(Image), "%\\powershell.exe")
OR like(lower(Image), "%\\wscript.exe")
OR like(lower(Image), "%\\cscript.exe")
OR like(lower(Image), "%\\mshta.exe")
OR like(lower(Image), "%\\regsvr32.exe")
OR like(lower(Image), "%\\rundll32.exe")
OR like(lower(Image), "%\\schtasks.exe")
OR like(lower(Image), "%\\certutil.exe")
| stats values(CommandLine) as cmd by _time host user Parent Image
| sort - _time
Ładowanie EPSIMP32.FLT (Sysmon EID 7)
index=endpoint sourcetype="Sysmon:ImageLoad"
ImageLoaded="*\\EPSIMP32.FLT" (ProcessImage="*\\WINWORD.EXE" OR ProcessImage="*\\EXCEL.EXE" OR ProcessImage="*\\POWERPNT.EXE")
| table _time host ProcessImage ImageLoaded Signed Status
KQL (Microsoft 365 Defender – Advanced Hunting)
// Office -> suspicious child
DeviceProcessEvents
| where InitiatingProcessFileName in~ ("WINWORD.EXE","EXCEL.EXE","POWERPNT.EXE","OUTLOOK.EXE")
| where FileName in~ ("cmd.exe","powershell.exe","wscript.exe","cscript.exe","mshta.exe","regsvr32.exe","rundll32.exe","schtasks.exe","certutil.exe")
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, FolderPath, ProcessCommandLine, InitiatingProcessCommandLine, AccountName
| order by Timestamp desc
// (Legacy) EPS filter load by Office
DeviceImageLoadEvents
| where InitiatingProcessFileName in~ ("WINWORD.EXE","EXCEL.EXE","POWERPNT.EXE")
| where FileName endswith "EPSIMP32.FLT"
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, FolderPath, SHA256
CloudTrail query (CloudWatch Logs Insights — gdy dokument hostowany w S3)
fields @timestamp, eventName, requestParameters.bucketName as bucket, requestParameters.key as key, sourceIPAddress, userAgent
| filter eventSource = "s3.amazonaws.com"
| filter eventName in ["GetObject","GetObjectVersion"]
| filter key like /(?i)\.(doc|docx|rtf|ppt|pptx|pps|eps)$/
| sort @timestamp desc
Pamiętaj: aby widzieć Data Events S3, muszą być włączone dla bukietu.
Elastic / EQL
process where
process.parent.name in ("WINWORD.EXE","EXCEL.EXE","POWERPNT.EXE","OUTLOOK.EXE") and
process.name in ("cmd.exe","powershell.exe","wscript.exe","cscript.exe","mshta.exe","regsvr32.exe","rundll32.exe","schtasks.exe","certutil.exe")
(opcjonalnie — sekwencja z ładowaniem filtra EPS na hostach legacy)
sequence by host.id with maxspan=5m
[process where process.name in ("WINWORD.EXE","EXCEL.EXE","POWERPNT.EXE")]
[image_load where file.name == "EPSIMP32.FLT"]
[process where process.name in ("cmd.exe","powershell.exe","mshta.exe","rundll32.exe","regsvr32.exe")]
Heurystyki / korelacje
- Korelacja czasowa 0–5 min: zapis plików Office w
%TEMP%→ uruchomienie lolbin. - Office + ImageLoad EPSIMP32.FLT (na starszych hostach) → wysoka waga.
- EmailEvents ↔ DeviceProcessEvents: załącznik → otwarcie → spawn lolbin.
- Nietypowe strefy czasowe/IP dla GetObject z S3 lub pobrania dokumentu.
- Blok EPS w orgu: każdy ImageLoad EPSIMP32.FLT = anomalia konfiguracyjna.
False positives / tuning
- Legalne dodatki Office (DTP, automatyzacje) mogą spawnować procesy — zastosuj listy wyjątków dla znanych ścieżek/podpisów.
- W środowiskach, gdzie EPS jest per-policy włączony (np. starsze stacje offline), potwierdzaj kontekst (źródło pliku, nadawca, reputacja).
- Zmniejsz FP przez kontekst: brak interakcji użytkownika, nietypowe CommandLine, rzadkie child process, procesy sieciowe zaraz po otwarciu dokumentu.
Playbook reagowania (SOC)
- Triage alertu: potwierdź łańcuch Office → child → sieć/pliki oraz ewentualny EPSIMP32.FLT.
- Izolacja hosta (MDE): Live Response / Isolate device.
- Hunting w M365:
- KQL (sekcja 7) → wylistuj inne hosty/użytkowników z tym samym nadawcą/załącznikiem.
- EmailEvents / EmailAttachmentInfo: koreluj temat, nadawcę, hash załącznika.
- Containment:
- Quarantine pliku i StopAndQuarantineFile (MDE).
- W Exchange Online (Compliance): wyszukaj i usuń wiadomości z EPS:
New-ComplianceSearch -Name "EPS-bulk" -ExchangeLocation All -ContentMatchQuery 'attachments:*.eps' Start-ComplianceSearch -Identity "EPS-bulk" New-ComplianceSearchAction -SearchName "EPS-bulk" -Purge -PurgeType SoftDelete
- Eradication:
- Upewnij się, że hosty mają zainstalowane poprawki MS15‑099 lub nowsze; sprawdź, czy EPS jest wyłączony (w nowoczesnych Office jest domyślnie).
- Recovery: sprawdź trwałość (Run/Services/Tasks); rotacja haseł kont interaktywnych, jeśli były użyte.
- Lessons learned: wymuś blokadę załączników EPS na bramkach, włącz szkolenie użytkowników i pre‑filter DMARC/SPF/DKIM.
Przykłady z kampanii / case studies
- PLATINUM (TwoForOne): pierwsze wykryte użycie CVE‑2015‑2545 (sierpień 2015); później porzucone po patchach.
- APT16 (Tajwan, 2015): wariant exploita EPS, łańcuch spearphishing + ELMER.
- EvilPost (Japonia, 2015), SPIVY oraz kampania Danti (2016): konsekwentne używanie EPS w DOCX; omówienia telemetryczne i szczegóły shellcode.
- FireEye/Mandiant “The EPS Awakens”: opis wykorzystania PostScript do wywołania korupcji pamięci oraz 0‑day w momencie ujawnienia.
Lab (bezpieczne testy) — przykładowe komendy
Tylko w izolowanym środowisku testowym. Celem jest walidacja detekcji, nie eksploatacja luki.
- Atomic Red Team — T1566.001 (Spearphishing Attachment): ćwicz pipeline pocztowy bez złośliwości (pobranie przykładowego dokumentu/artefaktu), aby sprawdzić korelacje EmailEvents → DeviceProcessEvents.
- Atomic Red Team — T1204.002 (User Execution: Malicious File): uruchom testy, które symulują uruchomienie nietypowych child process przez aplikacje użytkownika (bez exploitów).
- Instalacja narzędzi (lab): patrz Invoke‑AtomicRedTeam i dokumentacja uruchamiania lokalnego.
IEX (IWR 'https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/install-atomicredteam.ps1'); Install-AtomicRedTeam -getAtomics # Przykład: uruchom scenariusze T1204.002 bez złośliwych payloadów Invoke-AtomicTest T1204.002 -ShowDetailsBriefPo teście wykonaj cleanup zgodnie z instrukcjami atomika.
- Instalacja narzędzi (lab): patrz Invoke‑AtomicRedTeam i dokumentacja uruchamiania lokalnego.
Mapowania (Mitigations, powiązane techniki)
Mitigations (ATT&CK):
- M1051 — Update Software: bezwzględne łatanie Office (MS15‑099 i nowsze).
- M1054 — Software Configuration: globalna blokada EPS (wspierana przez Microsoft; domyślnie wyłączone od 2017 r., zniesione obejście rejestrem w 2018 r.).
- M1037 — Filter Network Traffic: blokady na bramkach pocztowych/http, sandboxing załączników.
Powiązane techniki ATT&CK:
- T1566.001 (wektor wejścia — spearphishing attachment),
- T1204.002 (wykonanie przez użytkownika),
- T1203 (exploitation klienta).
Źródła / dalsza literatura
- NVD — CVE‑2015‑2545 (opis, CVSS v3.1 7.8, KEV) (NVD)
- Microsoft MS15‑099 — biuletyn bezpieczeństwa (patch, wektor przez EPS) (Microsoft Learn)
- Microsoft: wsparcie dla EPS wyłączone w Office (od 2017‑04‑11; trwałe wyłączenie obejścia rejestrem od 2018‑05) (Microsoft Support)
- Kaspersky Securelist (2016): „CVE‑2015‑2545: overview of current threats” — kampanie APT, omijanie ASLR/DEP,
EPSIMP32.FLT(securelist.com) - Mandiant/FireEye: „The EPS Awakens” — analiza zero‑day (CVE‑2015‑2545) (Google Cloud)
- CISA — Known Exploited Vulnerabilities Catalog (wpis CVE‑2015‑2545, dodany 2022‑03‑03) (CISA)
- MITRE ATT&CK: T1203, T1204.002, T1566.001; wersja v18.0 (2025‑10‑28) (MITRE ATT&CK)
Checklisty dla SOC / CISO
SOC (operacyjne):
- Włącz reguły: Office → child process (cmd/powershell/wscript/mshta/…); EPSIMP32.FLT (legacy).
- Koreluj EmailEvents ↔ DeviceProcessEvents (okno 0–5 min).
- Blokuj
.epsna bramkach pocztowych i w DLP. - Hunt na stacjach z przestarzałym Office; potwierdź brak możliwości wstawiania EPS.
- W razie incydentu: izolacja hosta, purge wiadomości, unieważnienie tokenów, IOC sweep.
CISO (strategiczne):
- Wymuszone aktualizacje Office (M1051) oraz polityka „no‑EPS”.
- Regularne testy kontrolne (Atomic Red Team) dla T1566.001/T1204.002.
- KPI: MTTR od alertu Office→child, odsetek stacji z zablokowanym EPS, E2E e-mail sandbox rate.
- Wdrożona polityka filtrowania treści i reputacji nadawcy (DMARC/SPF/DKIM).
Podsumowanie ryzyka: mimo wieku, CVE‑2015‑2545 pozostaje istotny kontekstowo (retro/legacy, archiwa poczty). Najlepszą obroną są: aktualizacje, blok EPS, detekcje łańcucha Office→lolbin i silne kontrole pocztowe.



