Archiwa: NIST - Strona 34 z 38 - Security Bez Tabu

CVE-2025-52881 — runc: procfs write-redirect

TL;DR

CVE‑2025‑52881 to luka w runc (>=1.0, dotyczy m.in. Docker/containerd/CRI‑O), która pozwala przekierować zapisy do /proc podczas startu nowego kontenera (wyścigi + współdzielone montowania). Skutkiem może być ominięcie etykiet LSM, zapis do niebezpiecznych plików procfs (np. core_pattern, sysrq-trigger), DoS hosta lub ucieczka z kontenera (ATT&CK T1611). Naprawiono w runc 1.2.8, 1.3.3, 1.4.0‑rc.3 – aktualizacja jest kluczowa.


Krótka definicja techniczna

W runc 1.2.7 / 1.3.2 / 1.4.0‑rc.2 atakujący może przekierować operacje zapisu runc do alternatywnych plików procfs poprzez zestaw wyścigów przy współdzielonych montowaniach (np. symlink w tmpfs), co umożliwia zarówno bypass LSM (zapisy do proc/self/attr/*), jak i semi‑dowolny zapis do plików /proc/sys/* (np. kernel/core_pattern), prowadząc do eskalacji/ucieczki lub DoS.


Gdzie występuje / przykłady platform

  • Linux / kontenery OCI: Docker, containerd, CRI‑O (runc jako runtime).
  • Kubernetes (K8s): klastry korzystające z runc na węzłach roboczych (w tym minikube/kind).
  • Chmury: EKS/ECS/Fargate, AKS, GKE oraz Amazon Linux / Bottlerocket – dostawcy opublikowali zaktualizowane AMI/obrazy; AWS podkreśla brak ryzyka „cross‑customer”, ale rekomenduje aktualizacje.
  • Środowiska buildów: Docker BuildKit / docker buildx build (równoległe uruchomienia z niestandardowymi mountami).

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

Mechanizm CVE‑2025‑52881. Runc podczas startu kontenera wykonuje różne zapisy do procfs (np. etykiety LSM w proc/self/attr/*, ustawienia sysctl w proc/sys/*). Przy odpowiednio przygotowanej sytuacji wyścigu z współdzielonymi montowaniami (shared mounts) atakujący może sprawić, że ścieżka docelowa zapisów „wskoczy” na inny plik procfs (m.in. przez symlink w tmpfs), co omija wcześniejsze zabezpieczenia (z 2019 r.) sprawdzające „czy to jest procfs”, bo przekierowanie dalej wskazuje na procfs – tylko nie ten plik. Dzięki temu można m.in.:

  • Wyłączyć lub ominąć stosowanie LSM (AppArmor/SELinux) do procesu kontenera,
  • Zapisać w /proc/sys/kernel/core_pattern i wykorzystać „kernel upcalls” do wykonania pomocy core dump na hoście,
  • Zapisać do /proc/sysrq-trigger i wywołać awaryjne akcje jądra (DoS).

Klasa problemu łączy CWE‑363 (Race Condition enabling link following) i CWE‑61 (Symlink Following).

Konsekwencja w ATT&CK. To typowy wektor T1611: Escape to Host – ucieczka z kontenera do hosta, z potencjałem późniejszej persystencji i ruchu bocznego. MITRE wskazuje kontenery/ESXi/Linux/Windows jako platformy dla tej techniki (w tym kontekście dotyczy Linux/runc).

Wersje naprawione: runc 1.2.8 / 1.3.3 / 1.4.0‑rc.3 (wiele commitów + aktualizacja filepath-securejoin). Dystrybucje (Ubuntu, Amazon Linux/Bottlerocket) opublikowały pakiety i nowe AMI.


Artefakty i logi (tabela)

WarstwaŹródłoPole/IDCo obserwować
Host Linuxauditd / eBPF (tracee/falco)syscall=open/openat/openat2/write + namePróby zapisu do proc/self/attr/*, proc/sys/*, zwł. core_pattern, sysrq-trigger; procesy: runc, containerd-shim-runc-v2, crio.
Host Linuxjournald/kmsgkernelPaniki/rebooty, wpisy o sysrq, błędy LSM/labelingu podczas startu kontenera.
Container runtimecontainerd/crio logsBłędy montowań, ostrzeżenia o symlinkach/„dangling symlink”, retry na start.
Kubernetes auditcreate/update Podspec.containers[].volumeMounts[].mountPropagationBidirectional lub nietypowe mounty wpływające na współdzielenie montowań; korelować z nietypowymi startami podów.
Kubernetes eventsEventsWarning przy montowaniu woluminówOstrzeżenia dot. mount propagation, hostPath; częste restarty.
ECS/EKS (CloudTrail)RegisterTaskDefinition, RunTask, EKS AMI rolloutsJSON payloadWzorce: linuxParameters.tmpfs, nietypowe mountPoints, masowe nowe TaskDefinition po stronie CI/CD. (Indykator zmian/eksperymentów, nie samego ataku).
M365[nie dotyczy] (luka jest w runc/Linux).
Windows EID[nie dotyczy] (runc nie dotyczy Windows containers/runhcs).

Detekcja (praktyczne reguły)

Sigma (Linux/auditd) — wykrycie „niebezpiecznych” zapisów do procfs przez runc/CRI:

title: Runc/CRI writes to dangerous procfs targets (CVE-2025-52881 class)
id: 6b7e7b7c-6a6f-4d2a-9d3b-52881d3f0cve
status: experimental
description: Detect runc/containerd/crio writing to procfs targets linked to container escape/DoS
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2025-52881
  - https://github.com/opencontainers/runc/security/advisories/GHSA-cgrx-mc8f-2prm
logsource:
  product: linux
  service: auditd
detection:
  syscall:
    syscall|contains:
      - open
      - openat
      - openat2
      - write
  proc_targets:
    name|contains:
      - "/proc/sysrq-trigger"
      - "/proc/sys/kernel/core_pattern"
    name|startswith:
      - "/proc/self/attr/"
      - "/proc/sys/"
  procs:
    exe|endswith:
      - "/runc"
      - "/containerd-shim-runc-v2"
      - "/crio"
  condition: syscall and procs and proc_targets
level: high
tags:
  - attack.t1611
  - cve.2025-52881

Splunk (SPL) – auditd + journald

(index=linux_audit OR sourcetype=linux:audit) ("type=SYSCALL" OR "SYSCALL=")
| rex field=_raw "exe=(?<exe>[^ ]+)"
| rex field=_raw "name=(?<name>[^ ]+)"
| search exe IN ("/usr/bin/runc","/usr/sbin/runc","/usr/bin/containerd-shim-runc-v2","/usr/bin/crio") 
| search name="/proc/sysrq-trigger" OR name="/proc/sys/kernel/core_pattern" OR name LIKE "/proc/self/attr/%"
| stats count min(_time) as first max(_time) as last by host exe name
| where count>0

KQL (Azure / Defender for Containers + K8s Audit)

// K8s audit: podejrzana propagacja montowań
KubeAudit
| where verb in ("create","update")
| where objectRef.resource == "pods"
| extend m = tostring(requestObject.spec.containers[0].volumeMounts)
| where m has "mountPropagation" and m has "Bidirectional"
| project TimeGenerated, userAgent, user.username, namespace=tostring(objectRef.namespace), pod=tostring(objectRef.name), requestObject
// Linux syslog z AMA: wzmianki o sysrq/core_pattern (proxy dla DoS/escape symptomów)
Syslog
| where ProcessName in~ ("runc","containerd-shim-runc-v2","crio")
| where SyslogMessage has_any ("sysrq-trigger","core_pattern","/proc/self/attr/")
| project TimeGenerated, Computer, ProcessName, SyslogMessage

AWS – CloudTrail (CLI/JMESPath) — heurystyka zmian definicji z mountami/tmpfs

Uwaga: CloudTrail nie rejestruje operacji wewnątrz kontenera. Poniższe służy do wykrywania zmian definicji z ryzykowną konfiguracją, które mogą ułatwić wyścigi z montowaniami.

aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventName,AttributeValue=RegisterTaskDefinition \
  --query "Events[?contains(CloudTrailEvent,'\"tmpfs\"') || contains(CloudTrailEvent,'\"mountPoints\"') || contains(CloudTrailEvent,'\"privileged\":true')].[EventTime,Username,Resources]"

Dla EKS: monitoruj rollouty AMI/NodeGroup po publikacjach AWS (patchowane runc w nowych AMI).

Elastic / EQL (Elastic Defend)

file where
  event.category == "file" and event.action in ("open","openat","write") and
  process.name in ("runc","containerd-shim-runc-v2","crio") and
  file.path regex~ """^/proc/(sysrq-trigger|sys/.*|self/attr/.*)"""

Heurystyki / korelacje

  • Korelacja czasu: Pod/Task start → w ~sekundach pojawiają się zapisy do /proc przez runc → następnie nietypowe zdarzenia jądra (sysrq/panika) albo procesy na hoście uruchomione przez helpery kernela (rdzeń → core_pattern).
  • Konfiguracje sprzyjające: mountPropagation: Bidirectional, nadużycia tmpfs/symlinków w łańcuchu build/run, kontenery uprzywilejowane w pipeline’ach.
  • Łańcuchy z innymi lukami: 31133/52565 + 52881 (bypass LSM) → pełny container escape.

False positives / tuning

  • Legalne zapisy runc do /proc/self/attr/* (etykietowanie LSM) – zwykle pojedyncze, na starcie. Ogranicz alerty do:
    • Listy docelowych plików: sysrq-trigger, core_pattern, inne proc/sys/* poza whitelistem;
    • Częstotliwości (burst > X w sekundę);
    • Kontekstu: nietypowe mount propagation / uprzywilejowany kontener / nieznany obraz.
  • W środowiskach z narzędziami testowymi (np. chaos‑engineering) uwzględnij wyjątki czasowe.

Playbook reagowania (IR)

  1. Triage & izolacja: cordon/drain węzła K8s z incydentem; w ECS – wycofaj dotknięte instancje/AMIs; odetnij od sieci segment management.
  2. Weryfikacja wersji: sprawdź runc --version na węzłach; jeżeli <1.2.8/1.3.3/1.4.0‑rc.3 → patch ASAP.
  3. Artefakty: zrzut /var/log/audit/audit.log, journalctl -k, logi containerd/CRI‑O, K8s audit.
  4. Łowy zagrożeń: wyszukaj zapisy do core_pattern / sysrq-trigger; sprawdź, czy nie doszło do restarów/panik; poszukaj procesów hosta tworzących się bezpośrednio po starcie kontenera.
  5. Eradykacja: odtwórz węzły na patchowanych AMI/obrazach (EKS/ECS/Bottlerocket/AL2023) i redeploy workloadów.
  6. Utwierdzenie: egzekwuj PSS/Pod Security Standards; blokuj mountPropagation: Bidirectional; minimalne przywileje; eBPF/Falco policy dla procfs; rotation sekretów.
  7. Retrospektywa: SCM/CI – kto zmienił definicje mountów/tmpfs? Wyciągnij wnioski do „policy as code”.

Przykłady z kampanii / case studies

  • TeamTNT / Hildegard / Peirates – historycznie obserwowano użycie uprzywilejowanych kontenerów, hostPath i innych wzorców prowadzących do Escape to Host (T1611); MITRE pokazuje te przykłady w procedurach techniki.

Uwaga: To analogiczne taktyki „ucieczki do hosta”, nie specyficzne exploity CVE‑2025‑52881.


Lab— przykładowe komendy

Wyłącznie w odizolowanym labie. Poniższe testy nie wykonują destrukcyjnych zapisów; służą jedynie do weryfikacji detekcji.

A. Ścieżka detekcyjna na procfs (bezpieczne cele)

# 1) Włącz auditd reguły (minimal): monitoruj open/write do procfs przez runc
sudo auditctl -w /proc/self/attr/ -p wa -k runc_proc_attr
sudo auditctl -w /proc/sys/ -p wa -k runc_proc_sys

# 2) Uruchom „zwykły” pod (minikube/kind) i obserwuj start – runc pisze do /proc/self/attr/*
#    Detektory powinny złapać pojedyncze, krótkie zapisy (baseline).

# 3) W kontenerze wykonaj bezpieczne odczyty/zapisy:
kubectl run test --image=alpine --restart=Never -- sh -c 'echo 0 >/proc/self/oom_score_adj; cat /proc/self/status >/dev/null; sleep 2'
#    (oom_score_adj na 0 — bezpieczne; brak sysrq/core_pattern!)

B. Heurystyka K8s: mountPropagation

# manifest (do testu reguł K8s-audit; NIE używać na prod)
apiVersion: v1
kind: Pod
metadata: { name: mp-test, namespace: default }
spec:
  containers:
  - name: c
    image: alpine
    command: ["sh","-c","sleep 60"]
    volumeMounts:
      - name: v
        mountPath: /mnt
        mountPropagation: Bidirectional     # <- trigger detekcji
  volumes:
  - name: v
    emptyDir: {}

Zastosuj i potwierdź, że KQL z sekcji 7 zwraca zdarzenie.


Mapowania (Mitigations, powiązane techniki)

Mitigations (MITRE ATT&CK):

  • M1051 Update Software – aktualizuj runc/AMI/OS (naprawa: 1.2.8/1.3.3/1.4.0‑rc.3).
  • M1048 Application Isolation & Sandboxing / PSS – ogranicz syscalle, blokuj uprzywilejowane kontenery i propagację montowań.
  • M1038 Execution Prevention – obrazy minimalne, filesystem read‑only.
  • M1026 Privileged Account Managementnon‑root w kontenerach.

Powiązane techniki ATT&CK:

  • T1611 Escape to Host (główna),
  • T1190 Exploit Public‑Facing Application – typowy wektor dojścia do kontenera przed ucieczką.

Źródła / dalsza lektura

  • MITRE ATT&CK T1611: Escape to Host – opis, wersja 1.6 (24.10.2025). (MITRE ATT&CK)
  • NVD CVE‑2025‑52881 – opis, CVSS v4.0, lista commitów naprawczych. (NVD)
  • GitHub Security Advisory (opencontainers/runc, GHSA‑cgrx‑mc8f‑2prm) – szczegóły techniczne, skutki, wersje fixed. (GitHub)
  • runc releases 1.2.8 / 1.3.3 / 1.4.0‑rc.3 – noty wydania z informacją o 3 CVE. (GitHub)
  • oss‑sec ogłoszenie (Aleksa Sarai) – 3 luki runc, łańcuchowanie z 31133/52565 i rola 52881 jako LSM bypass. (SecLists)
  • Ubuntu CVE‑2025‑52881 / USN‑7851‑1 – status pakietów (wysoki priorytet). (Ubuntu)
  • AWS Security Bulletin AWS‑2025‑024 – wpływ na EKS/ECS/Bottlerocket/AL2023 (brak ryzyka cross‑customer, aktualizacje AMI). (Amazon Web Services, Inc.)

Checklisty dla SOC / CISO

SOC

  • Czy mamy sygnatury/audyt zapisu do procfs przez runc/CRI i K8s‑audit dla mountPropagation?
  • Czy EKS/ECS/hosty mają aktualne AMI/obrazy z runc ≥1.3.3 (lub backport)?
  • Baseline: typowy profil zapisów proc/self/attr/* na starcie kontenera – odstępstwa = alert.
  • Korelować starty kontenerów z anomaliami jądra (sysrq/paniki/rebooty).
  • Monitorować definicje podów/tasków pod kątem uprzywilejowania/propagacji montowań.

CISO / Platform

  • Patch policy: runc/OS/AMI w 48h; roll‑back plan; skan statusu dystrybucji (Ubuntu/AL/… ).
  • PSS/PSA: zakaz privileged, hostPID, mountPropagation: Bidirectional bez wyjątku.
  • Runtime ochrony: eBPF (Falco/Tracee, Elastic Defend) z regułami na procfs.
  • Bezpieczne buildy: kontrola docker buildx i mountów w pipeline; SBOM i image signing.
  • Ćwiczenia IR: scenariusz container escape (ATT&CK T1611) w planie ćwiczeń.

CVE-2025-52565 — runc: ucieczka z kontenera przez montowanie /dev/console (race + symlink)

TL;DR

W runc (silnik OCI używany m.in. przez Docker, containerd, CRI‑O) występuje błąd sprawdzania podczas montowania /dev/pts/$n na /dev/console dla kontenerów z przydzielonym terminalem. Ze względu na wyścigi i śledzenie symlinków atakujący, który kontroluje konfigurację/obraz uruchamianego kontenera, może przekierować bind‑mount i uzyskać możliwość zapisu do chronionych plików w procfs (np. /proc/sysrq-trigger, /proc/sys/kernel/core_pattern), co w praktyce umożliwia DoS hosta lub ucieczkę na hosta. Luka dotyczy m.in. runc 1.0.0‑rc3–1.2.7, 1.3.0‑rc.1–1.3.2 oraz 1.4.0‑rc.1–rc.2; naprawiona w 1.2.8, 1.3.3 i 1.4.0‑rc.3. CVSS v4 (CNA): High (8.4).


Krótka definicja techniczna

CVE‑2025‑52565 to luka w runc, w której bind‑mount /dev/pts/$n → /dev/console wykonywany jest przed zastosowaniem maskedPaths/readonlyPaths. Przy niewystarczających walidacjach możliwe jest podstawienie symlinka i „nadpisanie” celu mountu ścieżką prowadzącą do wrażliwych plików procfs, co może skutkować eskalacją do ATT&CK T1611: Escape to Host.


Gdzie występuje / przykłady platform

  • Linux (host): dystrybucje korzystające z runc (Docker/Containerd/CRI‑O).
  • Kubernetes (AKS/EKS/GKE, on‑prem): każdy klaster, w którym runtime CRI używa runc; pod z tty: true może inicjować wadliwy montaż konsoli.
  • Chmury (AWS/EKS/ECS): AWS potwierdził wpływ nowych luk runc na uruchamianie nowych kontenerów; brak ryzyka między‑klienckiego w usługach zarządzanych (izolacja nie opiera się o kontenery jako granicę bezpieczeństwa).
  • Dystrybucje (Ubuntu/SUSE itd.): doradztwa bezpieczeństwa publikują statusy i aktualizacje pakietów runc.

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

Podczas inicjalizacji kontenera z terminalem runc bind‑mountuje „slave” pty (/dev/pts/$n) pod /dev/console. Przed zaaplikowaniem maskedPaths/readonlyPaths dochodzi do okna czasu, w którym atakujący może podmienić źródło na symlink wskazujący docelowo na ścieżki w procfs. Efekt: zapisy do plików typu /proc/sysrq-trigger (natychmiastowe działania systemowe → DoS) bądź modyfikacja /proc/sys/kernel/core_pattern (przekierowanie core dumpów do programu — wektor eskalacji/persistencji). Łańcuch jest koncepcyjnie podobny do CVE‑2025‑31133, lecz dotyczy innego etapu montowania konsoli. Błąd naprawiono, dodając m.in. walidacje inode, bezpieczne ponowne otwieranie ścieżek i wsparcie TIOCGPTPEER.

Zakres wersji: 1.0.0‑rc3–1.2.7, 1.3.0‑rc.1–1.3.2, 1.4.0‑rc.1–rc.2 → fixed: 1.2.8, 1.3.3, 1.4.0‑rc.3. CWE: 61 (symlink following) oraz 363 (race enabling link following). CVSS v4 (CNA GitHub): 8.4 High (na NVD brak jeszcze własnej oceny). Uwaga: w opisie GHSA pojawia się alternatywna ocena 7.3 High; różnice wynikają z aktualizacji metryk przez źródła.


Artefakty i logi (co zbierać)

ŹródłoArtefakt / logNa co patrzećUwagi
Linux auditdSYSCALL=mount (MS_BIND), open/openat → ścieżki w /proc/sys*, /proc/sysrq-triggerPróby zapisu/otwarcia do ww. plików z procesów uruchamianych w cgroupach kontenerowych (/kubepods/, /docker/, /containerd/).Wysoka wartość dowodowa w korelacji z utworzeniem nowego kontenera.
Sysmon for LinuxEID 11 (FileCreate), EID 1 (ProcessCreate)Tworzenie/zapis do /proc/sys/kernel/core_pattern lub akcji na /proc/sysrq-trigger; łańcuch procesów wskazujący na runc, containerd-shim, dockerd.Wymaga właściwego mapowania pól.
K8s auditcreate Pod/Containerspec.containers[].tty=true lub stdin=true dla obrazów z niskim zaufaniem; nagłe serie interaktywnych podów.Warto mieć polityki OPA/Gatekeeper zakazujące TTY w produkcji.
Docker/containerddzienniki demonaUtworzenie z Config.Tty=true (Docker) lub WithTTY=true (containerd).Pola zależne od journald/syslog.
AWS CloudTrail / CloudWatch Logs (EKS/ECS)RegisterTaskDefinitioncontainerDefinitions[].pseudoTerminal=true (ECS)Pole pseudoTerminal odpowiada --tty.
M365[nie dotyczy]N/D

Detekcja (praktyczne reguły)

Sigma (Linux/auditd) – zapis do krytycznych procfs z kontenera

title: Linux Procfs Write Indicative of Container Escape (CVE-2025-52565 family)
id: 8c2d8b38-6a6d-4ef0-9c43-52565a01
status: experimental
description: Wykrywa próby zapisu do /proc/sysrq-trigger lub /proc/sys/kernel/core_pattern wykonywane przez procesy działające w cgroupach kontenerowych.
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2025-52565
  - https://github.com/opencontainers/runc/security/advisories/GHSA-qw9x-cqr3-wc7r
logsource:
  product: linux
  service: auditd
detection:
  selection_paths:
    (file.name|endswith):
      - "/proc/sysrq-trigger"
      - "/proc/sys/kernel/core_pattern"
  selection_syscalls:
    syscall|in:
      - open
      - openat
      - creat
      - write
  container_hint:
    cwd|contains:
      - "/docker/"
      - "/kubepods/"
      - "/containerd/"
  condition: selection_paths and selection_syscalls and container_hint
fields:
  - auid
  - exe
  - comm
  - cwd
  - uid
  - saddr
level: high
tags:
  - attack.t1611
  - cve.2025-52565

Splunk (SPL) – auditd → zapisy do procfs z przestrzeni kontenera

index=linux sourcetype=audit*
(| file IN ("/proc/sysrq-trigger","/proc/sys/kernel/core_pattern")
 OR msg IN ("/proc/sysrq-trigger","/proc/sys/kernel/core_pattern"))
 (syscall IN ("open","openat","creat","write"))
 (cwd="*kubepods*" OR cwd="*docker*" OR cwd="*containerd*")
| stats count min(_time) as first_seen max(_time) as last_seen by host exe comm uid file cwd

KQL (Azure/Microsoft Sentinel – Syslog lub AMA)

Syslog
| where ProcessName has_cs "runc" or ProcessName has_cs "containerd" or ProcessName has_cs "dockerd"
| where SyslogMessage has "/proc/sysrq-trigger" or SyslogMessage has "/proc/sys/kernel/core_pattern"
| where SyslogMessage has_any ("open","write","mount")

CloudTrail/CloudWatch Logs Insights – ECS task def z TTY

fields @timestamp, userIdentity.principalId, eventName, requestParameters.containerDefinitions
| filter eventSource = "ecs.amazonaws.com" and eventName="RegisterTaskDefinition"
| filter requestParameters.containerDefinitions like /"pseudoTerminal":\s*true/
| sort @timestamp desc

Elastic / EQL – pliki procfs

file where
  event.action in ("modification","open") and
  file.path in ("/proc/sysrq-trigger","/proc/sys/kernel/core_pattern") and
  process.container.id != null

Heurystyki / korelacje

  • Nowy kontener z TTY (tty: true / pseudoTerminal: true) + w krótkim czasie próby zapisu do procfs.
  • Nietypowe obrazy/źródła (rejestry spoza allowlist) + TTY + privileged: false (brak konieczności bycia privileged → sygnał zaskakujący).
  • Zmiana core_pattern → koreluj z nagłą aktywnością debugerów/potoków na hoście.
  • Seria nieudanych montowań (MS_BIND) z kontekstu runc w tym samym oknie czasowym co tworzenie pody/konternera.

False positives / tuning

  • Automatyka hosta (configuration management) może legalnie modyfikować core_pattern (Ansible/Puppet/sysctl) — zwykle poza cgroupami kontenerów. Whitelistuj znane narzędzia/ścieżki exe.
  • Sesje debug (kubectl exec -it) w środowiskach deweloperskich z TTY — oznacz jako low risk, jeśli obraz i namespace są zaufane.
  • Agreguj tylko z kontenerów (process.container.id != null / ścieżka cgroup).

Playbook reagowania (SOC / Blue Team)

  1. Identyfikacja
    • Alarm z reguł (powyżej) → zapisz host, container_id, image, pod, namespace, user.
    • Sprawdź wersję runtime: runc --version; crictl --version 2>/dev/null; docker info 2>/dev/null | grep -i 'runc\|containerd'
  2. Tymczasowa izolacja
    • K8s: kubectl cordon <node> i kubectl drain <node> --ignore-daemonsets --delete-emptydir-data (jeśli incydent dotyczy węzła).
    • Zatrzymaj/podmroź podejrzane workloady: kubectl delete pod <pod> -n <ns> lub skaluj do zera.
  3. Triage hosta
    • Zweryfikuj core_pattern i artefakty: cat /proc/sys/kernel/core_pattern dmesg --ctime | egrep -i 'sysrq|core_pattern' ausearch -f /proc/sysrq-trigger -ts recent
  4. Łatanie
    • Zaktualizuj runc min. do 1.2.8/1.3.3/1.4.0‑rc.3 (wraz z restartem node). Sprawdź doradztwa dystrybucyjne (Ubuntu/SUSE).
  5. Hardening
    • Włącz polityki: blokuj TTY w prod (OPA Gatekeeper „Disallow Interactive TTY”).
    • Wymuś readOnlyRootFilesystem, seccomp, ograniczenia capabilities, oraz deny‑listy hostPath.
  6. Dowody/raport
    • Zachowaj logi: auditd, kube‑apiserver audit, journald (dockerd/containerd), CloudTrail.
    • IOC: obrazy, digests, namespace, użytkownik/API client.

Przykłady z kampanii / case studies

  • Zbiorcze doradztwa AWS: trzy luki runc (CVE‑2025‑31133/52565/52881) — brak ryzyka cross‑tenant, zalecenia aktualizacji platform zależnych od runc.
  • Analizy branżowe (Sysdig/ARMO): opisują wektory ucieczki przez procfs i praktyczne wskazówki detekcyjne w środowiskach kontenerowych.
  • oss‑sec: ogłoszenie do vendorów o trzech poważnych lukach runc umożliwiających zapis do dowolnych plików /proc i full breakout.

Lab (bezpieczne testy) — przykładowe komendy

Wyłącznie w odizolowanym labie/VM, nie w produkcji. Celem jest weryfikacja detekcji i twardnienia, nie eksploatacja.

  1. Weryfikacja wersji i polityk runc --version kubectl get psp,podsecuritypolicies 2>/dev/null || true
  2. Uruchomienie kontrolowanej pracy z TTY (sygnał do telemetrii) kubectl run tty-demo --image=busybox --restart=Never --tty=true --stdin=true -- sh -c 'sleep 300' # Sprawdź w kube-audit/CloudTrail/ECS czy widać tty/pseudoTerminal=true
  3. Walidacja reguł
    • Sprawdź, czy alerty NIE pojawiają się dla zwykłych kontenerów bez TTY.
    • Zasymuluj „niegroźne” odczyty procfs (bez zapisu), aby upewnić się, że reguły nie generują FP dla read‑only.
  4. Hardening
    • Zastosuj OPA Gatekeeper k8sdisallowinteractivetty i sprawdź blokadę tworzenia podów z tty: true.

Mapowania (Mitigations, powiązane techniki)

  • Mitigations (ATT&CK):
    • M1051 Update Software (aktualizacja runc)
    • M1048 Application Isolation and Sandboxing (seccomp, blokada mount, deny hostPath)
    • M1026 Privileged Account Management (brak root/privileged)
    • M1038 Execution Prevention (read‑only FS, minimalne obrazy)
  • Techniki powiązane: T1068 Exploitation for Privilege Escalation (eksploitacja podatności w celu ucieczki), T1610 Deploy Container (wykorzystywanie specjalnie zbudowanego obrazu).

Źródła / dalsza lektura

  • NVD: opis, zakres, wersje, CVSS, CWE. (NVD)
  • GHSA opencontainers/runc (szczegóły techniczne, patchset, metryki). (GitHub)
  • AWS Security Bulletin (EKS/ECS). (Amazon Web Services, Inc.)
  • Ubuntu CVE tracker (opis dystrybucyjny). (Ubuntu)
  • Sysdig: przegląd i detekcja dla trzech CVE runc. (sysdig.com)
  • ARMO: omówienie skutków i zaleceń. (armosec.io)
  • oss‑sec: zawiadomienie do vendorów. (seclists.org)
  • MITRE ATT&CK T1611 Escape to Host (opis techniki, mitigacje). (MITRE ATT&CK)
  • ECS pseudoTerminal (API). (AWS Documentation)

Checklisty dla SOC / CISO

SOC (operacyjnie):

  • Włącz zbieranie auditd + kube‑audit + dzienniki runtime (docker/containerd) na węzłach.
  • Aktywuj reguły detekcji dla zapisu do /proc/sysrq-trigger i /proc/sys/kernel/core_pattern z kontekstu kontenera.
  • Koreluj tworzenie podów/kontenerów z TTY (tty: true / pseudoTerminal:true).
  • Utrzymuj inventory wersji runc i sygnalizuj wersje < 1.2.8 / 1.3.3 / 1.4.0‑rc.3.
  • Testuj polityki Gatekeeper blokujące TTY w prod.

CISO (strategicznie):

  • Zleć natychmiastowe aktualizacje runc w całym łańcuchu (Docker/containerd/CRI‑O, node AMI).
  • Wymuś standardy bezpieczeństwa kontenerów: brak privileged, brak hostPath do ///proc, seccomp/SELinux, RO‑rootfs.
  • Wprowadź „no‑TTY‑by‑default” w produkcji oraz przegląd wyjątków.
  • Ustal RTO/RPO dla incydentów kontenerowych i gotowość do cordon/drain węzłów.

Status ryzyka: High (CNA CVSS v4 8.4). Zastosuj aktualizacje runc (≥1.2.8/1.3.3/1.4.0‑rc.3) i polityki ograniczające TTY, a także zbieraj telemetrię z hostów i warstwy orkiestracji do korelacji zdarzeń.

LPI Security Essentials (Moduł 022.1) – Hash Vs Szyfrowanie

Zanim zaczniesz

Ten artykuł jest częścią serii „Bezpłatny Kurs LPI Security Essentials, w ramach której znajdziesz wszystko, co potrzeba, aby zdać egzamin LPI Security Essentials 020-100 już za pierwszym razem.

Każdy moduł zawiera praktyczne przykłady, wyjaśnienia i materiały pomocnicze – wszystko po polsku, zrozumiale i konkretnie.

Czytaj dalej „LPI Security Essentials (Moduł 022.1) – Hash Vs Szyfrowanie”

Mechanizmy Blokady Konta Po Błędnych Logowaniach

Czy Twoja aplikacja blokuje konto po serii błędnych logowań?

Mechanizmy blokady konta chronią przed atakami brute force i credential stuffing – czyli przed masowym zgadywaniem haseł lub testowaniem przejętych poświadczeń. W tym artykule omówimy różne rodzaje blokad (tymczasowe, stałe, z opóźnieniem), przytoczymy zalecenia standardów bezpieczeństwa (OWASP, NIST), a także pokażemy przykłady implementacji przy użyciu popularnych narzędzi (m.in. Keycloak, Spring Security, Redis, NGINX). Całość uzupełnimy o najczęstsze błędy, OWASP ASVS, kontekst API Security oraz techniczną checklistę i CTA dla inżynierów, abyś mógł od razu zastosować zdobytą wiedzę w praktyce. Bez zbędnej teorii – skupiamy się na konkretach, tak jak na SecurityBezTabu.pl przystało.

Czytaj dalej „Mechanizmy Blokady Konta Po Błędnych Logowaniach”

Cisco łata krytyczne luki w Unified Contact Center Express (UCCX): RCE i eskalacja uprawnień

Wprowadzenie do problemu / definicja luki

Cisco opublikowało poprawki usuwające dwie krytyczne podatności w Unified Contact Center Express (UCCX), które umożliwiają zdalne wykonanie kodu (RCE) oraz podniesienie uprawnień nawet do root. Luki oznaczono jako CVE-2025-20354 (CVSS 9.8) oraz CVE-2025-20358 (CVSS 9.4). Naprawione wersje to UCCX 12.5 SU3 ES07 oraz UCCX 15.0 ES01. Cisco jednocześnie załatało poważny błąd DoS w Cisco ISE (CVE-2025-20343, CVSS 8.6). Na moment publikacji producent nie raportuje wykorzystywania tych luk w naturze.

W skrócie

  • Co się dzieje? Dwie krytyczne luki w UCCX: zdalny upload plików i wykonanie komend przez Java RMI (CVE-2025-20354) oraz obejście uwierzytelniania w CCX Editor prowadzące do wykonania skryptów i eskalacji (CVE-2025-20358).
  • Wpływ: pełne przejęcie serwera UCCX, możliwość lateral movement w sieci call center.
  • Łatki: zaktualizuj do 12.5 SU3 ES07 albo 15.0 ES01 (brak obejść).
  • Dodatkowo: łatka DoS dla Cisco ISE (CVE-2025-20343) – restart przez sekwencję żądań RADIUS.

Kontekst / historia / powiązania

Informacja pojawiła się 6 listopada 2025 r. (ET) i wpisuje się w intensywny okres biuletynów Cisco – firma równolegle ostrzegła o nowym wariancie ataków na wcześniej łatane firewalle ASA/FTD. Dla zespołów SOC oznacza to potrzebę skoordynowanego wdrożenia poprawek w kilku produktach jednocześnie.

Analiza techniczna / szczegóły luki

CVE-2025-20354 – RCE przez Java RMI (CVSS 9.8)

  • Wektor: nienadzorowane mechanizmy uwierzytelniania powiązane z wybranymi funkcjami UCCX umożliwiają upload spreparowanego pliku przez proces Java RMI, a następnie wykonanie komend z uprawnieniami root.
  • Autentykacja: nie wymagana (atak zdalny).
  • Skutek: pełne przejęcie hosta UCCX.

CVE-2025-20358 – obejście uwierzytelniania w CCX Editor (CVSS 9.4)

  • Wektor: błędne mechanizmy uwierzytelniania w komunikacji między CCX Editor a serwerem UCCX pozwalają przekierować przepływ do złośliwego serwera i „wmówić” Editorowi, że logowanie się powiodło.
  • Skutek: atakujący może tworzyć i wykonywać skrypty na systemie UCCX jako wewnętrzny użytkownik (non-root); w praktyce często prowadzi to do dalszej eskalacji.

Uwaga: obie luki są niezależne – wykorzystanie jednej nie jest warunkiem drugiej.

Cisco ISE – CVE-2025-20343 (CVSS 8.6)

  • Wektor: błąd logiki (CWE-697) przy obsłudze żądań RADIUS dla MAC wcześniej oznaczonego jako odrzucony; seria spreparowanych żądań powoduje restart ISE (DoS).

Praktyczne konsekwencje / ryzyko

  • Ryzyko operacyjne: unieruchomienie lub kompromitacja platformy contact center (IVR, routingi, integracje z CRM), przerwy w obsłudze klientów, możliwe wycieki danych rozmów/metrystyk.
  • Ryzyko security: po przejęciu UCCX – ruch boczny do systemów głosowych/CRM, implanty trwałości, eskalacja do kont domenowych używanych przez integracje.
  • Zasięg: UCCX jest powszechny w małych i średnich wdrożeniach (do ~400 agentów), co zwiększa ekspozycję.

Rekomendacje operacyjne / co zrobić teraz

Aktualizacje (priorytet 1):

  1. UCCX: natychmiast podnieść do 12.5 SU3 ES07 lub 15.0 ES01. Brak znanych obejść.
  2. Cisco ISE: zainstalować wersje usuwające CVE-2025-20343; zweryfikować polityki RADIUS (zwł. „Reject requests from clients with repeated failures”).

Kontrole detekcyjne (priorytet 2):

  • Monitoruj połączenia do portów RMI/JRMP (typowo 1099/1100-1199) z nietypowych adresów; alertuj nietypowe transfery plików przez RMI.
  • Szukaj anomalii CCX Editor: nagłe próby edycji/skryptów spoza zaufanych stacji administracyjnych; koreluj z logami sieciowymi (proxy/DNS) wskazującymi przekierowanie do obcych hostów.
  • Na hostach UCCX audytuj tworzenie/wykonywanie skryptów oraz nowe pliki binarne w katalogach roboczych UCCX/Editor. (Na podstawie opisanych wektorów w biuletynach.)

Twardnienie (priorytet 3):

  • Ogranicz zaufane źródła administracji CCX Editor (segregacja VLAN, ACL, jump hosty).
  • Segmentuj serwery UCCX od reszty sieci użytkowników i od systemów głosowych/CRM; egzekwuj TLS/MTLS tam, gdzie dostępne.
  • W ISE – rozważ tymczasowe zabezpieczenia polityk RADIUS (rate-limit, kontrola źródeł, korekty polityk dla MAC „rejected”) do czasu pełnego patchowania.

Różnice / porównania z innymi przypadkami

  • W przeciwieństwie do niedawnych ataków na zapory ASA/FTD (gdzie obserwujemy aktywne, ewoluujące warianty exploitów), w przypadku UCCX nie potwierdzono jeszcze exploitów „in the wild”. Jednak z uwagi na brak uwierzytelniania dla CVE-2025-20354, oczekuj szybkiej próby weaponizacji.

Podsumowanie / kluczowe wnioski

  • Dwie krytyczne luki w UCCX (CVE-2025-20354, CVE-2025-20358) umożliwiają RCE i eskalację uprawnień.
  • Aktualizacje do 12.5 SU3 ES07 / 15.0 ES01pilne; brak obejść.
  • Równolegle załataj Cisco ISE (CVE-2025-20343) i wzmocnij monitoring RMI oraz anomalii w CCX Editor.

Źródła / bibliografia

  • SecurityWeek: „Cisco Patches Critical Vulnerabilities in Contact Center Appliance” (06.11.2025). (SecurityWeek)
  • Cisco PSIRT: „Cisco Unified Contact Center Express Remote Code Execution Vulnerabilities – cisco-sa-cc-unauth-rce-QeN8h7mQ”. (sec.cloudapps.cisco.com)
  • NVD (NIST): wpis CVE-2025-20358 (CCX Editor – auth bypass & script execution). (NVD)
  • The Hacker News: omówienie i wersje naprawcze UCCX + wzmianka o ISE. (The Hacker News)
  • Qualys ThreatProtect: podsumowanie techniczne + wersje naprawcze. (threatprotect.qualys.com)

CVE-2012-1889 — MSXML Uninitialized Memory Corruption

TL;DR

  • CVE‑2012‑1889 to podatność RCE w Microsoft XML Core Services 3.0/4.0/5.0/6.0 (MSXML) wyzwalana przez przeglądarkę/ActiveX — masowo wykorzystywana w kampaniach watering‑hole (drive‑by).
  • Realistyczne mapowanie do ATT&CK: T1189 (wejście przez stronę), T1203 (eksploatacja klienta), T1204.001 (kliknięcie w link).
  • Detekcja: korelacja dziecko procesu iexplore.exe/Office ⇒ cmd.exe/powershell.exe/mshta.exe/rundll32.exe, ładowanie msxml*.dll, artefakty proxy/IDS (sygnatury CVE‑2012‑1889).
  • Priorytet: systemy z MSXML 4.0 (EoL) i legacy IE; podatność jest w CISA KEV — traktuj jako must‑patch.
  • Remediacja: MS12‑043 + usunięcie MSXML 4.0; krótkoterminowo (historycznie) „Fix it” blokował CLSID/ActiveX.

Krótka definicja techniczna

CVE‑2012‑1889 to błąd niezainicjalizowanego dostępu do pamięci w MSXML (klasa use‑after‑free), który podczas wywołań API obiektów DOM/ActiveX (np. getDefinition / get_definition) pozwala złośliwej stronie WWW doprowadzić do zdalnego wykonania kodu w kontekście użytkownika. Najczęściej exploit był dostarczany przez IE (ActiveX) w scenariuszu drive‑by lub jako zawartość dokumentów Office (MSXML5).


Gdzie występuje / przykłady platform

  • Windows (klient/VDI/serwery terminalowe) – Internet Explorer/ActiveX, MSXML 3/4/6 w systemie; MSXML 5 w Office 2003/2007.
  • Active Directory środowiska korporacyjne – wektory przez stacje użytkowników domenowych (przeglądarka).
  • M365/Exchange/SharePoint (historycznie) – dokumenty/komponenty wykorzystujące MSXML5.
  • Chmury (AWS/Azure/GCP) – wektorem jest klient użytkownika; payloady bywały hostowane na serwerach/obiektach web/S3 (telemetria proxy/CloudTrail pomocna, ale sama podatność nie dotyczy usług chmurowych).
  • ESXi/K8snie dotyczy bezpośrednio (klient‑side).

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

MSXML udostępnia obiekty COM/ActiveX do pracy z XML (DOM/SAX/XMLHTTP). W podatnych wersjach wywołanie metod na niezainicjalizowanym węźle mogło skutkować korupcją pamięci (UAF) i przekierowaniem sterowania do shellcode (typowo po heap‑sprayu). Atakujący osadzali kod w zainfekowanych stronach („watering‑hole”), iframe’ach lub reklamach (malvertising). Mechanizm działał bez dodatkowej interakcji poza odwiedzeniem strony (lub kliknięciem linku) i był aktywnie wykorzystywany przed poprawką (zero‑day); Microsoft opublikował tymczasowy „Fix it” oraz finalny biuletyn MS12‑043 z łatami dla MSXML 3/4/5/6.

Dlaczego skuteczne: powszechność MSXML/IE w tamtym okresie, niski próg aktywacji (wizyta na stronie), możliwość obejścia zabezpieczeń przeglądarki (wówczas). Kampanie Elderwood i VOHO używały m.in. tego CVE w łańcuchach SWC (strategic web compromise).


6) Artefakty i logi

ŹródłoArtefakt / poleCo szukaćUwagi
Sysmon EID 1/ProcessCreateParentImage=iexplore.exe/winword.exe/excel.exe/powerpnt.exe; Image w {cmd.exe,powershell.exe,mshta.exe,wscript.exe,cscript.exe,rundll32.exe,regsvr32.exe,bitsadmin.exe,certutil.exe}Dziecko procesu po renderowaniu treści/ActiveXTypowy post‑exploit (payload).
Sysmon EID 7/ImageLoadedImageLoaded ~ \msxml*.dllŁadowanie biblioteki MSXML w kontekście przeglądarki/OfficeKoreluj z EID 1.
Sysmon EID 11/FileCreateTworzenie plików w %TEMP%, %APPDATA% po wizycie na stronieWskaźnik droppera
Security 4688Tworzenie procesu (Windows)Lustrzane do Sysmon EID 1
WFP 5156 / ProxyPołączenia HTTP(S) do nieznanych domen bezpośrednio po wizycie na stronie; UA zaw. MSIE/TridentKorelacja czasu/Referrer
Aplikacja 1000/1001Błędy IE/wyjątkiCzasem towarzyszą RCE
IDS/IPS/WAFSygnatury „MSIE MSXML CVE‑2012‑1889”Trafienia podczas wizyty na stroniePrzykładowa sygnatura Broadcom.
CloudTrailNie dotyczy (klient‑side). Możliwa analiza S3 GetObject jako źródła payloadu.Patrz sekcja 7 (zapytanie pomocnicze).
K8s auditNie dotyczy
M365 Unified AuditNie dotyczy

Detekcja (praktyczne reguły)

Sigma (Windows / process_creation)

title: Suspicious Child from IE/Office After MSXML Rendering (CVE-2012-1889 Context)
id: 9f9f0f3e-7a4c-4c4b-9e1b-1889cve-msxml
status: experimental
description: Wykrywa potencjalny post-exploit po drive-by (IE/Office → LOLBIN/skr. interpretery)
author: Badacz CVE
date: 2025/11/05
logsource:
  category: process_creation
  product: windows
detection:
  parent_browsers:
    ParentImage|endswith:
      - '\iexplore.exe'
      - '\winword.exe'
      - '\excel.exe'
      - '\powerpnt.exe'
  suspicious_children:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\mshta.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\rundll32.exe'
      - '\regsvr32.exe'
      - '\bitsadmin.exe'
      - '\certutil.exe'
  condition: parent_browsers and suspicious_children
fields:
  - CommandLine
  - ParentCommandLine
  - Image
  - ParentImage
  - User
falsepositives:
  - Dodatki/plug-iny Office, instalatory/dystrybutory oprogramowania
level: high
references:
  - https://learn.microsoft.com/en-us/security-updates/securitybulletins/2012/ms12-043
  - https://nvd.nist.gov/vuln/detail/CVE-2012-1889

(MS12‑043/NVD potwierdzają kontekst RCE klienta; reguła celuje w fazę po‑eksploatacyjną.)

Splunk (Sysmon)

index=endpoint sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
| eval parent=lower(coalesce(ParentImage,ParentProcessName))
| eval child=lower(Image)
| search parent IN ("*\\iexplore.exe","*\\winword.exe","*\\excel.exe","*\\powerpnt.exe")
| search child IN ("*\\cmd.exe","*\\powershell.exe","*\\mshta.exe","*\\wscript.exe","*\\cscript.exe","*\\rundll32.exe","*\\regsvr32.exe","*\\bitsadmin.exe","*\\certutil.exe")
| table _time, Computer, User, ParentImage, CommandLine, Image, ParentCommandLine

KQL (Microsoft 365 Defender)

let parents = dynamic(["iexplore.exe","winword.exe","excel.exe","powerpnt.exe"]);
let children = dynamic(["cmd.exe","powershell.exe","mshta.exe","wscript.exe","cscript.exe","rundll32.exe","regsvr32.exe","bitsadmin.exe","certutil.exe"]);
DeviceProcessEvents
| where Timestamp > ago(7d)
| where InitiatingProcessFileName in~ (parents)
| where FileName in~ (children)
| join kind=leftsemi (
    DeviceImageLoadEvents
    | where FileName startswith_cs "msxml" // korelacja ładowania MSXML
) on DeviceId, InitiatingProcessId
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine, InitiatingProcessCommandLine, AccountName

CloudTrail Lake (pomocniczo: hostowanie payloadu na S3/CloudFront)

Uwaga: sama podatność jest kliencka; to zapytanie pomaga znaleźć źródła plików potencjalnie serwujące exploity/payloady do przeglądarek użytkowników (np. S3/public bucket).

SELECT eventTime, userAgent, sourceIPAddress,
       requestParameters.key AS object_key, recipientAccountId
FROM   $EDS
WHERE  eventSource = 's3.amazonaws.com'
  AND  eventName = 'GetObject'
  AND  (userAgent LIKE '%MSIE%' OR userAgent LIKE '%Trident/%')
  AND  (object_key LIKE '%.hta' OR object_key LIKE '%.js' OR object_key LIKE '%.cab' OR object_key LIKE '%.dll' OR object_key LIKE '%.exe')
ORDER BY eventTime DESC
LIMIT 200;

Elastic / EQL

process where event.type == "start" and
  process.parent.name in ("iexplore.exe","winword.exe","excel.exe","powerpnt.exe") and
  process.name in ("cmd.exe","powershell.exe","mshta.exe","wscript.exe","cscript.exe","rundll32.exe","regsvr32.exe","bitsadmin.exe","certutil.exe")

Heurystyki / korelacje

  • Sekwencja czasu: wizyta na stronie (proxy) → iexplore.exe ładuje msxml*.dll (EID 7) → proces‑dziecko LOLBIN/script engine (EID 1) → plik w %TEMP% (EID 11).
  • Punkt ciężkości: hosty z MSXML 4.0 (brak wsparcia, duże ryzyko), legacy IE/tryb kompatybilności.
  • Źródło payloadu: domeny niedawno zarejestrowane/CDN‑y/obiekty S3 z publicznym dostępem (UA MSIE/Trident).
  • Proxy + IDS: trafienie sig. „MSIE MSXML CVE‑2012‑1889” + korelacja z pobraniem pliku i uruchomieniem dziecka przeglądarki.

False positives / tuning

  • Prawdziwe aktualizatory/instalatory wywołujące skrypty z aplikacji Office/IE (rzadkie dziś, ale możliwe w środowiskach legacy).
  • Dodatki Office/COM mogą sporadycznie tworzyć procesy pomocnicze — ogranicz listę do „red flag” (mshta, wscript, cscript, rundll32 z nietypowymi argumentami).
  • Warunek czasowy i kierunek: ucinaj FP, jeśli brak poprzedzającego ruchu web lub brak ładowania msxml*.dll.
  • Rozważ listy wyjątków dla znanych ścieżek podpisanych instalatorów.

Playbook reagowania (IR)

  1. Triage & izolacja: odłącz host (EDR isolate), zapisz pamięć RAM/dysk jeśli to możliwe.
  2. Szybkie KQL/Splunk: wyszukaj łańcuch parent browser/Office → LOLBIN/script engine (zapytania z sekcji 7).
  3. Inwentaryzacja MSXML (PowerShell, tylko w labie/IR): gci "$env:WINDIR\System32" -Filter "msxml*.dll" | Select Name, @{n='Version';e={(Get-Item $_.FullName).VersionInfo.FileVersion}}
  4. Zabij procesy / usuń artefakty: taskkill /IM iexplore.exe /F; zidentyfikuj pliki z %TEMP%/%APPDATA% powiązane czasowo, Get-FileHash.
  5. Blokada źródeł: domeny/URL z proxy/EDR; jeżeli payload z S3 — zablokuj bucket/klucz na bramie.
  6. Łatanie: wdroż MS12‑043 (KB2719985, KB2721691, KB2596856/KB2687497 dla MSXML5/Office) oraz usuń MSXML 4.0 (EoL).
  7. Hunting retrospektywny (7–30 dni): sprawdź podobne sekwencje, zbieżne domeny, UA MSIE.
  8. Lessons learned: egzekwuj politykę „remove legacy ActiveX/MSXML4”, wymuś modernizację przeglądarek.

Przykłady z kampanii / case studies

  • Elderwood Project (2012) — łańcuch watering‑hole wykorzystujący m.in. CVE‑2012‑1889 obok CVE‑2012‑1875/CVE‑2012‑0779. Raport Symantec dokumentuje listę zerodayów i modus operandi.
  • VOHO / RSA FirstWatch — kompromitacje stron branżowych z przekierowaniami do exploitów, m.in. XML Core Services (CVE‑2012‑1889).
  • Zscaler (2013) — obserwacje, że exploity na CVE‑2012‑1889 „wciąż żyją” w dzikich kampaniach (obfuskowane strony dla graczy).

Lab — przykładowe komendy

Wyłącznie w izolowanym labie. Nie używamy exploitów. Celem jest wygenerowanie telemetrii odpowiadającej post‑eksploitowi (T1189/T1203/T1204.001), aby zweryfikować reguły.

  1. Atomic Red Team (Invoke‑Atomic) # Przygotowanie Set-ExecutionPolicy Bypass -Scope Process -Force iwr https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/install.ps1 -UseB -OutFile install.ps1 .\install.ps1 # Przykładowe atomiki pokrewne (execution / user execution) Invoke-AtomicTest T1204.002 -ShowDetails # Malicious File (bezpieczne warianty) Invoke-AtomicTest T1204.002 -TestNumbers 1 Zweryfikuj, że reguły z sekcji 7 wyłapują procesy potomne/LOLBIN‑y.
  2. Symulacja post‑eksploatacyjna z przeglądarki
    • Uruchom iexplore.exe (w labie) i ręcznie uruchom benigny proces (np. notepad.exe) z EDR console lub skryptu testowego, aby zasymulować „dziecko przeglądarki”.
    • Potwierdź, że Sysmon EID 1 + korelacja z EID 7 (ładowanie msxml*.dll jeśli środowisko ładuje biblioteki) wyzwala alert.

Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK Enterprise):

  • M1051 — Update Software (łatanie MSXML/IE/Office).
  • M1042 — Disable or Remove Feature or Program (usunąć MSXML 4.0, wyłączyć ActiveX/nieużywane komponenty).
  • M1021 — Restrict Web‑Based Content (URL filtering, blokada typów plików/iframe/legacy UA).
  • M1031 — Network Intrusion Prevention (IDS/IPS sygnatury dla znanych exploitów/payloadów).

Powiązane techniki ATT&CK:

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

Źródła / dalsza literatura

  • Microsoft Security Bulletin MS12‑043 – szczegóły poprawki, produkty i KB. (Microsoft Learn)
  • Microsoft Security Advisory 2719615 – opis podatności i „Fix it”. (Microsoft Learn)
  • NVD: CVE‑2012‑1889 – opis, CVSS, wpis w CISA KEV. (NVD)
  • ESET / WeLiveSecurity – analiza techniczna (UAF, get_definition). (We Live Security)
  • Symantec: The Elderwood Project – kampanie watering‑hole, lista CVE (w tym 2012‑1889).
  • Krebs on Security – VOHO/watering‑hole z wykorzystaniem CVE‑2012‑1889. (Krebs on Security)
  • Broadcom/Symantec – sygnatura IDS „MSIE MSXML CVE‑2012‑1889”. (Broadcom)
  • ATT&CK techniki – T1189 / T1203 / T1204.001 (wersje i daty modyfikacji). (MITRE ATT&CK)

15) Checklisty dla SOC / CISO (krótko)

SOC (operacyjnie):

  • Włącz i zbieraj Sysmon (EID 1/3/7/11/13) + Security 4688/5156; korelacje parent‑child (IE/Office → LOLBIN).
  • Monitoruj ładowanie msxml*.dll w kontekście przeglądarki/Office.
  • Reguły na UA MSIE/Trident + pobrania .hta/.js/.cab/.dll/.exe i referrery do iFrame.
  • IDS/IPS/WAF – aktywne sygnatury dla CVE‑2012‑1889.
  • Prowadź threat hunting za okres przed‑ i po‑patchu (MS12‑043).

CISO (strategicznie):

  • Usuwanie MSXML 4.0 i wyłączenie ActiveX w środowisku (jeśli jeszcze obecne).
  • Wymuszenie łatek MS12‑043 (compliance), weryfikacja zgodności na hostach VDI/TS.
  • Polityka Restrict Web‑Based Content (URL filtering, blokada rzadkich typów).
  • Program NIDS/NIPS (M1031) oraz telemetria proxy z korelacją do endpointów.
  • Regularne testy z Atomic Red Team (kontrola pokrycia detekcji).

Uwagi końcowe: CVE‑2012‑1889 jest starszą, ale dobrze udokumentowaną podatnością z bogatą historią realnych nadużyć. Nawet dziś bywa przydatna do huntingu retro oraz do budowy uniwersalnych detekcji post‑exploit po Drive‑by Compromise. W praktyce kluczowe są: łatanie (MS12‑043), eliminacja komponentów legacy (MSXML4/ActiveX) oraz korelacje telemetryjne opisane wyżej.

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.