CVE-2013-0422 — Java 7 Security Manager Bypass / Sandbox Escape (RCE) - Security Bez Tabu

CVE-2013-0422 — Java 7 Security Manager Bypass / Sandbox Escape (RCE)

TL;DR

  • Krytyczna luka w Oracle Java 7 (JDK/JRE 7u10 i starsze) pozwalała na zdalne wykonanie kodu przez applet lub Java Web Start (drive‑by). Java 6 nie była podatna. CVSS v2: 10.0.
  • Mechanizm: obejście Security Managera przez dwie podatności: (a) łańcuch JMX/MBean (getMBeanInstantiatorfindClass), (b) błąd w Reflection (rekurencja i pominięcie kontroli). Powszechnie wykorzystywana w styczniu 2013 r. (m.in. Blackhole/Nuclear Pack).
  • Oracle wydało poza‑cykliczną łatę (7u11) i podniosło domyślny poziom bezpieczeństwa Javy do High (klik‑to‑run).
  • Typowe ślady: łańcuch procesów browser → jp2launcher/java[w].exe → cmd/powershell/wscript, pobrania .jar/.jnlp z nieznanych domen, logi Sun/Java/Deployment.
  • Detekcja: korelacja proxy/DNS + EDR/Windows (Sysmon 1/3/7/11/22, Security 4688/5156) + MDE (DeviceProcessEvents/DeviceNetworkEvents).
  • Mitigacje: aktualizacja/wyłączenie wtyczki Java, blokada MIME application/java-archive i application/x-java-jnlp-file, polityki ASR/EDR.

Krótka definicja techniczna

CVE‑2013‑0422 to para luk w Oracle Java 7 umożliwiająca zdalne wykonanie kodu i wyjście z piaskownicy przez niezaufane applet/JNLP w przeglądarce. Wektor: drive‑by. Dotyczy JDK/JRE 7u10 i starszych; JDK/JRE 6 nie dotyczy. CVSSv2=10.0.


Gdzie występuje / przykłady platform

  • Windows/macOS/Linux (endpoint, przeglądarka + plugin Java) — klientowe uruchomienie applet/JNLP. Nie dotyczy serwerów ani samodzielnych aplikacji Java bez przeglądarki.
  • VDI / środowiska korporacyjne — stacje administracyjne z historycznie zainstalowaną Javą 7.
  • Proxy/NGFW/MDE/EDR/SIEM — główne źródła telemetrii do detekcji.
  • Chmury (M365/Azure/AWS/GCP) — detekcja po stronie endpointów zarządzanych (Defender for Endpoint), na brzegach (CloudFront/NGFW) lub – rzadziej – w CloudTrail (gdy organizacja sama hostowała artefakty .jar/.jnlp w S3).

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

Atak następował po wejściu użytkownika na złośliwą lub skompromitowaną stronę. Niezaufany applet/JNLP wykorzystywał dwa błędy w Javie 7:

  1. JMX/MBean — publiczne getMBeanInstantiator w JmxMBeanServer dawało dostęp do prywatnego obiektu MBeanInstantiator i metod findClass, co umożliwiało załadowanie klas poza kontrolą Security Managera.
  2. Reflection — rekurencyjne wywołania API refleksji omijały kontrolę w MethodHandles.Lookup.checkSecurityManager z powodu sposobu działania sun.reflect.Reflection.getCallerClass.
    W praktyce oznaczało to pełne RCE z uprawnieniami użytkownika po samej wizycie na stronie (0‑click beyond browsing). Luki były aktywnie wykorzystywane przez Blackhole i Nuclear Pack od 10–11 stycznia 2013 r. Oracle zareagowało alarmem bezpieczeństwa i 7u11 (zmiana default na High, wymuszając potwierdzenia dla appletów).

Artefakty i logi

ŹródłoEID/typCo szukaćUwagi
Sysmon1 (Process Create)chrome/iexplore/firefox → jp2launcher.exe/java.exe/javaw.exe; dalej spawn cmd.exe, powershell.exe, wscript.exe, mshta.exejp2launcher.exe = Java Web Launcher.
Sysmon3 (Network Connect)java[w].exe łączące się do Internetu (80/443) tuż po pobraniu .jar/.jnlpKorelować z proxy/DNS.
Sysmon7 (Image Load)DLL wtyczki Java (np. npjp2.dll, jp2iexp.dll)Indykatory uruchomienia pluginu.
Sysmon11/22Tworzenie plików w %AppData% / zapytania DNS przez java.exeDropper po eksploatacji.
Windows Security4688/4689Tworzenie/zamknięcie procesu jak wyżejWłącz audyt procesu.
Windows Filtering Platform5156/5157Dopuszczenie/blokada połączeń java.exeKorelacja z hostem docelowym.
Proxy/NGFWHTTPOdpowiedzi Content-Type: application/java-archive (.jar), application/x-java-jnlp-file (.jnlp) z nietypowych domenWzorzec drive‑by.
Java Deploymentplikideployment.properties, logi w …\LocalLow\Sun\Java\Deployment\Lokacje użytkownika na Windows/macOS/Linux.
MDE (Advanced Hunting)DeviceProcessEvents, DeviceNetworkEventsTe same łańcuchy + zdalne URL .jar/.jnlp
CloudTrail (S3 data events)GetObjectJeśli organizacja hostowała .jar/.jnlp — nieoczekiwane pobrania/UA z Java 1.7Wymaga włączonych data events.
KEV statusCVE figuruje w CISA KEV (znana eksploatacja)Odniesienie przez NVD.

Detekcja (praktyczne reguły)

Sigma (Sysmon — Java spawn + post‑exploitation shell)

title: Java Plugin Spawns Suspicious Shell (CVE-2013-0422 Context)
id: 6f1a2a0c-5a0e-4bde-9d1c-0422a7java
status: experimental
description: Wykrywa łańcuch browser→java/jp2launcher→shell po wizycie na stronie (drive-by).
author: Badacz CVE
logsource:
  product: windows
  category: process_creation
detection:
  selection_parent:
    ParentImage|endswith:
      - '\chrome.exe'
      - '\iexplore.exe'
      - '\firefox.exe'
      - '\msedge.exe'
  selection_java:
    Image|endswith:
      - '\java.exe'
      - '\javaw.exe'
      - '\jp2launcher.exe'
  selection_shell:
    CommandLine|contains:
      - 'cmd.exe'
      - 'powershell.exe'
      - 'wscript.exe'
      - 'mshta.exe'
  condition: selection_parent and selection_java and selection_shell
fields:
  - Image
  - ParentImage
  - CommandLine
  - ProcessGuid
  - ParentProcessGuid
falsepositives:
  - Legit applet/JNLP uruchamiający narzędzia systemowe (rzadkie)
level: high
tags:
  - attack.t1189
  - attack.t1203
  - cve.2013-0422

Sigma (Sysmon — podejrzane połączenia java.exe)

title: Java Process Network Activity To Untrusted Domains
id: 8b0f7c87-8d07-4a1b-9f77-jar-net
status: experimental
logsource:
  product: windows
  category: network_connection
detection:
  selection:
    Image|endswith:
      - '\java.exe'
      - '\javaw.exe'
    DestinationPort:
      - 80
      - 443
  filter_corp_domains:
    DestinationHostname|endswith:
      - '.corp.local'
      - '.trusted.example'
  condition: selection and not filter_corp_domains
level: medium
tags:
  - attack.t1189
  - attack.t1203

Splunk (SPL)

index=winevent* (EventCode=4688 OR sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1)
| eval parent=coalesce(ParentImage,ProcessGuidParent,ParentProcessName)
| search parent IN ("*\\chrome.exe","*\\iexplore.exe","*\\firefox.exe","*\\msedge.exe")
| search Image IN ("*\\java.exe","*\\javaw.exe","*\\jp2launcher.exe")
| stats earliest(_time) as first_seen, values(CommandLine) values(ParentCommandLine) by host, Image, parent, ProcessId
| join type=left host, ProcessId [ search index=winevent* EventCode IN (4688,1) Image IN ("*\\cmd.exe","*\\powershell.exe","*\\wscript.exe","*\\mshta.exe") | table host, ParentProcessId, Image, CommandLine, _time ]
| sort - first_seen

KQL (Microsoft 365 Defender – Advanced Hunting)

let browsers = dynamic(["chrome.exe","iexplore.exe","firefox.exe","msedge.exe"]);
let shells = dynamic(["cmd.exe","powershell.exe","wscript.exe","mshta.exe"]);
DeviceProcessEvents
| where Timestamp > ago(7d)
| where FileName in~ ("java.exe","javaw.exe","jp2launcher.exe")
| where InitiatingProcessFileName in~ (browsers)
| join kind=leftouter (
    DeviceProcessEvents
    | where Timestamp > ago(7d)
    | where InitiatingProcessFileName in~ ("java.exe","javaw.exe")
    | where FileName in~ (shells)
    | project DeviceId, ShellTime=Timestamp, FileName, ProcessCommandLine, InitiatingProcessId
) on DeviceId, InitiatingProcessId
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine, RemoteUrl

CloudTrail (CloudWatch Logs Insights — S3 data events)

Uwaga: tylko gdy masz S3 data events. Szuka pobrań .jar/.jnlp z User-Agent zawierającym „Java”.

fields @timestamp, eventSource, eventName, sourceIPAddress, userAgent, requestParameters.bucketName as bucket, requestParameters.key as key
| filter eventSource = "s3.amazonaws.com" and eventName = "GetObject"
| filter key like /(\.jar|\.jnlp)$/i
| filter userAgent like /Java/i
| sort @timestamp desc

Elastic EQL

sequence by host.id with maxspan=5m
  [ process where event.action == "start" and
      process.name in ("chrome.exe","iexplore.exe","firefox.exe","msedge.exe") ]
  [ process where event.action == "start" and
      process.name in ("java.exe","javaw.exe","jp2launcher.exe") and
      process.parent.name in ("chrome.exe","iexplore.exe","firefox.exe","msedge.exe") ]
  [ process where event.action == "start" and
      process.parent.name in ("java.exe","javaw.exe") and
      process.name in ("cmd.exe","powershell.exe","wscript.exe","mshta.exe") ]

Heurystyki / korelacje

  • Korelacja czasu: pobranie *.jar/*.jnlp w proxy/DNS ±30s → java.exe/javaw.exe → shell.
  • User‑Agent / MIME: Java/1.7.0_10 i application/java-archive z domen o niskiej reputacji.
  • Ścieżki plików: nowe pliki w %AppData%\ po uruchomieniu java.exe.
  • Rzadkie procesy potomne: Java rzadko powinna uruchamiać interpreter poleceń na stacjach użytkowników.
  • Zbieżność z KEV: priorytetyzuj alerty dla CVE na liście Known Exploited Vulnerabilities.

False positives / tuning

  • Starsze aplikacje intranetowe oparte na appletach/JNLP (bankowość/SCADA/HCM). Dodaj allowlist domen i ścieżek aplikacji.
  • Dev‑tooling (Maven/Gradle) – rozpoznaj przez parametry linii poleceń i katalog roboczy.
  • Zamiast wyłączać reguły, dookreśl łańcuch (browser→java→shell) lub warunki (spoza strefy zaufanej, brak podpisu binariów).

Playbook reagowania (IR)

  1. Triage & izolacja: odłącz host, zabezpiecz RAM/dysk.
  2. Zbieranie artefaktów:
    • EDR, Sysmon, Windows Security; cache przeglądarek; katalog …\LocalLow\Sun\Java\Deployment\.
  3. Łowy zależne od CVE: wyszukaj łańcuch browser→java→shell, pliki .jar/.jnlp, anomalie DNS.
  4. Usunięcie wektora: odinstaluj/wyłącz Javę w przeglądarce, wymuś JRE ≥ 7u11 (historycznie; dziś → brak pluginu) i politykę High.
  5. Analiza dropperów/persistencji: Autoruns (Run/RunOnce), Scheduled Tasks, %ProgramData%/%AppData%.
  6. Blokady: domeny/URL/sha256 w proxy/EDR; reguły w NGFW.
  7. Komunikacja i lessons learned: wytyczne dla użytkowników, polityki usunięcia legacy‑Javy.

Przykłady z kampanii / case studies

  • Blackhole/Nuclear Pack (styczeń 2013): szybka integracja exploita 0‑day CVE‑2013‑0422, masowe drive‑by.
  • Reakcja dostawcy: Oracle Security Alert z 13 stycznia 2013 r., podniesienie domyślnego poziomu bezpieczeństwa na High i publikacja 7u11 (poza cyklem).

Lab (bezpieczne testy) — przykładowe komendy

Wyłącznie w izolowanym labie. Poniższe testy nie eksploatują CVE‑2013‑0422 — służą do walidacji detekcji (łańcuch procesów i artefakty sieciowe).

A. Symulacja łańcucha browser → java → shell

  1. Otwórz przeglądarkę, następnie uruchom Java w trybie „klienta” (symulacja): # uruchamia jawnie 'java.exe' z benignym poleceniem do wygenerowania telemetrii & "$Env:ProgramFiles\Java\jre*\bin\java.exe" -cp . -Dtest.run=1 -jar .\benign.jar 2>$null
  2. Zastępczo (bez JAR): Start-Process -FilePath "$Env:ProgramFiles\Java\jre*\bin\javaw.exe" -ArgumentList "-version"
  3. Uruchomioną telemetrię „shella” zasymuluj (bezpiecznie): # symulacja potomka (cmd) po Java — tylko test logów Start-Process -FilePath "$Env:SystemRoot\System32\cmd.exe" -ArgumentList "/c", "echo test-from-java"

Cel: sprawdzić, czy reguły z sekcji 7 flagują procesy potomne po aktywności Java.

B. Symulacja artefaktu sieciowego (.jar/.jnlp)

  1. Na hoście labowym: python3 -m http.server 8000
  2. Pobierz plik test.jar przez przeglądarkę lub Invoke-WebRequest – wygeneruje log proxy/DNS/MDE: iwr http://<twoj_lab_host>:8000/test.jar -OutFile $env:TEMP\test.jar

C. Walidacja logów Java Deployment (Windows)
Sprawdź obecność deployment.properties w:
%USERPROFILE%\AppData\LocalLow\Sun\Java\Deployment\deployment.properties.


Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK):

  • M1051 — Update Software (aktualizacje/łatki).
    • M1042 — Disable or Remove Feature or Program (wyłączenie wtyczki Java, blokada JNLP).
    • M1040 — Behavior Prevention on Endpoint (EDR/ASR).
    • M1037 — Filter Network Traffic (blok MIME/TLD/URL).
    • M1030 — Network Segmentation (izolacja stacji wysokiego ryzyka/VDI).

Powiązane techniki ATT&CK (przykłady):

  • T1189 — Drive‑by Compromise (Initial Access).
  • T1203 — Exploitation for Client Execution (Execution).
  • T1204.001 — User Execution: Malicious Link (Execution → Social / link trigger).

Źródła / dalsza lektura

  • Oracle Security Alert for CVE‑2013‑0422 (opis, wersje dotknięte, CVSS 10.0, domyślny poziom High, data 2013‑01‑13). (Oracle)
  • NVD CVE‑2013‑0422 (szczegóły MBean/Reflection, KEV, metryki). (NVD)
  • ESET WeLiveSecurity (2013‑01‑11) — Blackhole/Nuclear zawierają exploit 0‑day na CVE‑2013‑0422. (We Live Security)
  • KrebsOnSecurity (2013‑01‑10 i 2013‑01‑13) — informacja o 0‑day w crimeware oraz publikacja poprawki Oracle. (Krebs on Security)
  • Microsoft Security Intelligence — klasyfikacje Exploit:Java/CVE‑2013‑0422 i wersje dotknięte. (Microsoft)
  • Tenable (Nessus) — wzmianka o wektorze MBeanInstantiator.findClass. (Tenabl)
  • MITRE ATT&CK — T1189, T1203, T1204.001; ATT&CK v18 update. (MITRE ATT&CK)
  • Lokalizacje plików Java Deployment (Oracle docs). (Oracle Docs)

Checklisty dla SOC / CISO

SOC (operacyjna):

  • Korelacja: proxy/DNS *.jar/*.jnlpjava[w].exe ↔ shell (Sysmon 1/3 + Security 4688).
  • Hunting MDE: InitiatingProcessFileName in (chrome.exe, iexplore.exe, firefox.exe, msedge.exe)FileName in (java.exe, javaw.exe, jp2launcher.exe) ∧ (dziecko = cmd/powershell/wscript/mshta).
  • Sprawdź …\LocalLow\Sun\Java\Deployment\ na artefakty (czas/moduły).
  • Wzorce User‑Agent: Java/1.7.0_10; MIME application/java-archive / application/x-java-jnlp-file.
  • Skan hostów pod kątem dropperów w %AppData% i autostartu.

CISO (strategiczna):

  • Eliminacja Javy w przeglądarkach (M1042) + polityka click‑to‑run.
  • Patch management i wycofanie legacy (M1051).
  • Wymuszenie EDR/ASR (M1040) i filtracji na brzegu (M1037).
  • Segmentacja (M1030) dla stacji wysokiego ryzyka.
  • Priorytetyzacja KEV i regularne tabletopy „drive‑by → execution”.

Uwaga końcowa: Oracle wskazuje, że podatność dotyczyła tylko klientowych wdrożeń Javy (applet/JNLP), a nie serwerów czy samodzielnych aplikacji Java; poprawka 7u11 wprowadziła High jako domyślny poziom bezpieczeństwa. Dziś najlepszą praktyką jest całkowite usunięcie lub odseparowanie wtyczki Java z przeglądarek użytkowników.

Jeden komentarz do “CVE-2013-0422 — Java 7 Security Manager Bypass / Sandbox Escape (RCE)”

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