Wojciech Ciemski, Autor w serwisie Security Bez Tabu - Strona 427 z 465

CVE‑2025‑31133 – luka w runc poprzez nadużycie maskedPaths i wyścig montowania

TL;DR

CVE‑2025‑31133 to luka w runc umożliwiająca ucieczkę z kontenera poprzez nadużycie maskedPaths i wyścig montowania. Skutkiem jest możliwość zapisu do wybranych plików /proc hosta w trakcie startu kontenera. Traktujemy to jako zachowanie odpowiadające technice ATT&CK T1611 (Escape to Host). Łatki: runc 1.2.8, 1.3.3 (i 1.4.0‑rc.3). W chmurze dostawcy (np. AWS) odnotowali brak ryzyka „cross‑tenant” i wypchnęli zaktualizowane obrazy/runtime. Priorytet: wysoki – pilne aktualizacje + detekcje operacji na /proc i anomalii montowania.


Krótka definicja techniczna

CVE‑2025‑31133: luka w runc (runtime OCI) polegająca na niewystarczającej weryfikacji źródła bind‑mountu używanego do maskowania plików (maskedPaths). Podmiana /dev/null na dowiązanie symboliczne do wybranego pliku w procfs pozwala doprowadzić do RW‑mountu docelowego pliku /proc i obejść izolację kontenera, co praktycznie realizuje T1611 Escape to Host.


Gdzie występuje / przykłady platform

  • Linux hosty używające: containerd, CRI‑O, Docker (pod spodem runc). Dotyczy środowisk bare‑metal i VM.
  • Kubernetes (K8s): AKS/AKS‑on‑prem, EKS, GKE oraz własne klastry – podczas tworzenia/uruchamiania podów/kontenerów.
  • AWS: EKS/ECS – AWS wydał biuletyn, zaktualizował AMI/ECS i wskazał brak ryzyka cross‑customer.
  • Azure/GCP: klastry AKS/GKE (runtime z runc); aktualizacje dystrybucyjne. [Brak specyficznej luki w usługach pakietu M365/AD].
  • ESXi/Windows: sama luka dotyczy runc (Linux), natomiast T1611 formalnie obejmuje również VM/ESXi/Windows jako platformy techniki na poziomie ATT&CK (nie w kontekście tego konkretnego CVE).

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

T1611 – Escape to Host opisuje działania prowadzące do wyjścia poza izolację kontenera/VM w celu uzyskania dostępu do hosta. W przypadku CVE‑2025‑31133 vektor opiera się o błąd w maskedPaths (OCI). W czasie startu kontenera runc bind‑mountuje /dev/null na wybrane ścieżki, by je „zamaskować”. Brak twardej weryfikacji inoda /dev/null umożliwiał podstawienie symlinku do kontrolowanego pliku /proc i spowodowanie RW‑mountu tego pliku – co otwierało możliwość zapisu do wybranych kontrolnych plików procfs i eskalacji poza granice kontenera. To wpisuje się w katalog przypadków, w których nadużycie montowań/namespace’ów prowadzi do ucieczki (T1611).


Artefakty i logi (SOC)

Warstwa / źródłoCo obserwowaćPrzykładowe pola / zdarzeniaUwaga
Linux auditd / eBPFSyscall mount z opcją MS_BIND na ścieżki pod /proc//dev podczas startu kontenera; próby open/write do /proc/SYSCALL=mount, rekordy PATH z name=/proc/...; exe=/usr/bin/runc / containerd-shim; eBPF: mount, openat(O_WRONLY) na /proc/sys/*Wysoka wartość korelacji z chwilą tworzenia kontenera
Journald / daemonLogi runc/containerd/CRI‑O przy tworzeniu zadań, błędy montowaniarunc[...], containerd: CreateTask, crio: Running containerWłącz poziom info/debug w labie
Kubernetes Auditverb=create/update dla pods/deployments + podejrzane securityContext lub hostPath do /proc, /sys, /devrequestObject.spec.volumes[].hostPath.path, securityContext.privileged=true, hostPID=trueHeurystyka – nie każda taka konfiguracja to atak
CloudTrail (ECS)RegisterTaskDefinition, RunTask, UpdateService ze znacznikami privileged=true, host-mounty do /proc//dev, readonlyRootFilesystem=falseeventSource=ecs.amazonaws.com, requestParameters.containerDefinitionsDla EKS użyj K8s Audit Logs / CloudWatch logów kontrol‑plane
K8s Node / cgroupNietypowe procesy poza namespaces, nowe monty na hoście tuż po starcie poda/proc/self/mountinfo, nsenter ślady, wpisy w dmesgWspomagaj eBPF do obserwacji

Źródła ogólne dot. T1611 (platformy, taktyka, detekcje) oraz CVE‑2025‑31133 (opis i wydania) potwierdzają powyższe artefakty.


Detekcja (praktyczne reguły)

Sigma — Linux auditd (wykrycie podejrzanych bind‑mountów do /proc w trakcie startu kontenera)

title: Suspicious Bind-Mount To /proc During Container Start (CVE-2025-31133 aligned)
id: 2dc7b2d7-7c3a-4f1c-9e4c-31133a01
status: experimental
description: Detects runc/containerd bind-mounts targeting /proc paths (maskedPaths abuse pattern)
logsource:
  product: linux
  service: auditd
detection:
  sel_syscall:
    syscall: mount
  sel_bind:
    a2|contains: "MS_BIND"
  sel_path_proc:
    name|startswith: "/proc/"
  sel_proc:
    exe|endswith:
      - "/runc"
      - "/containerd-shim"
      - "/crio"
  condition: sel_syscall and sel_bind and sel_path_proc and sel_proc
fields:
  - exe
  - comm
  - pid
  - uid
  - name
  - cwd
falsepositives:
  - legalne agenty monitoringu montujące /proc read-only (np. node-exporter)
level: high
tags:
  - attack.t1611

Uwaga: składnia pól a*/name jest zależna od formatu eksportu auditd; w razie potrzeby dostosuj parser. Reguła jest heurystyczna – celem jest sygnał do korelacji. (Patrz też ATT&CK Detection Strategy for Escape to Host).

Splunk (Linux auditd / journald)

(index=linux_audit OR index=syslog)
| eval msg=coalesce(_raw,message)
| regex msg="(SYSCALL=mount| mount\\s)"
| search msg="/proc/" msg="bind" (msg="/usr/bin/runc" OR msg="containerd-shim" OR msg="crio")
| stats count min(_time) as first_seen max(_time) as last_seen by host, process, pid, user
| where count>0

KQL (Azure, AKS – Kubernetes Audit)

KubeAudit
| where verb in ("create","update")
| where objectRef.resource in ("pods","deployments","daemonsets")
| where tostring(requestObject.spec.securityContext.privileged) =~ "true"
   or tostring(requestObject.spec.hostPID) =~ "true"
   or array_length(requestObject.spec.volumes) > 0
| extend hostPath = pack_array(requestObject.spec.volumes)
| where tostring(hostPath) has_any ("/proc","/sys","/dev")
| project TimeGenerated, userAgent, user=username, objectRef, requestObject

(Por. matryca Containers i detekcje T1611).

CloudTrail (AWS CloudWatch Logs Insights – ECS)

fields @timestamp, eventName, userIdentity.arn, requestParameters
| filter eventSource="ecs.amazonaws.com"
| filter eventName in ["RegisterTaskDefinition","RunTask","UpdateService"]
| filter requestParameters like /"privileged":\s*true/ 
    or requestParameters like /"readonlyRootFilesystem":\s*false/
    or requestParameters like /\/proc|\/dev/
| sort @timestamp desc

(AWS doręczył zaktualizowane AMI/zmiany w ECS – mimo to monitoruj definicje zadań).

Elastic / EQL (Linux – zapisy do /proc/sys z przestrzeni kontenera)

file where event.type == "change" and
  file.path like "/proc/sys/%" and
  process.name not in ("systemd-sysctl","sysctl") and
  process.executable in ("/usr/bin/runc","/usr/bin/python3","/usr/bin/bash","/bin/bash","/usr/bin/sh")

(Wspiera korelację z innymi sygnałami T1611).


Heurystyki / korelacje

  • Łańcuch zdarzeń: Pod/Task create ⟶ nietypowe monty /proc//dev ⟶ zapis do /proc/sys/* ⟶ procesy na hoście poza namespaces. Korelować w oknie ±60 s od startu kontenera.
  • Konfiguracja ryzykowna: privileged=true, hostPID=true, hostPath do / lub /proc. To nie jest exploit sam w sobie, ale zwiększa powierzchnię ataku.
  • U dostawców chmurowych: sprawdzaj automatyczne roll‑outy AMI/agentów runtime; brak „cross‑tenant” ≠ brak ryzyka węzła.

False positives / tuning

  • Agenty monitoringu (Node Exporter, Falco, EDR dla K8s) montujące /proc ReadOnly.
  • Zadania administracyjne/serwisowe (diagnoza jądra) mogą chwilowo dotykać mount//proc/sys.
  • Tuning: whitelista namespace’ów (kube-system, monitoring), obrazy podpisane, etykiety DaemonSet’ów, procesy znanych agentów; thresholding na liczbę i typ modyfikowanych plików /proc.

Playbook reagowania (IR)

Cel: szybkie odseparowanie ryzyka, walidacja wersji runc, aktualizacja oraz łowienie śladów ewentualnego wyjścia na hosta.

  1. Triaga i izolacja
  • Zidentyfikuj node z alertu; na K8s: kubectl cordon <node> && kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
  • Wstrzymaj harmonogramowanie nowych zadań (ECS deployment pause / K8s scale 0 dla krytycznych workloadów).
  1. Walidacja wersji runtime
runc --version || rpm -q runc || dpkg -l | grep -E '^ii\s+runc'
containerd --version && crictl --version

Sprawdź czy ≥ 1.2.8/1.3.3 (lub 1.4.0‑rc.3).

  1. Łowy (host)
  • Przejrzyj świeże monty: grep proc /proc/self/mountinfo
  • Szukaj zapisów do /proc/sys/* w ostatnich minutach (auditd/eBPF).
  • Sprawdź procesy poza namespaces kontenera.
  1. Łowy (control plane)
  • K8s Audit: create/update z privileged=true/hostPath do /proc|/dev.
  • ECS/CloudTrail: RegisterTaskDefinition/RunTask z privileged=true, readonlyRootFilesystem=false.
  1. Remediacja
  • Aktualizacja runc przez repo dystrybucji (RHEL/Ubuntu/SUSE publikują advisories).
  • Restart usług containerd/crio/docker; rollout nowych Podów/Tasków.
  • Wymuś polityki: Pod Security Standards, brak privileged, brak hostPID i niepotrzebnych hostPath.
  1. Po incydencie
  • Rotacja sekretów używanych na node (jeśli istnieją oznaki wyjścia na hosta).
  • Hardening: seccomp/apparmor/SELinux profili i read‑only rootfs.

Przykłady z kampanii / case studies

  • Upstream disclosure (listy oss‑sec, 5–7 listopada 2025): opis trzech podatności runc umożliwiających pełne ucieczki przez zapisy do /proc. Wskazano, że realna dotkliwość w środowiskach Docker/K8s może być postrzegana jako wyższa niż „perspektywa runc”.
  • AWS bulletin: automatyczne działania (nowe AMI/placement zadań), brak ryzyka cross‑customer.
  • ATT&CK – przykłady procedur T1611: TeamTNT i inne przypadki nadużyć prowadzących do eskalacji na hosta (historycznie, różne wektory).

Lab (bezpieczne testy) — przykładowe komendy

Wyłącznie w odizolowanym labie/VM! Celem jest walidacja detekcji, nie odtwarzanie exploita.

  1. Obserwacja zdarzeń mount (auditd)
sudo auditctl -D
sudo auditctl -a always,exit -F arch=b64 -S mount -k mounts_monitor
# akcja testowa: nieszkodliwy bind-mount w /tmp (na hoście)
sudo mkdir -p /tmp/lab && sudo mount -o bind /proc /tmp/lab
sudo ausearch -k mounts_monitor | aureport -f
sudo umount /tmp/lab
  1. K8s – test heurystyki politycznej (hostPath RO)
apiVersion: v1
kind: Pod
metadata: { name: lab-hostpath-ro, namespace: default }
spec:
  containers:
  - name: sleeper
    image: alpine
    command: ["sh","-c","sleep 600"]
    volumeMounts:
    - name: hostproc
      mountPath: /host_proc
      readOnly: true
  volumes:
  - name: hostproc
    hostPath: { path: /proc, type: Directory }

Zastosuj kubectl apply -f ... i sprawdź, czy logika z sekcji 7 (KQL/Sigma na K8s Audit) generuje sygnał.
(Nie wykonuj zapisów do /proc; to test konfiguracji, nie eksploatacji).

  1. Weryfikacja wersji – sprawdź, że runtime ≧ wersje z poprawkami (sekcja 10).

Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK):

  • M1048 – Application Isolation & Sandboxing (seccomp ograniczający mount, PSS w K8s).
  • M1038 – Execution Prevention (read‑only kontenery, minimalne obrazy, SELinux/AppArmor).
  • M1026 – Privileged Account Management (zakaz privileged, brak root‑a by default).
  • M1042 – Disable or Remove Feature or Program (usuwanie zbędnych narzędzi).
  • M1051 – Update Software (szybkie łatanie runtime/AMI).

Powiązane techniki (korelacje):

  • T1609 – Container Administration Command (nadużycie kubelet/API/Docker).
  • T1610 – Deploy Container (wstrzyknięcie nowej definicji z ryzykowną konfiguracją).
  • T1613 – Container and Resource Discovery (rozpoznanie środowiska przed ucieczką).

Źródła / dalsza lektura

  • MITRE ATT&CK T1611 (Escape to Host) – opis, taktyka, mitigacje, detekcje. (MITRE ATT&CK)
  • MITRE ATT&CK – Detection Strategy for Escape to Host (AN0612). (MITRE ATT&CK)
  • ATT&CK – wersje (v18.0 aktywna od 2025‑10‑28). (MITRE ATT&CK)
  • runc v1.3.3 / v1.2.8 – wydanie z poprawkami i opis CVE (upstream GitHub Releases). (GitHub)
  • NVD – karta CVE‑2025‑31133 (opis). (NVD)
  • Sysdig – analiza nowych luk runc (maskedPaths). (Sysdig)
  • oss‑security (Aleksa Sarai) – disclosure + komentarz dot. CVSS i 3 luk. (Openwall)
  • Ubuntu / USN i strona CVE. (Ubuntu)
  • SUSE advisory (wersje z łatkami, w tym 1.4.0‑rc.3). (SUSE)
  • AWS bulletin – działania w EKS/ECS, brak cross‑tenant. (Amazon Web Services, Inc.)

Checklisty dla SOC / CISO

SOC (operacyjne):

  • Wdrożone reguły z sekcji 7 (auditd/eBPF + K8s Audit + CloudTrail).
  • Korelacja „Pod create ↔ bind‑mount /proc ↔ write /proc/sys”.
  • Lista dozwolonych podów/agentów montujących /proc (RO) – tuning FP.
  • Dashboard wersji runc/containerd/CRI‑O węzłów (≥ 1.2.8/1.3.3/1.4.0‑rc.3).
  • Alert na privileged=true, hostPID=true, hostPath do /proc|/sys|/dev.

CISO (strategiczne):

  • Polityki PSS/PSA w K8s – brak kontenerów uprzywilejowanych.
  • SLA na aktualizacje runtime/AMI w chmurze (potwierdzony rollout).
  • Wymóg profili seccomp/AppArmor/SELinux dla workloadów.
  • Przegląd uprawnień DevOps do rejestracji definicji zadań (ECS) i tworzenia Podów (K8s).

Uwaga o rozbieżnościach wersji podatnych: NVD wskazuje konkretne zakresy wersji; upstream runc deklaruje, że problem dotyczył „wszystkich znanych wersji” przed wydaniami naprawczymi – w praktyce przyjmij konserwatywnie aktualizację do wersji z poprawką.

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ń.

Manassas (VA): zamknięcie szkół MCPS po incydencie cybernetycznym — co wiemy i jak reagować operacyjnie

Wprowadzenie do problemu / definicja incydentu

W niedzielę, 9 listopada 2025 r., dystrykt Manassas City Public Schools (MCPS) w stanie Wirginia poinformował o incydencie cyberbezpieczeństwa, który spowodował zakłócenia łączności i niedostępność systemów telefonicznych. W konsekwencji wszystkie szkoły zostały zamknięte w poniedziałek, 10 listopada, aby umożliwić zespołom IT zabezpieczenie i przywracanie usług. Władze dystryktu podkreśliły, że bezpieczeństwo fizyczne kampusów nie było zagrożone.

Informacja o zamknięciu została odnotowana również przez inne lokalne media, które powołują się na list do rodzin podpisany przez superintendenta dr. Kevina Newmana. Wskazano, że incydent miał miejsce w weekend i jest w toku analizy.


W skrócie

  • Co się stało: incydent cybernetyczny zakłócił pracę systemów sieciowych i telefonicznych MCPS. Szkoły zamknięto w poniedziałek (10.11.2025).
  • Komunikacja: dystrykt przekazał informację rodzinom/uczniom, m.in. kanałami społecznościowymi i mediami lokalnymi; zaznaczono brak zagrożenia dla bezpieczeństwa fizycznego.
  • Status techniczny: trwa przywracanie usług; priorytetem jest odtworzenie łączności i telekomunikacji.
  • Szerszy trend: liczba ataków na sektor edukacji jest wysoka; w 2024 r. odnotowano 116 zaatakowanych dystryktów K-12 w USA, a w 2025 r. branżowe raporty wskazują utrzymującą się presję grup ransomwarowych.

Kontekst / historia / powiązania

Region północnej Wirginii ma świeże doświadczenia z podobnymi zdarzeniami: w sierpniu 2025 r. Manassas Park City Schools (MPCS) ogłosił po incydencie ransomware możliwe naruszenie danych, choć jest to odrębny dystrykt od MCPS (Manassas City). Ten przypadek pokazuje, że lokalna oświata jest celem ciągłej aktywności wrogich grup. (Uwaga: przytaczane wyłącznie jako kontekst regionalny, nie jako powiązanie techniczne.) (

Równolegle, statystyki branżowe (Emsisoft 2024) i przeglądy dla oświaty (K12 Dive 2025) potwierdzają trend zwiększonej liczby incydentów i aktywności grup ransomware w sektorze edukacji.


Analiza techniczna / szczegóły luki

Publicznie dostępne informacje nie wskazują jeszcze na konkretny wektor ataku ani rodzinę malware/ransomware w przypadku MCPS. Poniższa analiza przedstawia najbardziej prawdopodobne ścieżki kompromitacji w K-12 na podstawie aktualnych trendów (do zastosowania przy triage i threat huntingu).

Najczęstsze wektory w K-12 (2024–2025):

  1. Phishing / BEC → uzyskanie poświadczeń do M365/Google Workspace; pivot przez VPN/SSO.
  2. Eksploatacja urządzeń brzegowych (VPN, SSL-VPN, bramy EDR/MDM, appliance’y backupu) — historycznie podatne m.in. na łańcuchy w Fortinet/Ivanti/Citrix, wykorzystywane do inicjalnego foothold.
  3. Zdalny dostęp (RDP/AnyDesk/ScreenConnect) bez MFA lub z wyciekami haseł.
  4. Łańcuch dostaw (konta dostawców SIS/edtech, MDM, zewnętrzni konsultanci).
  5. Shadow IT / błędna konfiguracja — nadmierne uprawnienia, brak Conditional Access, brak segmentacji.

Wskaźniki taktyk (TTP) obserwowane typowo przy atakach na szkoły:

  • Discovery: net group /domain, nltest /dclist, enumeracja Azure AD przez Graph/PowerShell.
  • Lateral movement: SMB/RDP, PSRemoting, lsassy, Impacket (wmiexec.py, smbexec.py), kradzież tokenów OAuth.
  • Persistence: rejestracje aplikacji w Entra ID, dodanie kluczy w HKLM\Software\Microsoft\Windows\CurrentVersion\Run, Scheduled Tasks GPO.
  • Impact: szyfrowanie na serwerach plików i NAS, wyłączenie EDR/AV przez tampering, voice/VoIP DoS i telefonia niedostępna (zbieżne z symptomami MCPS).

Szybkie testy hipotez (blue team) — przykładowe komendy/artefakty:

  • Entra ID – nietypowe logowania i aplikacje: # Ostatnie rejestracje aplikacji (podejrzana persystencja) Get-AzureADApplication -All $true | Sort-Object CreationDate -Descending | Select DisplayName, AppId, CreationDate | Select -First 20 # Nieudane logowania i MFA failures z ostatnich 24h Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-1) -EndDate (Get-Date) ` -Operations UserLoginFailed,UserLoggedIn | Where-Object {$_.UserId -like "*@mcpsva.org"} | Select CreationDate, UserId, ClientIP, Operation
  • Windows – skoki uprawnień i zdalne wykonywanie: Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4672,4624,4673,4688; StartTime=(Get-Date).AddDays(-1)} | Where Message -match 'SeDebugPrivilege|New Logon|Process Name:\s+(?:psexec|wmic|powershell|cmd)' | Select TimeCreated, Id, ProviderName, Message
  • Sieć – skan ruchu lateralnego (SMB/RDP) między strefami: # Ze sniffera w rdzeniu (przykładowo Zeek): zeek -Cr core.pcap local "Site::local_nets += { 10.0.0.0/8 }" # Szukaj anomalii: liczne połączenia 445/TCP i 3389/TCP do wielu hostów w krótkim czasie

Praktyczne konsekwencje / ryzyko

  • Operacyjne: brak łączności i telefonii = utrudniona komunikacja kryzysowa, absencje, transport, opieka nad uczniami ze specjalnymi potrzebami. (W MCPS odnotowano niedostępność telefonów i sieci).
  • Prywatność: szkoły przechowują PII (uczniowie, rodzice, pracownicy). Przy atakach ransomware typowy jest double-extortion (exfiltracja + szyfrowanie).
  • Ryzyko systemowe: powiązania z edtech/SIS/transport/żywienie; możliwe „kaskady” awarii przez konta dostawców.
  • Trend makro: 2024 r. — 116 dotkniętych dystryktów K-12 w USA (Emsisoft). 2025 r. — doniesienia branżowe wskazują utrzymującą się, wysoką presję na oświatę K-12.

Rekomendacje operacyjne / co zrobić teraz

Poniższa lista jest uporządkowana wg priorytetu (T+0h → T+72h). Zaprojektowana z myślą o realiach K-12: ograniczone zasoby, mieszanka on-prem + M365/Google, krytyczne usługi VoIP/SIS.

T + 0–6 h: stabilizacja i komunikacja

  1. Izoluj segmenty z symptomami (VoIP, sieć wewnętrzna, serwery plików). Wymuś network isolation na hostach podejrzanych z poziomu EDR.
  2. „War room” + plan komunikacji (kanały alternatywne: SMS, radio, analogowe linie awaryjne).
  3. Zbierz dowody lotne (listy procesów, tabelę ARP, połączenia sieciowe, tokeny OAuth w M365).
  4. Zaktualizuj baner statusowy na www i social (prosty, faktograficzny, bez spekulacji).

T + 6–24 h: containment techniczny

  1. Reset/MFA dla kont uprzywilejowanych i kont z logowaniami zza granicy.
  2. Wymuś Conditional Access: blokada logowań spoza kraju, „require compliant device”, „block legacy auth”.
  3. Zamknij RDP zewnętrzny, ogranicz VPN do „per-app” i tylko wybranych ról; rozdziel dostęp konsultantów.
  4. Przegląd urządzeń brzegowych (VPN/NGFW/WAF/Ivanti/Citrix) — weryfikacja wersji/popułapek znanych CVE, natychmiastowe patche lub „virtual patching” regułami IPS.
  5. Snapshoty i backup offline systemów krytycznych (SIS, finanse, HR, transport).

T + 24–72 h: eradication i przywracanie

  1. Hunt TTP: nietypowe aplikacje w Entra ID/Google, nowe klucze API, zaufane lokalizacje, rejestracje MFA.
  2. Rotacja sekretów: klucze SSO/SAML, hasła kont usługowych, poświadczenia do NAS/backup.
  3. Przywracanie etapami (najpierw VoIP i łączność, następnie SIS/gradebook; przepuść przez „strefę kwarantanny”).
  4. Edukacja incydentalna: ostrzeż rodziców/pracowników przed phishingiem „na reset hasła” i podszyciami pod szkołę.

Twarde kontrole (konfiguracja):

  • M365/Entra ID (przykład polityki CA — pseudokod): IF user IN "Admins, Staff" THEN Require: MFA (phishing-resistant), Compliant Device, Known Location Block: Legacy Authentication, TOR/Hosting ASN ELSE IF user IN "Vendors" THEN Require: MFA + Device Compliance OR VDIs Restrict: App-Enforced Restrictions, Session Timeout <= 2h
  • Segregacja sieci (SDA/VLAN):
    • Uczniowie ≠ Nauczyciele ≠ Administracja ≠ VoIP ≠ OT (HVAC/kamery).
    • ACL: VoIP ↔ Call Manager only, brak SMB poza strefą serwerową, deny any RDP między stacjami.
  • Backup: 3-2-1, immutability (S3 Object Lock, WORM na NAS), testy odtworzeniowe co najmniej raz/kwartał.
  • E-mail security: post-delivery remediation, link-safe, DMARC p=reject, BEC-rules hunting (forwarding, create-rules).

Gotowce komunikacyjne (szablon dla K-12)

  • Krótki komunikat dla rodzin: „Mieliśmy incydent cyberbezpieczeństwa. Z ostrożności zamykamy szkoły dnia X. Nie ma oznak zagrożenia fizycznego. Pracujemy nad przywróceniem łączności i telefonii. Kolejna aktualizacja o HH:MM.” (Zbieżne z tym, co przekazano w MCPS).

Różnice / porównania z innymi przypadkami

  • MCPS (listopad 2025): wczesna faza, brak potwierdzenia typu malware; główne skutki to telefony i łączność → decyzja o zamknięciu szkół w poniedziałek.
  • MPCS (sierpień 2025): potwierdzony ransomware i potencjalna ekspozycja PII (listy z informacjami o danych objętych ryzykiem). Przypadek innego dystryktu, ale geograficznie bliskiego.

Podsumowanie / kluczowe wnioski

  • MCPS padł ofiarą incydentu, który zakłócił kluczowe usługi IT/telekom — z ostrożności zdecydowano o jednodniowym zamknięciu szkół (10.11). Faktyczny wektor ataku nie został jeszcze ujawniony.
  • Skala zagrożeń dla K-12 utrzymuje się na wysokim poziomie; trend wzrostowy potwierdzają raporty i przeglądy branżowe.
  • Dla dystryktów najważniejsze jest szybkie ograniczenie szkód, twarde kontrole tożsamości i segmentacja, a także przygotowane z wyprzedzeniem szablony komunikacyjne.

Źródła / bibliografia

  1. WJLA (7News): „Manassas City Public Schools close on Monday due to cyberattack” — informacja o zamknięciu szkół, zakłócenia łączności i telefonii, komunikat superintendenta. (WJLA)
  2. FOX5 DC: „Cyberattack closes Manassas City Public Schools on Monday” — list do rodzin z 9 listopada, podkreślenie braku zagrożenia fizycznego. (FOX 5 DC)
  3. WUSA9: „Cybersecurity investigation closes Manassas City Public Schools Monday” — zbieżne informacje o przyczynach zamknięcia i harmonogramie. (wusa9.com)
  4. MCPS — kanał oficjalny (Facebook): komunikat o zamknięciu i działaniach przywracających usługi. (Facebook)
  5. Emsisoft (raport): „The State of Ransomware in the U.S. — 2024” — dane statystyczne nt. liczby zaatakowanych dystryktów K-12. Uzupełniająco: K12 Dive (2025) o częstotliwości ataków w edukacji. (Emsisoft)

Groźne luki w runC umożliwiają ucieczkę z kontenerów Dockera i Kubernetesa (CVE-2025-31133, CVE-2025-52565, CVE-2025-52881)

Wprowadzenie do problemu / definicja luki

Na początku listopada 2025 r. ujawniono trzy poważne podatności w runC – referencyjnej implementacji OCI wykorzystywanej m.in. przez Dockera, containerd i CRI-O. Każda z nich może prowadzić do pełnego przełamania izolacji kontenera i uzyskania dostępu do systemu-gospodarza (hosta) z uprawnieniami roota, głównie poprzez wymuszenie niebezpiecznych zapisów do plików w procfs. Łatki opublikowano w wersjach runC 1.2.8, 1.3.3 oraz 1.4.0-rc.3 i nowszych.


W skrócie

  • Trzy CVE: CVE-2025-31133, CVE-2025-52565, CVE-2025-52881.
  • Wspólny efekt: możliwość skierowania zapisu wykonywanego przez runC do „wrażliwych” plików w /proc (np. .../proc/sysrq-trigger), co otwiera drogę do eskalacji i ucieczki z kontenera.
  • Zakres: dotyczy praktycznie wszystkich linii runC stosowanych pod Linuksem (szczegóły wersji poniżej).
  • Status: dostępne aktualizacje; dystrybutorzy i chmury publikują obrazy z łatami (Ubuntu, Red Hat, Google COS, AWS EKS).

Kontekst / historia / powiązania

Zespół runC poinformował społeczność (kanały oss-security) o trzech podatnościach wysokiej wagi. W ciągu tego samego dnia wydano poprawione wydania (1.2.8/1.3.3/1.4.0-rc.3). Producenci dystrybucji Linuksa i dostawcy chmur zaczęli sukcesywnie wypychać aktualizacje obrazów node’ów Kubernetes i paczek systemowych.


Analiza techniczna / szczegóły luki

1) CVE-2025-31133 — nadużycie maskedPaths z /dev/null (maskowanie za pomocą bind-mount)

  • Mechanizm: runC maskuje wrażliwe ścieżki bind-mountem /dev/null nad docelowym plikiem.
  • Luka: jeśli atakujący podmieni /dev/null na dowiązanie symboliczne wskazujące na plik pod /proc, runC nie weryfikuje dostatecznie źródła i zamountuje cel symlinku RW – przez co uzyskuje się zapis do zabronionych plików procfs.
  • Zasięg: dotyczy wszystkich znanych wersji runC przed poprawką.

2) CVE-2025-52565 — błąd w bind-mouncie /dev/console

  • Mechanizm: podczas tworzenia /dev/console runC bind-montuje odpowiedni /dev/pts/$n do wnętrza kontenera.
  • Luka: wyścig i brak poprawnych sprawdzeń pozwalają na podmianę /dev/pts/$n na symlink — runC zamountuje wtedy nieoczekiwany cel nad /dev/console, zanim zostaną nałożone maskedPaths/readonlyPaths, otwierając furtkę do RW na krytycznych plikach.
  • Zasięg: od 1.0.0-rc3 w górę, obejmuje szerokie spektrum wydań.

3) CVE-2025-52881procfs write redirect i „gadżety zapisu” (arbitrary write)

  • Mechanizm: przy sprzyjających warunkach (m.in. wyścigi na współdzielonych montach), runC można nakłonić do przekierowania własnych zapisów do /proc na inne cele w procfs, de facto uzyskując dowolny zapis do niebezpiecznych plików.
  • Skutek uboczny: omijanie LSM re-labeling (np. AppArmor/SELinux) znane z wcześniejszych prac — ułatwia łańcuchowanie z 31133.
  • Zasięg: szeroki (dotyka wspieranych linii przed aktualizacją).

Wersje naprawione

  • runC 1.2.8, 1.3.3 i 1.4.0-rc.3 (i nowsze) zawierają łatki na wszystkie trzy CVE. Jeżeli korzystasz z Dockera/containerd/CRI-O, to po stronie hosta liczy się wersja binarki runC dostarczana przez system albo obraz node’a.

Praktyczne konsekwencje / ryzyko

  • Ucieczka z kontenera: możliwość nadpisania/zapisania do kluczowych wpisów procfs (/proc/sysrq-trigger, /proc/self/attr/..., itp.) umożliwia m.in. reset systemu, manipulacje bezpieczeństwem jądra czy obejście etykiet LSM — finalnie root na hoście.
  • Łańcuchowanie: 52881 może neutralizować warstwę LSM, co zwiększa skuteczność 31133.
  • Wejście w wektor przez pipeline’y buildowe: podatności da się wyzwalać podczas buildów (np. docker buildx) i przy niestandardowych konfiguracjach montowań — realne ryzyko dla CI/CD.
  • Brak exploitów 0-day w obiegu w momencie publikacji, ale wymagany jest natychmiastowy patch – powierzchnia ataku jest powszechna (runC jest „wszędzie”).

Rekomendacje operacyjne / co zrobić teraz

0. Szybka walidacja środowiska

Sprawdź, jaką wersję runC faktycznie uruchamia host/worker:

# na hoście
runc --version

# jeśli runc dostarcza dystrybucja:
dpkg -l | grep -E 'runc'            # Debian/Ubuntu
rpm -q runc                         # RHEL/CentOS/Fedora/SUSE

# containerd
ctr version | grep -i runc
crictl info | jq '.config.containerd.runtimes'

# Kubernetes node (przez SSH na worker)
kubelet --version

1. Aktualizacje (preferowane)

  • System/obrazy node’ów: zaktualizuj paczki runc/containerd lub przeprowizjonuj AMIs/OS images dla klastrów (EKS/AKS/GKE/COS ma już rollout z łatą).
  • Minimalne bezpieczne wersje runC: 1.2.8 / 1.3.3 / 1.4.0-rc.3 (lub nowsze).
  • Przykładowe ścieżki:
    • Ubuntu: sudo apt-get update && sudo apt-get install --only-upgrade runc (USN-7851-1).
    • RHEL/SUSE: sudo dnf update runc / zypper up runc (RHSA/SUSE advisory).
    • EKS: zaktualizuj node groups / wymuś rolling replace zgodnie z biuletynem AWS.
    • Google COS/GKE: dobierz najnowszy cos-stable z notatek wydania.

2. Dodatkowe twardnienie (gdy patch jeszcze w toku)

Poniższe nie zastępują aktualizacji, ale ograniczają ryzyko:

  • User Namespaces (bez mapowania hostowego UID 0): uruchamiaj kontenery z root-less lub z remapowaniem UID/GID – uniemożliwia wielu ścieżkom zapisu do procfs dzięki DAC.
  • Rootless Docker/Podman tam, gdzie to możliwe.
  • Ogranicz niestandardowe montowania w docker run, PodSpec i pipeline’ach buildowych (buildx) – polityki Admission Controller (OPA/Gatekeeper/Kyverno) blokujące hostPath, --mount, nieautoryzowane bind-mounty, SYS_ADMIN, CAP_SYS_ADMIN.
  • LSM / seccomp / AppArmor/SELinux: włączone profile to wciąż bariera, choć 52881 redukuje ich skuteczność – traktuj to jako warstwę „Defense in Depth”.
  • ReadOnlyRootFilesystem, no-new-privileges, drop większości capabilities; brak --privileged.
  • RBAC: zablokuj możliwość tworzenia podów z niestandardowymi montami przez nieuprawnionych deweloperów.

3. Wykrywanie i obserwowalność

  • Sygnatury EDR/eBPF/Falco pod kątem:
    • Podejrzanych symlinków w /dev/pts/* i podmian /dev/null podczas init kontenera.
    • Zapisów do plików /proc/ nietypowych dla workloadu (np. */proc/sysrq-trigger, */proc/*/attr/*).
  • Telemetria z auditd/BPF i korelacja z cyklem życia kontenerów. (Sysdig publikuje wskazówki detekcyjne oraz opis wektorów).

Przykładowa reguła Falco (szkic – dostosuj do środowiska):

- rule: Suspicious_Procfs_Write_From_Container
  desc: "Zapis do krytycznych plików procfs przez proces w kontenerze"
  condition: evt.type in (open,openat) and fd.name pmatch (
               "/proc/sysrq-trigger",
               "/proc/*/attr/*",
               "/proc/sys/kernel/*"
             ) and container and (evt.arg.flags & O_WRONLY != 0 or evt.arg.flags & O_RDWR != 0)
  output: "procfs write in container (user=%user.name proc=%proc.name file=%fd.name container=%container.id)"
  priority: CRITICAL
  tags: [container, mitre-privilege-escalation]

Różnice / porównania z innymi przypadkami

  • Historyczne analogie: 52881 to „bardziej wyrafinowany” następca problemów z LSM relabel obserwowanych wcześniej (np. CVE-2019-19921). Wspólny motyw to przekierowanie zapisów wykonywanych przez sam runtime, co omija klasyczne sandboxowe ograniczenia procesu w kontenerze.
  • Wobec CVE w Docker Desktop 2025 (SSRF/ECI): inna klasa – tam problem dotyczył środowiska desktop/WSL2 i API dockerd, tutaj mówimy o jądrze i procfs w runtime. (Wspólna nauka: aktualizacje toolchainu kontenerowego są krytyczne).

Podsumowanie / kluczowe wnioski

  • Te trzy CVE w runC to fundamentalne problemy izolacji kontenera; aktualizacja runC do 1.2.8/1.3.3/1.4.0-rc.3 (lub nowszej) powinna być traktowana jak pilny changerequest na wszystkich hostach/workerach.
  • Do czasu pełnego patcha: rootless/userns, blokady niestandardowych montów i wzmocnione monitorowanie procfs.
  • Zadbaj o pipeline’y buildowe (buildx) i obrazy bazowe node’ów w chmurach – wielu dostawców już publikuje zaktualizowane obrazy, ale rollout bywa rozłożony w czasie.

Źródła / bibliografia

  • BleepingComputer: przegląd i wersje naprawione (1.2.8/1.3.3/1.4.0-rc.3). (BleepingComputer)
  • GitHub (opencontainers/runc) – release notes z opisem trzech CVE i kontekstem technicznym. (GitHub)
  • NVD: karty CVE z opisem zakresu wersji i szczegółami (31133, 52565, 52881). (NVD)
  • Advisory/dystrybutorzy: Ubuntu USN-7851-1; Red Hat RHSA-2025:19927; Google COS release notes; AWS Security Bulletin (EKS). (Ubuntu)
  • Sysdig: analiza wektorów i wskazówki detekcyjne. (sysdig.com)

N. Korea–backed hackers kasują dane i rozprzestrzeniają malware przez KakaoTalk. Nowa taktyka zdalnego resetu urządzeń

Wprowadzenie do problemu / definicja luki

Według najnowszych doniesień południokoreańskich mediów i analizy Genians Security Center (GSC), aktor powiązany z Koreą Północną prowadzi kampanię, w której przejmuje konta ofiar (Google i lokalne serwisy), dostarcza malware przez komunikator KakaoTalk (w tym wersję PC), a następnie zdalnie resetuje urządzenia mobilne (Android) i usuwa kluczowe dane (zdjęcia, dokumenty, kontakty). Co więcej, zainfekowane komputery i tablety wykorzystywane są do dalszej dystrybucji złośliwych plików do kontaktów ofiary, a w części przypadków napastnicy wykorzystywali kamerę internetową do potwierdzania nieobecności właściciela.


W skrócie

  • Wejście odbywa się przez fałszywe “programy odstresowujące” dystrybuowane przez KakaoTalk; pakiet to MSI z podpisem cyfrowym (nadużycie legalnego certyfikatu wydanego chińskiemu podmiotowi), w środku skrypty AutoIt i dodatkowe komponenty.
  • Po kradzieży sesji/kont napastnik uruchamia zdalny reset/factory reset Androida (z poziomu usług Google), czasem wielokrotnie, aby utrudnić odzyskanie. Dane na telefonie znikają.
  • Z przejętej sesji KakaoTalk (PC) atakujący rozesyła malware do znajomych ofiary, poszerzając zasięg.
  • Źródła medialne łączą kampanię z klastrami Kimsuky lub APT37 (Reaper) – taktyka wskazuje na dojrzałe APT ukierunkowane na inwigilację i destrukcję danych.
  • W tym samym okresie raportowano nowe narzędzia Kimsuky (np. backdoor “HttpTroy”), co potwierdza intensywną ewolucję arsenału DPRK.

Kontekst / historia / powiązania

Klastry Kimsuky/Thallium i APT37/Reaper od lat realizują kampanie szpiegowskie i wpływają na ekosystem bezpieczeństwa w Korei i poza nią: spear-phishing, LNK/CHM/HWP, AutoIt, oraz nadużycia chmurowych C2 (Dropbox, Yandex, Gmail). Dorobek doradczy CISA dla DPRK cyber actors podkreśla ich zdolność do kradzieży danych, utrzymywania długotrwałej obecności i ciągłej mutacji TTP. Nowy wątek – skoordynowana “neutralizacja” urządzeń ofiar (factory reset) – to jakościowy skok w modelu operacyjnym.


Analiza techniczna / szczegóły luki

Wejście i pierwsze etapy

  1. Initial Access – malspam / IM delivery
    Ofiary otrzymują w KakaoTalk link/załącznik do archiwum ZIP zawierającego MSI “Stress Clear.msi”. MSI posiada ważny podpis cyfrowy (nadużycie zaufania), a w środku komponenty uruchamiające AutoIt i ładunki pomocnicze.
  2. Execution & Defense Evasion
    Skrypty AutoIt dekompresują/ładowują moduły, wykorzystują nazewnictwo katalogów sugerujące “broń ataku” (ang. Attack Weapon) i wykonują kroki ukrywania (np. anty-EDR, living-off-the-land).
  3. Credential Access & Session Hijack
    Po zainfekowaniu kradzione są dane kont: Google i lokalnych usług (przeglądarki, tokeny, ciasteczka), co umożliwia zdalne akcje na urządzeniach.

Eskalacja: zdalny reset i destrukcja danych na Androidzie

  • Napastnik korzysta z mechanizmów Google do zdalnego zarządzania urządzeniem (po zalogowaniu na skompromitowane konto) i uruchamia factory reset/remote wipe. W wielu incydentach komenda była wykonywana wielokrotnie (≥3x), by utrudnić odzyskanie.
  • Zanim dojdzie do resetu, operator potrafi sprawdzić lokalizację urządzenia i/lub poprzez kamerę laptopa upewnić się, że ofiara jest poza domem/biurem – minimalizuje to ryzyko szybkiej reakcji.

Lateral/social propagation z poziomu PC

  • Po resetach telefonów atakujący używa KakaoTalk (PC) na już zalogowanym komputerze ofiary, aby rozsyłać kolejne paczki malware do kontaktów (tzw. account-based propagation). To opóźnia wykrycie – ofiara traci powiadomienia na telefonie.

Nowe narzędzia w ekosystemie DPRK

  • Równolegle obserwujemy nowe backdoory (np. HttpTroy w kampanii Kimsuky), co potwierdza ciągłe R&D po stronie aktorów DPRK i łatwe rotowanie TTP/implantów.

Praktyczne konsekwencje / ryzyko

  • Utrata danych użytkownika: trwałe skasowanie zdjęć, dokumentów, kontaktów na urządzeniu mobilnym (brak backupu = nieodwracalne straty).
  • Supply-chain społeczny: przejęte kontakty w KakaoTalk stają się kanałem do infekcji łańcuchowej w organizacjach (BYOD/COPE).
  • Utrata widoczności i opóźnienie wykrycia: brak powiadomień na zresetowanym telefonie de facto odcina kanały 2FA/alertów, zmniejsza szanse szybkiej reakcji.
  • Ryzyko nadzoru fizycznego: użycie kamery/lokalizacji do świadomego timingu ataku (gdy użytkownik jest offline).

Rekomendacje operacyjne / co zrobić teraz

Dla zespołów SOC/Blue Team

Detekcje (EDR/SIEM/Sysmon)

  • Wykrywaj uruchomienia msiexec.exe z nietypowymi ścieżkami/parametrami (z katalogów użytkownika / %TEMP%).
  • Poluj na AutoIt: procesy AutoIt3.exe / skrypty .au3 / sekcje PE z ciągami “AutoIt”.
  • Monitoruj przeglądarkowe tokeny/sesje: nienaturalne logowania do Google (nowe urządzenia, niespotykane ASN/geo) zsynchronizowane z resetami urządzeń.

Przykładowa reguła Sigma (Windows – MSI z %TEMP%)

title: Suspicious MSI Install from Temp
id: 7b1a7e8a-7d1f-4d3e-9a0b-apt-kr-msi
status: experimental
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    Image|endswith: '\msiexec.exe'
    CommandLine|contains:
      - '\AppData\Local\Temp\'
      - '\Downloads\'
  condition: selection
level: high
tags: [attack.execution, t1059, t1204]

Przykładowa reguła Sigma (AutoIt)

title: AutoIt Interpreter Execution
id: 9d3af2d2-0f1a-41a6-9af0-autoit
status: experimental
logsource:
  product: windows
  category: process_creation
detection:
  sel1:
    Image|endswith:
      - '\AutoIt3.exe'
      - '\AutoIt3_x64.exe'
  sel2:
    CommandLine|contains:
      - '.au3'
  condition: sel1 or sel2
level: medium
tags: [attack.execution, t1059]

Hunting – przykładowe kwerendy (Sysmon/EDR)

  • Nietypowe połączenia wychodzące tuż po uruchomieniu msiexec.exe/AutoIt3.exe.
  • Zmiany w katalogach przeglądarek (Login Data, Cookies) korelowane z nowymi logowaniami na konto Google.
  • Wzorzec: reset Androida (zdarzenie bezpieczeństwa konta) + aktywność KakaoTalk (PC) wysyłająca pliki do wielu kontaktów.

Dla administratorów IT / SecOps

  1. Konta i MDM
    • Wymuś MFA (najlepiej klucze FIDO2) na kontach Google służbowych.
    • Alerting na “Find My Device / Remote wipe” — w Google Workspace skonfiguruj reguły zdarzeń konta i powiadomienia bezpieczeństwa.
    • Zarządzaj Androidem przez MDM/Workspace: polityka blokady factory reset bez zgody IT; wymuś szyfrowanie i automatyczne kopie w chmurze.
  2. Aplikacje i poczta/IM
    • Ogranicz załączniki i EXE/MSI w komunikatorach desktopowych (DLP/antimalware na warstwie proxy/endpoint).
    • Application Control: zabroń msiexec.exe dla zwykłych użytkowników, zezwalaj tylko z podpisami znanych wydawców (wszędzie, gdzie to możliwe – allow-list).
    • Dezaktywuj autologowanie KakaoTalk (PC) i wymuszaj blokadę ekranu.
  3. Twarde higiena kont
    • Przeglądy sesji Google (Security Checkup): wylogowanie ze wszystkich urządzeń, rotacja haseł, przegląd autoryzowanych aplikacji OAuth.
    • Geofence/Impossible Travel: blokuj dziwne logowania; rozważ risk-based access.
  4. Reakcja na incydent (IR) – playbook skrócony
    • Odłącz zainfekowany PC od sieci → wyloguj sesje kont (Google/Kakao) → przymusowa zmiana haseł + unieważnienie tokenów OAuth.
    • Android: jeśli już zresetowany, traktuj jak utracony – przywracaj z weryfikowanego backupu, nie przywracaj niezaufanych APK/konfiguracji.
    • Powiadom kontakty (zwłaszcza niefirmowe), że nie wolno otwierać przesłanych plików z poprzedniej konwersacji.
  5. Szkolenia użytkowników
    • Programy antystresowe”, “aktualizacje-szybkie naprawy” przez komunikatory = czerwona flaga.
    • Weryfikuj: nawet jeśli nadawcą jest ktoś znany – mogło dojść do przejęcia sesji.

Dla użytkowników końcowych (BYOD/COPE)

  • Kopia zapasowa (Zdjęcia/Drive/Signal/WhatsApp) w harmonogramie.
  • Blokada konta Google: włącz alerty bezpieczeństwa, autoryzację logowania na zaufanych urządzeniach.
  • Nie instaluj MSI/EXE z czatu; używaj sklepu i oficjalnych stron.

Różnice / porównania z innymi przypadkami

  • Klasyczne kampanie Kimsuky/APT37 koncentrowały się na exfiltracji (LNK, HWP, RoKRAT, spear-phishing) i utrzymaniu dostępu. Tu obserwujemy połączenie exfiltracji z celowym “neutralizowaniem” urządzeń mobilnych przez zdalny reset, co opóźnia detekcję i ułatwia propagację z konta komunikatora. To mniej typowe w porównaniu z wcześniejszymi, czysto szpiegowskimi operacjami.

Podsumowanie / kluczowe wnioski

  • Kampania przypisywana klastrom Kimsuky/APT37 łączy socjotechnikę, MSI + AutoIt, kradzież sesji i zdalny reset Androida, by jednocześnie zniszczyć dane i rozszerzyć infekcję przez KakaoTalk (PC). To eskalacja TTP DPRK w kierunku szybkiego paraliżu komunikacyjnego ofiary.
  • Organizacje powinny wzmocnić kontrolę nad MSI/AutoIt, zabezpieczyć konta Google (MFA FIDO2), wdrożyć MDM z politykami anti-reset i agresywnie monitorować zdarzenia kont powiązane z “Find My Device/Remote Wipe”.

Źródła / bibliografia

  1. The Korea Times – “N. Korea-backed hackers deploy new malware-led cyberattack: report” (Nov 10, 2025). (The Korea Times)
  2. Genians Security Center – “State-Sponsored Remote Wipe Tactics Targeting Android …” (analiza techniczna MSI/AutoIt, reset urządzeń, propagation via KakaoTalk PC). (genians.co.kr)
  3. The Chosun Biz (EN) – “North Korean hackers wipe Korean devices by remotely resetting phones and PCs …” (kontekst medialny i zasięg). (Chosunbiz)
  4. The Hacker News – “New HttpTroy Backdoor … (Kimsuky)” (ewolucja narzędzi DPRK). (The Hacker News)
  5. CISA – “North Korea State-Sponsored Cyber Threat: Publications/Advisories” (tło i profil TTP DPRK). (cisa.gov)

CVE-2013-1493 — Oracle Java SE (2D/CMM) RCE przez obraz rastrowy

TL;DR

Krytyczna luka w Java SE 5/6/7 (moduł 2D/CMM) umożliwia zdalne wykonanie kodu przy przetwarzaniu spreparowanego obrazu rastrowego w aplecie/Java Web Start. W 2013 r. była aktywnie wykorzystywana w kampaniach drive‑by (np. pakiety exploitów), a Oracle załatał ją w JRE/JDK 7u17 i 6u43. Dla SOC mapujemy to na T1189 (wejście przez stronę WWW) oraz T1203 (eksploatacja klienta). Zalecane: odinstalować wtyczkę Java w przeglądarkach (legacy), wymusić aktualizacje, monitorować łańcuch browser → java.exe → LOLBIN.


Krótka definicja techniczna

CVE‑2013‑1493 to błąd w Color Management (CMM) komponentu Java 2D, który przy przetwarzaniu obrazu o specjalnie przygotowanych parametrach rastra powoduje odczyt poza buforem i/lub uszkodzenie pamięci JVM, co umożliwia RCE przez aplet/Java Web Start w przeglądarce. CVSS v2: 10.0 (AV:N/AC:L/Au:N/C:C/I:C/A:C).


Gdzie występuje / przykłady platform

  • Endpointy z przeglądarką i wtyczką Java: Windows, macOS, Linux (w 2013 r. powszechne; dziś przeważnie legacy/ICS/offline).
  • Środowiska VDI/kioski z dziedziczonymi aplikacjami Web Start.
  • Nie dotyczy bezpośrednio serwerów (Oracle: luka dotyczy Javy uruchamianej w przeglądarce).

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

Atakujący umieszcza na stronie WWW (lub w pakiecie exploitów) aplet/Java Web Start wczytujący obraz z nietypowymi parametrami rastra. Podczas renderowania w module Java 2D/CMM dochodzi do naruszenia pamięci JVM → przekazanie sterowania do złośliwego payloadu. W typowym łańcuchu drive‑by użytkownik odwiedza stronę (często watering hole), przeglądarka ładuje wtyczkę Java, a po eksploatacji następuje pobranie i uruchomienie kolejnego modułu (np. downloader), często z wykorzystaniem systemowych LOLBIN‑ów (cmd.exe, powershell.exe, rundll32.exe). Oracle podkreślał, że lukę należy traktować jako dotyczącą Javy w przeglądarkach (nie serwerowej).

Dlaczego skuteczna (historycznie):

  • masowa ekspozycja wtyczki Java w przeglądarkach;
  • niska interakcja użytkownika (często brak – lub akceptacja ostrzeżenia);
  • natychmiastowe przejście do Execution po Initial Access (ATT&CK).

Artefakty i logi

ŹródłoID / typCo obserwowaćWskazówki
Windows Security4688 (Process Create)java.exe/javaw.exe/javaws.exe jako dziecko chrome.exe/msedge.exe/firefox.exe/iexplore.exeNietypowe dziś; silnie podejrzane w 2025 r.
Sysmon1 (Process Create)java*.exe → uruchamia cmd.exe/powershell.exe/wscript.exe/rundll32.exe/mshta.exeŁańcuch post‑eksploatacyjny
Sysmon3 (Network Connect), 22 (DNS)Połączenia HTTP(S) zaraz po starcie java.exe do nieznanych domen; rzadkie SNI/JA3Korelować z Proxy/NGFW
Sysmon7 (ImageLoad)Dynamiczne DLL do Javy ładowane z %TEMP%/%APPDATA%Droppery
Sysmon11 (FileCreate)Nowe JAR/EXE/DLL w profilach użytkownikaArtefakty post‑eksploatacyjne
Proxy/HTTPPobrania .jar/.class/MIME application/java-archive, stare typy application/x-java-appletWzorzec drive‑by
EDR (MDE/SentinelOne/itp.)Reguły behawioralne: przeglądarka → Java → LOLBIN → siećKorelacje
CloudTrail (S3 data events)GetObjectPobrania .jar/.class z bucketów spoza allowlistyDetekcja hostingu artefaktów
K8s audit[N/D] — luka dot. klienta przeglądarkowego
M365 Audit[N/D] — brak bezpośredniego śladu

Detekcja (praktyczne reguły)

Sigma (Windows / Sysmon)

title: Browser-Spawns-Java-And-Java-Spawns-LOLBIN (CVE-2013-1493 TTP)
id: 9b9a6e2f-9a1c-4bde-b3d9-13d313493000
status: experimental
logsource:
  product: windows
  category: process_creation
detection:
  browser_parent:
    ParentImage|endswith:
      - '\chrome.exe'
      - '\msedge.exe'
      - '\firefox.exe'
      - '\iexplore.exe'
  java_proc:
    Image|endswith:
      - '\java.exe'
      - '\javaw.exe'
      - '\javaws.exe'
  lolbin_child:
    ParentImage|endswith:
      - '\java.exe'
      - '\javaw.exe'
      - '\javaws.exe'
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\rundll32.exe'
      - '\mshta.exe'
  condition: (browser_parent and java_proc) or lolbin_child
fields:
  - UtcTime
  - Image
  - ParentImage
  - CommandLine
  - ParentCommandLine
falsepositives:
  - Rzadkie, legacy Web Start / środowiska deweloperskie
level: high
tags:
  - attack.T1189
  - attack.T1203

Splunk (SPL)

1) Przeglądarka → Java

index=sysmon sourcetype=XmlWinEventLog:Microsoft-Windows-Sysmon/Operational EventCode=1
| where mvfind(["chrome.exe","msedge.exe","firefox.exe","iexplore.exe"], lower(coalesce(ParentImage,ParentImage)))>=0
| where like(lower(Image), "%\\java.exe") OR like(lower(Image), "%\\javaw.exe") OR like(lower(Image), "%\\javaws.exe")
| stats earliest(_time) as firstSeen latest(_time) as lastSeen values(CommandLine) by Computer, User, ParentImage, Image, ParentCommandLine

2) Java → podejrzany LOLBIN / łańcuch procesu

index=sysmon EventCode=1 (Image="*\\cmd.exe" OR Image="*\\powershell.exe" OR Image="*\\wscript.exe" OR Image="*\\rundll32.exe" OR Image="*\\mshta.exe")
| join ProcessGuid type=inner [
  search index=sysmon EventCode=1 (Image="*\\java.exe" OR Image="*\\javaw.exe" OR Image="*\\javaws.exe")
  | table ProcessGuid, Computer, User, Image, ParentImage, CommandLine, ParentCommandLine, _time
]
| table _time, Computer, User, ParentImage, Image, CommandLine, ParentCommandLine

KQL (Microsoft Defender/Sentinel)

// Browser -> Java
DeviceProcessEvents
| where InitiatingProcessFileName in~ ("chrome.exe","msedge.exe","firefox.exe","iexplore.exe")
| where FileName in~ ("java.exe","javaw.exe","javaws.exe")
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine, InitiatingProcessCommandLine, AccountName

// Java -> LOLBIN within 2 min
let suspiciousChildren = dynamic(["cmd.exe","powershell.exe","wscript.exe","rundll32.exe","mshta.exe"]);
DeviceProcessEvents
| where InitiatingProcessFileName in~ ("java.exe","javaw.exe","javaws.exe")
| join kind=inner (
    DeviceProcessEvents
    | where FileName in~ (suspiciousChildren)
    | project ChildTime=Timestamp, DeviceId, ChildFile=FileName, ChildCmd=ProcessCommandLine, InitiatingProcessParentId
) on DeviceId, InitiatingProcessId==InitiatingProcessParentId
| where ChildTime between (Timestamp .. Timestamp + 2m)
| project DeviceName, Timestamp, ChildTime, InitiatingProcessFileName, ChildFile, ChildCmd

CloudTrail query (CloudWatch Logs Insights – S3 Data Events)

Użyteczne, gdy wykrywamy hostowanie artefaktów JAR/CLASS w S3 (częsty etap w kampaniach drive‑by).

fields @timestamp, eventSource, eventName, requestParameters.bucketName, requestParameters.key, sourceIPAddress, userAgent
| filter eventSource = "s3.amazonaws.com" and eventName = "GetObject"
| filter requestParameters.key like /\.jar$/ or requestParameters.key like /\.class$/
| filter ispresent(userAgent) and (userAgent like 'Mozilla%' or userAgent like '%Java%')
| sort @timestamp desc

Elastic / EQL (Endpoint)

// Java spawns LOLBIN
process where
  process.name in ("cmd.exe","powershell.exe","wscript.exe","rundll32.exe","mshta.exe") and
  parent.process.name in ("java.exe","javaw.exe","javaws.exe")

Heurystyki / korelacje

  • Łańcuch czasowy: browser → java.exe → LOLBIN → outbound HTTP(S)/DNS w krótkim oknie (≤2 min).
  • Pliki tymczasowe: nowe .jar/.dll/.exe w %TEMP%, %APPDATA%, ~/Library/Application Support.
  • Proxy/NGFW: nagłe pobrania JAR/CLASS z rzadkich domen → brak wcześniejszej reputacji.
  • EDR: zastrzyk modułów do JVM spoza katalogów Javy; Java jako nietypowy rodzic skryptów/LOLBIN‑ów.
  • Reputacja/Threat Intel: korelacja domen/IP z historycznymi pakietami exploitów (Blackhole/Sweet Orange itd.).

False positives / tuning

  • Legitymne środowiska Web Start/IcedTea‑Web (intranety, ICS) — białe listy domen/aplikacji.
  • Deweloperzy Javy uruchamiający narzędzia buildujące z przeglądarki.
  • W 2025 r. każde uruchomienie wtyczki Java w przeglądarce jest podejrzane; tuning opierać na allowlistach domen i podpisów plików JAR.

Playbook reagowania (IR)

  1. Triage i izolacja: odłącz host, zachowaj pamięć/dysk (artefakty JVM).
  2. Zbieranie faktów: drzewo procesów od przeglądarki do java*.exe, następnie do LOLBIN‑ów; zrzut listy modułów JVM; lista nowo utworzonych plików.
  3. Sieć: zablokuj domeny/sumy SHA256 pobranych JAR/EXE; sprawdź proxy dla innych ofiar.
  4. Eskalacja/przeciwdziałanie:
    • odinstaluj/wyłącz plugin Java;
    • wymuś aktualizacje do JRE/JDK 7u17/6u43 na hostach legacy; rozważ całkowite usunięcie Javy z przeglądarek.
  5. Hunting retro (30–90 dni): wzorce pobrań .jar/.class, łańcuchy browser → Java → LOLBIN.
  6. Lessons learned: polityka click‑to‑play / blokada wtyczek, patch management, segmentacja egress.

Przykłady z kampanii / case studies

  • Blackhole i inne pakiety exploitów (2013) szeroko nadużywały luk w Javie, w tym CVE‑2013‑1493, do drive‑by download i pobierania malware.
  • Detekcje vendorów (MSFT) klasyfikowały ruch jako Exploit:Java/CVE‑2013‑1493 – wejście przez stronę WWW, następnie pobranie i uruchomienie plików.

Lab (bezpieczne testy) — przykładowe komendy

Wyłącznie w odizolowanym, testowym środowisku (VM, brak Internetu). Celem jest wygenerowanie artefaktów detekcyjnych, nie eksploatacja luki.

A. Symulacja łańcucha browser → Java

  1. Otwórz w przeglądarce lokalny plik HTML z linkiem jnlp (pusty, benigny) albo uruchom:
# Windows (zainstalowana Java): symulacja startu Java z procesu użytkownika
Start-Process -FilePath "$env:ProgramFiles\Google\Chrome\Application\chrome.exe" -ArgumentList "about:blank"
Start-Sleep -Seconds 2
Start-Process -FilePath "C:\Program Files\Java\jre\bin\javaw.exe" -ArgumentList "-version"
  1. Sprawdź, czy reguły Sigma/Splunk/KQL łapią „browser → javaw.exe”.

B. Java → LOLBIN (benigny helper)
Utwórz prosty JAR uruchamiający notepad (tylko logówka):

# Linux/macOS (analogicznie w Windows z javac)
cat > Runner.java << 'EOF'
public class Runner {
  public static void main(String[] args) throws Exception {
    new ProcessBuilder("notepad.exe").start(); // na *nix np. "xcalc"
  }
}
EOF
javac Runner.java && jar cfe runner.jar Runner Runner.class
# Uruchom:
java -jar runner.jar

Oczekiwany artefakt: java.exe → notepad.exe (LOLBIN), co powinno trafić w reguły.


Mapowania (Mitigations, powiązane techniki)

Mitigations (ATT&CK):

  • M1051 – Update Software (patchowanie Javy; eliminacja wtyczki/legacy)
  • M1031 – Network Intrusion Prevention (blok sygnatur exploit‑kit/JAR)
  • M1040 – Behavior Prevention on Endpoint (EDR/anty‑exploit)
  • M1017 – User Training (świadomość ryzyk apletów/ostrzeżeń przeglądarki)

Powiązane techniki:

  • T1189 Drive‑by Compromise (wejście)
  • T1203 Exploitation for Client Execution (RCE w kliencie)
  • T1204.002 User Execution: Malicious File (czasem wymagane kliknięcie/akcept)
  • T1059 Command and Scripting Interpreter (następstwa)

Źródła / dalsza literatura

  • Oracle Security Alert (zakres: dotyczy Javy w przeglądarkach; wersje naprawcze 7u17/6u43) (Oracle)
  • Oracle JDK 7u17 Release Notes (baseline wersji z poprawką) (Oracle)
  • NVD CVE‑2013‑1493 (opis techniczny, CVSS 10.0, „exploited in the wild”) (NVD)
  • CISA Alert: Oracle Java Contains Multiple Vulnerabilities (wersje podatne i zalecenia) (CISA)
  • Microsoft WDSI – Exploit:Java/CVE‑2013‑1493 (mechanika ataku przez WWW) (Microsoft)
  • McAfee Labs (pakiety exploitów wykorzystywały m.in. CVE‑2013‑1493) (McAfee)
  • ATT&CK – T1189 / T1203 / TA0001 / TA0002 / v18 updates (mapowanie technik i wersja ATT&CK) (MITRE ATT&CK)

Checklisty dla SOC / CISO (krótko)

SOC (operacyjne):

  • Włączone logi: Sysmon (1/3/7/11/22), Security 4688, EDR z korelacją rodzic‑dziecko.
  • Reguły: „browser → java.exe”, „java.exe → LOLBIN”, pobrania .jar/.class.
  • Blokady: domeny/URL z kampanii, Content‑Type application/java-archive.
  • Hunting retro: 30–90 dni w proxy/EDR pod kątem JAR/CLASS + łańcuch procesów.
  • Alerting na dowolne uruchomienie wtyczki Java w przeglądarce (2025).

CISO (strategiczne):

  • Eliminacja wtyczek Java (NPAPI) w organizacji; akceptacja wyjątków tylko czasowa.
  • Polityka patchowania: min. 7u17/6u43 na systemach legacy lub migracja/wycofanie.
  • EDR z prewencją behawioralną (M1040) i IPS przy egress (M1031).
  • Program świadomości (M1017) dot. apletów/ostrzeżeń przeglądarki.


Uwaga o ryzyku: Choć wtyczka Java jest powszechnie wycofana we współczesnych przeglądarkach, luka ma znaczenie historyczne, a wewnętrzne środowiska legacy (np. ICS/offline) mogą wciąż generować analogiczne ścieżki ataku.
Rekomendacja: najlepiej całkowicie usunąć wtyczkę Java z przeglądarek i ograniczyć Javę do aplikacji lokalnych z aktualną wersją JVM.