CVE-2010-2568 — Windows Shell LNK RCE (MS10‑046) - Security Bez Tabu

CVE-2010-2568 — Windows Shell LNK RCE (MS10‑046)

TL;DR

  • Luka w Windows Shell umożliwia zdalne wykonanie kodu przy samym wyświetleniu ikony spreparowanego skrótu .LNK/.PIF (bez kliku). Załatana w biuletynie MS10‑046 (KB2286198).
  • Realne zagrożenie: USB/udziały sieciowe/WebDAV → otwarcie folderu z LNK uruchamia kod napastnika. To był kluczowy wektor Stuxnet.
  • Mapowanie na ATT&CK: T1203, T1204.002, T1091 (replikacja przez nośniki).
  • Detekcja: Sysmon EID 7 (ImageLoad) z explorer.exe ładuje DLL z nośnika wymiennego, EID 1 (ProcessCreate) dla rundll32.exe z literą dysku USB; korelacja z USBDriveMounted w MDE.
  • Remediacja: Patch MS10‑046, blokady ASR/Device Control na USB, ograniczenie AutoRun/AutoPlay, polityki nośników.

Krótka definicja techniczna

CVE‑2010‑2568 to błąd w parsowaniu skrótów przez Windows Shell: podczas ładowania ikony skrótu (.LNK/.PIF) system może załadować i wykonać bibliotekę DLL wskazaną w polu zasobu ikony. Do eksploatacji dochodzi już na etapie renderowania ikon w Explorerze (i innych parserach), co daje RCE z uprawnieniami zalogowanego użytkownika.


Gdzie występuje / przykłady platform

  • Windows: XP SP3, Server 2003 SP2, Vista SP1/SP2, Server 2008 (w tym R2), Windows 7 — wszystkie dotknięte i ocenione jako Critical w MS10‑046 (serwer Core również podatny w niektórych scenariuszach).
  • Active Directory / DC: dotyczy, jeśli kontrolery domeny to ww. wersje Windows.
  • Chmury (AWS/Azure/GCP): Windows VM/WorkSpaces/VDI dziedziczą podatność do czasu aktualizacji.
  • ESXi/K8s/M365: sama luka dot. Windows; środowiska te są istotne jako źródła logów (Sentinel, Elastic, SIEM) i kontroli USB (MDE Device Control).

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

Atakujący tworzy skrót .LNK, którego metadane (np. zasób ikony) wskazują DLL położoną na nośniku wymiennym (USB), udziale UNC/WebDAV lub innym zasobie. Windows Explorer przy renderowaniu ikony odwołuje się do tej ścieżki i ładuje bibliotekę, co w wariancie podatnym daje arbitralne wykonanie kodu — bez interakcji użytkownika i bez uruchamiania celu skrótu. Skuteczność wynika z (1) powszechnego przeglądania folderów poprzez GUI, (2) faktu, że ikony ładowane są automatycznie oraz (3) łatwości wprowadzenia LNK na host (np. USB). Microsoft załatał błąd w MS10‑046/KB2286198, poprawiając walidację referencji do ikon.

Historyczny kontekst: Stuxnet używał CVE‑2010‑2568 do propagacji m.in. przez nośniki, co pozwalało pokonać segmentacje/air‑gap w środowiskach ICS.


Artefakty i logi (co i gdzie obserwować)

Źródło/produktZdarzenie / IDCo szukaćUwagi
SysmonEID 7 (Image loaded)Image = *\explorer.exe i ImageLoaded wskazuje na ścieżkę z literą dysku (np. E:\*.dll), brak podpisuEID 7 domyślnie wyłączony; włączyć selektywnie dla explorer.exe.
SysmonEID 1 (Process Create)rundll32.exe lub regsvr32.exe z argumentem do X:\*.dll; rodzic explorer.exeCzęsty łańcuch po wczytaniu złośliwej biblioteki.
Windows Security4688 (Process Create)Jak wyżej (jeśli brak Sysmon)Mniej kontekstu niż Sysmon.
MDE (Defender XDR)DeviceImageLoadEventsŁadowanie DLL przez explorer.exe z nie‑systemowych wolumenówTabela dla zdarzeń DLL.
MDE (Defender XDR)DeviceEventsActionType == "UsbDriveMounted"; AdditionalFields.DriveLetterKorelować z EID 7/EID 1 w krótkim oknie czasowym.
MDE (Defender XDR)DeviceFileEventsTworzenie/kopiowanie LNK na USBPrzy replikacji przez nośniki.
AWS CloudTrailN/D dla zdarzeń OSCloudTrail rejestruje API/AWS account activity, nie telemetrykę hosta. Używać CloudWatch Logs dla agentów zdarzeń Win/Sysmon.
K8s audit / M365 ops[brak danych / nie dotyczy]Luka dotyczy Windows Shell lokalnie.

Detekcja (praktyczne reguły)

Sigma (Sysmon ImageLoad + korelacja)

title: Possible CVE-2010-2568 Exploitation via Explorer DLL Load from Removable
id: 9d1f5c1f-9b0e-4f16-9d6a-ef7a3a2c2568
status: experimental
description: Detects explorer.exe loading an unsigned DLL from a non-system drive (often USB) – pattern linked to CVE-2010-2568 exploitation.
references:
  - https://learn.microsoft.com/en-us/security-updates/securitybulletins/2010/ms10-046
  - https://attack.mitre.org/techniques/T1091/
logsource:
  product: windows
  service: sysmon
  category: image_load
detection:
  selection:
    Image|endswith: '\explorer.exe'
    ImageLoaded|re: '^[A-Z]:\\.*\.dll$'
  unsigned:
    Signed: 'false'
  condition: selection and unsigned
fields:
  - Image
  - ImageLoaded
  - Signed
  - SignatureStatus
  - Hashes
level: high
tags:
  - attack.t1203
  - attack.t1091

Splunk (SPL) – 2 wzorce

A) DLL ładowana przez Explorera z dysku poza systemem:

index=sysmon sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational"
EventCode=7 Image="*\\explorer.exe"
| where like(ImageLoaded, "%:\\%.dll")
| stats count min(_time) as first_seen max(_time) as last_seen by host Image ImageLoaded Signed SignatureStatus

B) Próba rundll32 z literą dysku (po USB mount):

index=sysmon EventCode=1 Image="*\\rundll32.exe" ParentImage="*\\explorer.exe"
| where match(CommandLine, "[A-Z]:\\\\.+\\.dll")
| stats values(CommandLine) as cmd by host, ParentImage, Image

KQL (Microsoft Defender XDR / Sentinel)

Korelacja USB → ładowanie DLL przez Explorera (≤5 min):

let usb = DeviceEvents
| where ActionType == "UsbDriveMounted"
| extend DriveLetter = tostring(parse_json(AdditionalFields).DriveLetter)
| project DeviceId, DeviceName, MountTime=Timestamp, DriveLetter;
DeviceImageLoadEvents
| where InitiatingProcessFileName =~ "explorer.exe"
| where FolderPath matches regex @"^[A-Z]:\\.*\.dll$"
| project DeviceId, DeviceName, LoadTime=Timestamp, FolderPath, InitiatingProcessFileName
| join kind=innerunique (usb) on DeviceId
| where LoadTime between (MountTime .. MountTime + 5m)
| order by LoadTime desc

Uwaga: nazwy tabel/kolumn zgodnie z referencją AH; dostępność zależy od wdrożenia MDE.

„CloudTrail query (AWS CLI/CloudWatch)” — uwaga praktyczna

CloudTrail nie rejestruje zdarzeń OS, więc detekcję opieramy o CloudWatch Logs Insights dla strumieniowanych dzienników Sysmon/Windows Event Log:

-- CloudWatch Logs Insights (grupa: /os/sysmon)
fields @timestamp, @message
| filter EventID=7 and like(@message, "\\explorer.exe") and like(@message, /:\\\\.*\.dll/i)
| sort @timestamp desc
| limit 100

(Aktywność CloudTrail zostaw do monitoringu API AWS).

Elastic / EQL

Proces z USB (rundll32) po Explorerze:

process where event.category == "process"
  and process.name == "rundll32.exe"
  and process.parent.name == "explorer.exe"
  and process.command_line regex "^[A-Z]:\\\\.*\\.dll"

Ładowanie biblioteki (ECS event.category: "library") przez Explorera:

any where event.category == "library"
  and process.name == "explorer.exe"
  and dll.path regex "^[A-Z]:\\\\.*\\.dll"

(ECS pola dll.* dla zdarzeń ładowania bibliotek).


Heurystyki / korelacje

  • USB mount → (≤5 min) → explorer.exe ładuje nienadzorowaną DLL z tej litery → (≤10 s) → rundll32.exe/regsvr32.exe z tą ścieżką.
  • Brak podpisu / SignatureStatusValid dla DLL ładowanych przez Explorera.
  • Nowe LNK pojawiające się na USB lub udziałach sieciowych; LNK wskazujące na nietypowe lokalizacje (\\server\share, \\?\GLOBALROOT\Device\...).
  • Zbieżność z politykami Device Control (odmowy/alerty MDE przy USB).

False positives / tuning

  • Legalne narzędzia portable na USB mogą dynamicznie ładować DLL (wyjątki po hashach/podpisach).
  • Środowiska dev/test uruchamiające biblioteki z nietypowych ścieżek — odseparuj po OU/Tagach i godzinach pracy.
  • Rozważ wąskie filtrowanie Sysmon EID 7 (np. tylko Image="*\explorer.exe"), by ograniczyć wolumen.

Playbook reagowania (IR)

  1. Triaging & containment
  • Odizoluj host w EDR/EDR‑NAC. Zanotuj literę/identyfikator USB.
  • W MDE sprawdź oś czasu: UsbDriveMountedDeviceImageLoadEvents/rundll32. (
  1. Zbieranie artefaktów
  • Zabezpiecz nośnik i kopię folderu z LNK. Oblicz hashe (SHA‑256).
  • Z Sysmon wyciągnij EID 7/1 i towarzyszące 4688.
  1. Analiza
  • Sprawdź podpisy DLL, nietypowe eksporty, ścieżki.
  • Koreluj z innymi hostami (ta sama litera USB, te same LNK).
  1. Remediacja
  • Wymuś instalację KB2286198 / MS10‑046 (dla systemów historycznych) i aktualizacje.
  • Włącz/egzekwuj ASR / Device Control dla USB, wyłącz AutoRun/AutoPlay.
  1. Higiena i komunikacja
  • Blokada podpisu/uruchamiania z USB w GPO/MDE.
  • Komunikat dla użytkowników nt. bezpiecznego użycia nośników.

Przydatne polecenia (na hoście podejrzanym):

# Szybki przegląd procesów powiązanych
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" | Where-Object {
  $_.Id -in 1,7
} | Select TimeCreated, Id, @{n="Exe";e={$_.Properties[4].Value}}, @{n="Path";e={$_.Properties[5].Value}} | Format-Table -Auto

# Sprawdzenie dostępnych dysków i typów
Get-CimInstance Win32_LogicalDisk | Select DeviceID, DriveType, VolumeName

Przykłady z kampanii / case studies

  • Stuxnet (2010–2011): wykorzystanie CVE‑2010‑2568 do propagacji m.in. przez nośniki wymienne (i do eksfiltracji na systemy air‑gapped); Microsoft opisał eksploatację w MS10‑046, a szczegółowy dossier Symanteca dokumentuje oś czasu i wektory.

Lab (bezpieczne testy) — symulacja detekcji, nie exploit

Cel: wygenerować telemetrię, która powinna uruchomić reguły bez realnego wykorzystania luki.

  1. Przygotuj: host testowy z Sysmon (EID 1 i selektywnie EID 7 dla explorer.exe) i MDE.
  2. Włóż czysty pendrive (zapisz jego literę; w MDE powstanie UsbDriveMounted).
  3. Uruchom próbę ładowania DLL z USB (bez powodzenia, ale z logiem):
# Stwórz pusty plik DLL (nie zostanie załadowany poprawnie)
New-Item -Path "E:\test.dll" -ItemType File | Out-Null
# Wywołaj rundll32 ze ścieżką na USB (wygeneruje EID 1 i próbę dostępu)
Start-Process -FilePath "$env:SystemRoot\System32\rundll32.exe" -ArgumentList "E:\test.dll,EntryPoint" -NoNewWindow
  1. Opcjonalnie: skopiuj zwykły skrót .lnk na USB (bez złośliwych właściwości) i obserwuj zapisy plikowe.
  2. Zweryfikuj alerty/reguły: Sigma/Splunk/KQL/Elastic z sekcji 7.

Nie twórz ani nie uruchamiaj spreparowanych LNK z osadzonymi DLL — lab ma charakter wyłącznie defensywny.


Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK):

  • M1051 — Update Software: stosuj aktualizacje (MS10‑046/KB2286198).
  • M1040 — Behavior Prevention on Endpoint: reguły ASR blokujące uruchamianie z nośników.
  • M1042 — Disable or Remove Feature or Program: wyłącz Autorun/AutoPlay; ogranicz użycie USB.

Powiązane techniki:

  • T1203 — Exploitation for Client Execution – Eksploatacja luki w komponencie klienckim (Windows Shell) dla uzyskania wykonania na hoście ofiary. Takt.: Execution; Wersja 1.5 (2025‑10‑24).
  • T1204.002 — User Execution: Malicious File -Skrót/LNK jako złośliwy plik wywołujący łańcuch wykonania; często po spear‑phishingu lub przez udostępnione zasoby. Takt.: Execution; Wersja 1.6 (2025‑10‑24).
  • T1091 — Replication Through Removable Media – Dystrybucja przez USB, w tym historyczny przypadek Stuxnet używający CVE‑2010‑2568 do propagacji. Taktyki: Initial Access, Lateral Movement; Wersja 1.3 (2025‑10‑24).
  • T1547.009 — Shortcut Modification – Nie ta luka, ale pokrewne użycie .LNK dla Persistence (autostart/Startup). Warto monitorować modyfikacje LNK w lokacjach autostartu.

Źródła / dalsza lektura

  • Microsoft: MS10‑046Vulnerability in Windows Shell Could Allow Remote Code Execution (2286198). (Microsoft Learn)
  • NVD / CVE Record: CVE‑2010‑2568 (opis, CVSS). (NVD)
  • MITRE ATT&CK: T1203, T1204.002, T1091 (wersje, zakres). (attack.mitre.org)
  • Symantec/Broadcom: W32.Stuxnet Dossier (szczegółowa analiza i oś czasu).
  • Unit42: Windows Shortcut (LNK) Malware Strategies (tło LNK, warianty). (Unit 42)
  • MDE AH referencje: DeviceImageLoadEvents, DeviceEvents (USB). (Microsoft Learn)
  • CloudTrail zakres/logi API (dlaczego nie OS): dokumentacja AWS. (AWS Documentation)
  • Sysmon: EID 1/7 — definicje i praktyka. (Microsoft Learn)

Checklisty dla SOC / CISO

SOC (operacyjne):

  • Zbierasz Sysmon EID 1/7 i masz selektory dla explorer.exe?
  • Masz reguły korelacji USB mount → ImageLoad/ProcessCreate?
  • Monitorujesz tworzenie/modyfikacje .LNK w autostarcie i na USB?
  • Utrzymujesz allow‑listy podpisów/ścieżek dla legalnych portable?

CISO (strategiczne):

  • Potwierdzone wdrożenie MS10‑046 na hostach historycznych / obrazach VM.
  • Polityki Device Control / ASR: blokada uruchamiania z USB, audyt wyjątków.
  • Wyłączone Autorun/AutoPlay i egzekwowane szyfrowanie nośników.
  • Procedury reagowania na incydenty z udziałem nośników wymiennych (izolacja, zabezpieczenie dowodów, komunikacja).

Uwaga końcowa: CVE‑2010‑2568 jest historycznie krytyczna i szeroko udokumentowana. Współczesne systemy Windows mają łatę, ale wektory LNK/USB pozostają popularne (np. jako malicious file w T1204.002). Detekcja zachowania i higiena USB są kluczowe nawet po załataniu luki.

Jeden komentarz do “CVE-2010-2568 — Windows Shell LNK RCE (MS10‑046)”

Możliwość komentowania została wyłączona.