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

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

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 kluczowe 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 szybko 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śli 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.execmd.exe), opcjonalnie EID=3 (połączenia, jeśli 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). Nawet dziś, w retrospektywie, jej wzorce artefaktów (Java → child proc, pobrania JAR) są cennymi sygnałami do budowy analityk behawioralnych w SOC.

Jeden komentarz do “CVE-2012-1723 — Oracle Java SE HotSpot (bytecode verifier) RCE”

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