CVE-2012-1723 — Oracle Java SE HotSpot (bytecode verifier) RCE

securitybeztabu.pl 14 godzin temu

TL;DR

Błąd w podsystemie HotSpot/bytecode verifier Javy umożliwia zdalne wykonanie kodu oraz ucieczkę z sandboxa po wejściu na złośliwą stronę lub uruchomieniu nieufnego apletu/JNLP. W praktyce był intensywnie wykorzystywany przez zestawy exploitów (np. Blackhole) do początkowej infekcji stacji roboczych. Aktualizacja JRE/JDK do 7u5/6u33+ i blokada treści web to najważniejsze działania. Mapa do ATT&CK: T1189 + T1203.

Krótka definicja techniczna

CVE-2012-1723 to krytyczna podatność RCE w Oracle Java SE (HotSpot) polegająca na błędnej optymalizacji i niewystarczającym sprawdzaniu typów w weryfikatorze bajtkodu dla instrukcji dostępu do pól/statycznych, co umożliwia sandbox escape i wykonanie dowolnego kodu w kontekście użytkownika.

Gdzie występuje / przykładowe platformy

  • Windows / macOS / Linux (endpointy z JRE/JDK, dawne wtyczki przeglądarek NPAPI, Java Web Start) — scenariusz klienta (najczęstszy).
  • AD / M365 / ESXi / K8s / chmury (AWS/Azure/GCP): brak bezpośredniego wektora — wpływ pośredni poprzez kompromitację stacji użytkownika i dalsze TTPs (np. kradzież sesji/danych po inicjalnym dostępie). [Nie dotyczy bezpośrednio].

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

Błąd wynika z nieprawidłowej optymalizacji i niedostatecznej kontroli typów przez weryfikator bajtkodu HotSpot dla instrukcji GETFIELD/PUTFIELD/GETSTATIC/PUTSTATIC, co prowadzi do niespójności typów i obejścia kontroli bezpieczeństwa. Skutkiem jest ucieczka z sandboxa JRE i możliwość załadowania dodatkowych klas z podwyższonymi uprawnieniami, a dalej RCE. Podatność była wieloplatformowa i gwałtownie trafiła do Blackhole exploit kit oraz do modułów narzędzi ofensywnych, przez co stała się powszechna w kampaniach drive‑by.

Z punktu widzenia ofiary inicjatorem jest zwykle przeglądarka otwierająca stronę z applet/JAR/JNLP, co powoduje załadowanie złośliwej klasy Javy i eksploitację bez dodatkowej interakcji użytkownika (CVSS UI:N). Efektem wtórnym bywają procesy potomne (np. cmd.exe, powershell.exe) lub pobieranie dodatkowych plików (droppers).

Artefakty i logi

ŹródłoCo zbieraćPrzykłady / wskazówki
Windows SecurityEID 4688 (tworzenie procesu)ParentImage=...\\java.exe/javaw.exe uruchamia cmd.exe, powershell.exe, wscript.exe, rundll32.exe, mshta.exe.
SysmonEID 1 (Process Create), 3 (Network Connect), 11 (FileCreate)Łańcuch java[w].exe → {shell/script}; połączenia HTTP/HTTPS do domen niskiej reputacji; zapisy .jar/.class w %TEMP%.
Proxy/HTTP logsŻądania do *.jar/*.jnlp; UA Java/; referrer do świeżo zarejestrowanych domenKorelować z następnymi procesami potomnymi i zapisami w profilu użytkownika.
EDR/AVDetekcje apletów i loaderówNazwy: Exploit:Java/CVE-2012-1723 (Microsoft), sygnatury IDS/IPS (Symantec/Broadcom).
DNSRozwiązania domen wykorzystywanych w kampaniachDomeny jednorazowe, fast‑flux.
CloudTrail (S3 Data Events)*Rzadkie — pobrania GetObject .jar przez konta korp.eventSource='s3.amazonaws.com' AND eventName='GetObject' AND requestParameters.key LIKE '%.jar' — tylko jeżeli włączone Data Events/Lake.
K8s audit / M365[brak bezpośrednich artefaktów]Nie dotyczy — klientowa eksploitacja Javy.

* Uwaga: większość scenariuszy drive‑by nie przechodzi przez konta AWS ofiary.

Detekcja (praktyczne reguły)

Sigma (Sysmon / Windows)

title: Java Spawning Suspicious Children (CVE-2012-1723 Pattern) id: 8da0d2b5-4f2b-4a1e-9f1e-1723java-rce status: experimental description: Wykrywa uruchamianie podejrzanych procesów potomnych przez java.exe/javaw.exe references: - https://nvd.nist.gov/vuln/detail/CVE-2012-1723 - https://attack.mitre.org/techniques/T1203/ - https://attack.mitre.org/techniques/T1189/ tags: - attack.t1203 - attack.t1189 logsource: product: windows service: sysmon detection: parent_java: ParentImage|endswith: - '\java.exe' - '\javaw.exe' child_susp: Image|endswith: - '\cmd.exe' - '\powershell.exe' - '\wscript.exe' - '\cscript.exe' - '\rundll32.exe' - '\mshta.exe' condition: parent_java and child_susp falsepositives: - Narzędzia deweloperskie (Maven/Gradle), instalatory level: high

Splunk (SPL, Sysmon EID=1)

index=endpoint sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1 | eval parent=lower(ParentImage), child=lower(Image) | search parent="*\\java.exe" OR parent="*\\javaw.exe" | search child="*\\cmd.exe" OR child="*\\powershell.exe" OR child="*\\wscript.exe" OR child="*\\cscript.exe" OR child="*\\rundll32.exe" OR child="*\\mshta.exe" | stats count min(_time) as first_seen max(_time) as last_seen by host, ParentImage, ParentCommandLine, Image, CommandLine, User, process_guid, parent_process_guid

KQL (Microsoft 365 Defender)

DeviceProcessEvents | where InitiatingProcessFileName in~ ("java.exe","javaw.exe") | where FileName in~ ("cmd.exe","powershell.exe","wscript.exe","cscript.exe","rundll32.exe","mshta.exe") | summarize count(), first_seen=min(Timestamp), last_seen=max(Timestamp) by DeviceName, InitiatingProcessAccountName, InitiatingProcessFileName, FileName, InitiatingProcessCommandLine, CommandLine, InitiatingProcessSHA256, SHA256

(Opcjonalnie, korelacja ruchu sieciowego):

DeviceNetworkEvents | where InitiatingProcessFileName in~ ("java.exe","javaw.exe") | where RemoteUrl has_any (".jar",".jnlp",".class") | summarize dcount(RemoteUrl), makeset(RemoteUrl) by DeviceName, InitiatingProcessFileName, bin(Timestamp, 15m)

AWS (CloudTrail Lake / Athena — tylko gdy włączone S3 Data Events)

-- CloudTrail Lake / Athena (przykład): pobrania *.jar* przez tożsamości korp. SELECT eventTime, userIdentity.arn, sourceIPAddress, requestParameters.bucketName as bucket, requestParameters.key as objectKey, userAgent FROM cloudtrail_logs WHERE eventSource = 's3.amazonaws.com' AND eventName = 'GetObject' AND requestParameters.key LIKE '%.jar' AND userAgent LIKE 'Java/%';

Wymaga rejestrowania Data Events dla S3 i zapytań Lake/Athena.

Elastic (EQL)

process where process.parent.name in ("java.exe","javaw.exe") and process.name in ("cmd.exe","powershell.exe","wscript.exe","cscript.exe","rundll32.exe","mshta.exe")

Heurystyki / korelacje (co łączyć)

  • Łańcuch czasowy (ą5 min): (Proxy/EDR) pobranie *.jar/*.jnlp → (Sysmon) java[w].exe start → proces potomny z interpretatorem/skryptem → (Sysmon 3) nowa sesja sieciowa C2.
  • UA i referer: User-Agent: Java/ + domena świeżo zarejestrowana + brak wcześniejszych hitów w organizacji.
  • Ścieżki plików: zapisy w %TEMP%, %USERPROFILE%\AppData\Local\Temp\ z rozszerzeniami .jar/.class, po których następuje wykonanie EXE/DLL.
  • EDR/AV: alarmy typu Exploit:Java/CVE-2012-1723 skorelowane z ruchem do nowych domen.

False positives / tuning

  • Deweloperzy Java (Maven/Gradle/ant) mogą sporadycznie uruchamiać powłokę — whitelisting hostów dev, podpisanych ścieżek narzędzi (np. maven wrapper) i repozytoriów artefaktów.
  • Instalatory (np. launchery gier/aplikacji na Javie) — filtruj po katalogu Program Files\Java\bin\java.exe vs. embedded JRE w katalogu aplikacji.
  • Agreguj alert dopiero, gdy co najmniej dwa warunki spełnione: java → child proc i pobranie *.jar/.jnlp z nieznanej domeny.

Playbook reagowania (IR)

  1. Kwalifikacja/izolacja: odłącz host od sieci (EDR izolacja).
  2. Identyfikacja wersji JRE/JDK: java -version; w Windows sprawdź HKLM\Software\JavaSoft\Java Runtime Environment\*.
  3. Zabezpieczenie dowodów: ram dump (jeśli polityka pozwala), MFT/$UsnJrnl, prefetch, zestaw logów (Sysmon, proxy, DNS).
  4. Triage wskaźników: hashe pobranych JAR/EXE, domeny, UA Java/.
  5. Remediacja: usuń artefakty, zablokuj domeny/URL-e, zaktualizuj JRE/JDK do 7u5/6u33+ (lub nowszych LTS), wyłącz przestarzałe wtyczki Java/Java Web Start.
  6. Hunt (24–72h wstecz): wzorzec java[w].exe → {cmd/powershell/...} + GET *.jar w proxy/DNS.
  7. Lessons learned: egzekwuj M1021/M1048/M1051 (Mitigations, poniżej).

Przykłady z kampanii / case studies

  • Blackhole exploit kit (2012): szybka integracja exploitu na CVE‑2012‑1723; ataki drive‑by masowo infekowały hosty przez aplety Javy; publiczny opis procesu wykorzystania i ucieczki z sandboxa.
  • Microsoft WDSI: rodzina detekcji Exploit:Java/CVE‑2012‑1723 — aplet pobiera i uruchamia dodatkowe pliki z zewnętrznego hosta po wejściu na zhakowaną stronę.
  • Sygnatury IPS (Broadcom/Symantec): gotowe reguły sieciowe podkomponentu HotSpot dla tego CVE.
  • CISA KEV: CVE wpisany do Known Exploited Vulnerabilities (wymóg patchowania dla FCEB). Informacja widnieje m.in. na karcie NVD (odniesienie do KEV).

Lab (bezpieczne testy) — symulacja dla SOC

Cel: przetestować reguły bez eksploitacji — wygenerować podejrzany łańcuch java → shell.

  1. Kod (bezpieczny): TestSpawn.java import java.io.*; public class TestSpawn { public static void main(String[] args) throws Exception { new ProcessBuilder("cmd.exe", "/c", "echo HelloFromJava").start().waitFor(); } }
  2. Budowa i uruchomienie (host testowy/VM): javac TestSpawn.java jar --create --file test.jar TestSpawn.class java -cp . TestSpawn java -jar test.jar
  3. Oczekiwane artefakty: Sysmon EID=1 (java.exe → cmd.exe), opcjonalnie EID=3 (połączenia, jeżeli dodać curl w ProcessBuilder).
  4. Weryfikacja: sprawdź, czy zadziałały Sigma/SPL/KQL/EQL z sekcji 7.

Uwaga: Testy wyłącznie w odizolowanej VM i ze znanym, niewinnym ładunkiem.

Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK Enterprise):

  • M1051 — Update Software: szybkie łatki JRE/JDK (7u5/6u33+).
    • M1042 — Disable or Remove Feature or Program: usuń/wyłącz wtyczkę Java, Java Web Start.
    • M1021 — Restrict Web‑Based Content: proxy/WAF/filtry treści blokujące *.jar/*.jnlp.
    • M1048 — Application Isolation and Sandboxing: sandboxing przeglądarki/aplikacji.
    • M1031 — Network Intrusion Prevention: sygnatury IDS/IPS dla znanych kampanii.

Powiązane techniki ATT&CK:

  • T1189 — Drive‑by Compromise (wejście na stronę inicjuje eksploatację).
  • T1203 — Exploitation for Client Execution (podatność w aplikacji klienckiej — Java).

Źródła / dalsza lektura

  • NVD (CVE-2012-1723): opis, CVSS 3.1 (9.8), wzmianka o KEV, historia zmian. (NVD)
  • Oracle Java SE CPU — czerwiec 2012 (tekstowa risk matrix): opis CVE‑2012‑1723 (HotSpot), dotknięte wersje, scenariusz klienta. (Oracle)
  • Tenable (Nessus 64848): wersje naprawcze 7u5/6u33/5.0u36/1.4.2_38. (Tenable®)
  • OpenJDK (mailing list): powiązanie z Issues in client compiler (S7152811). (mail.openjdk.java.net)
  • ESET WeLiveSecurity: analiza (błąd w weryfikatorze bajtkodu, Blackhole). (We Live Security)
  • Microsoft WDSI: Exploit:Java/CVE-2012-1723 — zachowanie zagrożenia. (Microsoft)
  • Broadcom/Symantec: sygnatura Web Attack: Oracle Java SE CVE‑2012‑1723. (Broadcom)
  • ATT&CK v18 (Version history): aktualna wersja ramy. (MITRE ATT&CK)
  • ATT&CK techniki: T1189, T1203. (MITRE ATT&CK)
  • AWS (CloudTrail/Athena/Lake): przykłady zapytań i wymagania dla Data Events. (AWS Documentation)

Checklisty dla SOC / CISO (krótko)

SOC (operacyjne):

  • Wdrożone reguły: Sigma/EQL/KQL/SPL z korelacją java[w].exe → child + *.jar/.jnlp
  • Blokady proxy: *.jar, *.jnlp, UA Java/ z Internetu, wyjątki tylko dla zaufanych repozytoriów
  • Polowanie na hosty z niezałatanym JRE/JDK; inwentaryzacja wersji
  • Blokada/wycofanie wtyczek Java/Java Web Start (jeśli jeszcze obecne)
  • Feed KEV — CVE-2012-1723 oznaczone jako exploited-in-the-wild (priorytet)

CISO (strategiczne):

  • Polityka M1051: SLA na łatki dla RCE w komponentach klienckich
  • M1042/M1048: eliminacja legacy pluginów + izolacja aplikacji przeglądarkowych
  • M1021/M1031: restrykcja treści web i IPS na granicy
  • Program zarządzania technologiami starszymi (EOL) oraz egzekwowanie standardów oprogramowania

Uwaga o ryzyku: CVE‑2012‑1723 pozostaje klasycznym przykładem, jak jedna luka w środowisku klienckim może zapewnić atakującym natychmiastowy punkt wejścia (Initial Access) i wykonanie kodu (Execution). choćby dziś, w retrospektywie, jej wzorce artefaktów (Java → child proc, pobrania JAR) są cennymi sygnałami do budowy analityk behawioralnych w SOC.

Idź do oryginalnego materiału