
TL;DR
CVE‑2012‑0507 to błąd type confusion w Java SE (klasa AtomicReferenceArray), umożliwiający zdalne wykonanie kodu przez złośliwy aplet na stronie (drive‑by). Luka była masowo wykorzystywana w 2012 r. (m.in. Blackhole EK i botnet Flashback), szczególnie na macOS, gdzie łatka pojawiła się z opóźnieniem. SOC powinien łączyć telemetry z przeglądarek/proxy (pobrania JAR), EDR (łańcuch procesów java[w].exe → LOLBIN), Sysmon (EID 1/3/11/22) i M365 UrlClickEvents. Podstawowe mitygacje: aktualizacje (M1051), wyłączenie/odinstalowanie wtyczki Java (M1042), restrykcja treści web (M1021), kontrola egzekucji (M1038).
Krótka definicja techniczna
CVE‑2012‑0507 to podatność w Java Runtime Environment (JRE 7u2 i starsze, 6u30 i starsze, 5.0u33 i starsze) w module Concurrency; nieprawidłowe sprawdzanie typów w AtomicReferenceArray pozwala atakującemu ominąć sandbox i wykonać dowolny kod w kontekście użytkownika po otwarciu złośliwego apletu/aplikacji Java Web Start.
Gdzie występuje / przykłady platform
- Windows / Linux / macOS: przeglądarka z wtyczką Java/Java Web Start. W 2012 r. Flashback masowo infekował macOS przez CVE‑2012‑0507 (ponad 550k–600k hostów), m.in. z powodu opóźnienia w wydaniu łatki dla Java na macOS.
- VDI/DaaS, stacje adminów, serwery jump: ryzyko przy swobodnym surfowaniu z podatną wtyczką.
- Chmura / M365: wektor kliknięcia z e‑maila/Teams (telemetria UrlClickEvents), hosty w VDI w chmurze.
- Przeglądarki: drive‑by przez skompromitowane witryny, malvertising, iFrame; klasyczny T1189.
Szczegółowy opis techniki (jak działa, cele, skuteczność)
CVE‑2012‑0507 umożliwia eskalację uprawnień apletu poprzez błędną obsługę typów w AtomicReferenceArray. Poprzez manipulację obiektem zserializowanym atakujący doprowadza do type confusion i zapisu referencji poza oczekiwanym typem, co skutkuje wyjściem z sandboxa Javy i RCE. W praktyce exploit był osadzany w stronie www; odwiedziny (lub przeklikany link) inicjowały pobranie JAR i łańcuch dalszej egzekucji/pobrania ładunku (np. przez exploit kity typu Blackhole), czyli T1189 → T1203, często poprzedzone T1204.001.
Dlaczego skuteczna?
W 2012 r. wtyczki Java były powszechne; rozproszenie wersji, opóźnienia łatek (zwł. macOS) i automatyczne uruchamianie apletów w przeglądarkach sprzyjało cichym kompromitacjom (drive‑by). Kampania Flashback osiągnęła setki tysięcy ofiar; Oracle załatało błąd w lutym 2012, a Apple dostarczyło aktualizację dla macOS dopiero na początku kwietnia.
Artefakty i logi (tabela)
| Pobranie JAR/apletu z WWW | Sysmon EID 3 (połączenie), EID 22 (DNS); Security 5156 | Unified Logging (Safari/Chrome net events) | ALB/CloudFront/WAF: UA Java/*, ścieżka *.jar | n/d | n/d | UrlClickEvents (klik źródła), DeviceNetworkEvents (host) |
| Egzekucja exploita | Sysmon EID 1: java.exe/javaw.exe | process: java w unify/journald/auditd (execve) | — | — | — | DeviceProcessEvents (jeśli MDE) |
| Łańcuch: Java → LOLBIN (np. rundll32, mshta, wscript, powershell) | Sysmon EID 1 z ParentImage=java[w].exe | parent: java → child: sh/bash/python | — | — | — | DeviceProcessEvents korelacja InitiatingProcessFileName |
| Zapisy droppera | Sysmon EID 11 (file create), EID 13 (reg set) | File audit/journald | Proxy: kolejny GET (payload) | — | — | DeviceFileEvents |
Uwaga: to ataki klienckie – CloudTrail nie rejestruje procesów na hostach; w chmurze szukaj korelacji w ALB/CF/WAF/NGFW oraz telemetry endpointów.
Detekcja (praktyczne reguły)
Sigma (Sysmon/Windows) – Java → podejrzany child
title: Java Spawns Suspicious Child Process (CVE-2012-0507 tradecraft) id: 5c4b6a0e-9d7a-4d8f-8b28-java-child-suspicious status: experimental description: Wykrywa łańcuch java.exe/javaw.exe uruchamiający interpretery/LOLBIN po potencjalnym drive-by (np. Blackhole/Flashback-era). references: - https://attack.mitre.org/techniques/T1189/ - https://attack.mitre.org/techniques/T1203/ logsource: product: windows category: process_creation detection: selection_parent: ParentImage|endswith: - '\java.exe' - '\javaw.exe' selection_child: Image|endswith: - '\cmd.exe' - '\powershell.exe' - '\wscript.exe' - '\cscript.exe' - '\mshta.exe' - '\rundll32.exe' - '\regsvr32.exe' - '\msiexec.exe' condition: selection_parent and selection_child fields: - CommandLine - ParentCommandLine - Image - ParentImage falsepositives: - Instalatory/launchery oparte na Java (Install4j/Launch4j) level: high tags: - attack.t1189 - attack.t1203Splunk (Sysmon + Proxy)
# Child processes z Java (Sysmon) index=endpoint sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1 (ParentImage="*\\java.exe" OR ParentImage="*\\javaw.exe") Image IN ("*\\powershell.exe","*\\cmd.exe","*\\wscript.exe","*\\cscript.exe","*\\rundll32.exe","*\\mshta.exe","*\\regsvr32.exe","*\\msiexec.exe") | stats count earliest(_time) as first latest(_time) as last by host, ParentImage, ParentCommandLine, Image, CommandLine, ParentProcessGuid, ProcessGuid # Proxy/secure web gateway: pobrania JAR z UA Java (dostosuj pola) index=proxy (cs_user_agent="Java*" OR user_agent="Java*") (uri_path="*.jar" OR url="*.jar") | stats count by src_ip, user, url, user_agentKQL (Defender for Endpoint / Microsoft 365 Defender)
// 1) Child processy z Java DeviceProcessEvents | where InitiatingProcessFileName in~ ("java.exe","javaw.exe") | where FileName in~ ("powershell.exe","cmd.exe","wscript.exe","cscript.exe","mshta.exe","rundll32.exe","regsvr32.exe","msiexec.exe") | project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, ProcessCommandLine // 2) Pobrania JAR przez procesy Java DeviceNetworkEvents | where InitiatingProcessFileName in~ ("java.exe","javaw.exe") | where RemoteUrl endswith ".jar" or RequestUrl endswith ".jar" | summarize cnt=count(), firstSeen=min(Timestamp), lastSeen=max(Timestamp) by DeviceName, InitiatingProcessFileName, RemoteUrl // 3) Kliknięcia linków (MDO Safe Links) UrlClickEvents | where Url has ".jar" or Url has "java" // dopasuj pod kampanie | project Timestamp, AccountUpn, Url, ActionType, Workload, IPAddress, ThreatTypes(„UrlClickEvents” w Advanced Hunting zawiera pełny URL i werdykt kliknięcia.)
AWS (CloudWatch Logs Insights — ALB/CloudFront/WAF)*
fields @timestamp, @message | filter @message like /User-Agent=.*Java\/[0-9]/ and @message like /\.jar/ | sort @timestamp desc | limit 100(*CloudTrail nie loguje żądań HTTP do aplikacji; użyj logów ALB/CloudFront/WAF lub NGFW.)
Elastic / EQL
// Java -> LOLBIN process where process.parent.name in ("java.exe","javaw.exe") and process.name in ("cmd.exe","powershell.exe","wscript.exe","cscript.exe","mshta.exe","rundll32.exe","regsvr32.exe","msiexec.exe") // HTTP: UA Java + JAR (przykładowy ECS) network where network.protocol == "http" and http.request.method == "GET" and http.request.headers.user_agent : "Java*" and url.path : "*.jar"Heurystyki / korelacje
- Łańcuch czasowy: browser → java[w].exe → LOLBIN → outbound (HTTP/DNS) w krótkim oknie.
- Proxy/NGFW: UA „Java/*” oraz *.jar z domen o niskiej reputacji → koreluj z procesami Java na hostach.
- macOS: brak Gatekeeper promptów przy apletach w WWW (historycznie); sprawdzaj ~/Library/LaunchAgents po nietypowych wpisach.
- Zestawy exploitów: obserwuj wzorce Blackhole/Blacole (historyczne IOC/telemetria) jako retro‑threat hunting.
False positives / tuning
- Instalatory oparte na Java (Install4j/Launch4j) uruchamiają msiexec.exe/regsvr32.exe — whitelist po ścieżce, podpisie i hashu.
- Narzędzia deweloperskie (Gradle/Maven) – generują ruch HTTP; filtruj po docelowych repo (repo.maven.org, wew. Artifactory).
- UA „Java/*” bywa używany przez skrypty integracyjne — weryfikuj hosty serwerowe vs. stacje użytkowników.
Playbook reagowania (IR)
- Izoluj host/VDI (EDR „isolate”).
- Zabezpiecz artefakty: pamięć, %TEMP%/Downloads, ~/Library/ (macOS), logi proxy/EDR.
- Weryfikuj wersje Javy i wtyczek:
- Windows (PowerShell): Get-ItemProperty 'HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment' | select CurrentVersion
- macOS: /usr/libexec/java_home -V
- Analiza drzew procesów: szukaj java[w].exe → cmd/powershell/mshta/rundll32/....
- Zidentyfikuj źródło: domene/URL z UrlClickEvents i proxy; odetnij na FW/DNS.
- Eradykacja: odinstaluj/wyłącz plugin Java w przeglądarkach (M1042), zaktualizuj JRE/JDK (M1051).
- Hunting wsteczny: wzorce z pkt 7 i 8, retro na 2012‑style TTP (dla zestawów lab/archiwum).
- Lessons learned: polityka disable‑by‑default dla wtyczek, ASR/AppControl (M1038), URL filtering (M1021).
Przykłady z kampanii / case studies
- OSX/Flashback (2012) — masowe infekcje macOS (550k–600k hostów) przez CVE‑2012‑0507; Apple wydało aktualizację w kwietniu 2012 i dodało narzędzia usuwające.
- Blackhole Exploit Kit (2012) — zestaw exploitów zaczął obsługiwać CVE‑2012‑0507, znacząco zwiększając skuteczność drive‑by.
Lab (bezpieczne testy) — przykładowe komendy
Cel: wygenerować telemetrię detekcyjną, bez exploita.
- Proxy/ALB telemetry: serwuj plik hello.jar z wewn. HTTP i symuluj pobranie „klient‑Java”: # serwer python3 -m http.server 8000 # klient (symulacja UA Java z curl) curl -A "Java/1.6.0_31" http://<lab-web>:8000/hello.jar -o /tmp/hello.jar Następnie uruchom zapytania (Splunk/Elastic/KQL/Insights) z sekcji 7.
- EDR/Sysmon łańcuch procesów (symulacja benign): uruchom legalną aplikację Java, a oddzielnie (ręcznie) proces pomocniczy, by sprawdzić reguły korelacyjne — nie symuluj złośliwego kodu.
- M365: wyślij do siebie e‑mail z bezpiecznym linkiem do hello.jar w labie i sprawdź UrlClickEvents (czy klik i domena są odnotowane).
Mapowania (Mitigations, powiązane techniki)
Mitigations (ATT&CK):
- M1051 – Update Software (szybkie łatanie JRE/JDK; polityki patch).
- M1042 – Disable or Remove Feature or Program (wyłączenie/odinstalowanie wtyczki Java w przeglądarkach).
- M1021 – Restrict Web‑Based Content (URL filtering, blokowanie typów plików, skanowanie pobrań).
- M1038 – Execution Prevention (AppControl/ASR, blokada uruchamiania niepodpisanych binariów).
- M1037 – Filter Network Traffic (blokada znanych domen EK/C2, polityki egress).
- M1017 – User Training (świadomość dot. linków/ostrzeżeń przeglądarki).
Powiązane techniki:
- T1189 — Drive‑by Compromise – Exploit ładuje się po wejściu na stronę (watering hole/malvertising/iFrame), skanuje wersje wtyczek i serwuje JAR z exploitem; po skutecznym RCE dropper pobiera adekwatny malware.
- T1203 — Exploitation for Client Execution – Wykorzystanie luki w aplikacji klienckiej (tu: plugin/Java Web Start) do wykonania kodu — bez potrzeby interakcji poza wejściem na stronę.
- T1204.001 — User Execution: Malicious Link – Często poprzedza drive‑by; kliknięcie linku kieruje do strony serwującej exploit i uruchamia T1203.
Źródła / dalsza literatura
- MITRE ATT&CK: T1189, T1203, T1204 (sub‑tech). (MITRE ATT&CK)
- ATT&CK wersjonowanie: v18.0 (Oct 28, 2025). (MITRE ATT&CK)
- NVD / CVE record: opis, zakres wersji. (NVD)
- Oracle CPU (Feb 2012) – advisory i tabeli ryzyka/wersje. (Oracle)
- Analiza techniczna typu type confusion (AtomicReferenceArray). (media.blackhat.com)
- Flashback/ekosystem 2012: ESET whitepaper/blog, Dr.Web liczby, przegląd prasy. (web-assets.esetstatic.com)
- Blackhole EK: wpisy ESET, Krebs, overview MS/F‑Secure. (We Live Security)
- M365 UrlClickEvents – schema/detekcja klików. (Microsoft Learn)
Checklisty dla SOC / CISO (krótko)
SOC
- Reguły detekcji: Java → LOLBIN (Endpoint + Sigma/SPL/KQL/EQL).
- Korelacje: UA Java/* + *.jar + proces java[w].exe.
- Blokady: FW/DNS dla domen kampanii; zasady SWG (blok JAR).
- Telemetria: Sysmon EID 1/3/11/22 wdrożone i wysyłane.
- Retrospektywa na 2012‑style TTP (archiwalne logi/laby).
CISO
- Polityka disable‑by‑default dla przeglądarkowych wtyczek/Java.
- Patch SLA dla JRE/JDK (M1051) i egzekucja wytycznych.
- URL filtering/SSL inspection (M1021/M1037) i polityki egress.
- AppControl/ASR (M1038) na stacjach użytkowników.
- Program szkoleniowy nt. drive‑by/kliknięć (M1017).














