
تحييد ثغرات CISA النشطة في نواة Linux (CVE-2025-39964، CVE-2026-53266، CVE-2025-39682) عبر eBPF الحديث، ونزع سلاح الوحدات، ومساحات أسماء المستخدمين في containerd.
عندما تضيف وكالة الأمن السيبراني وأمن البنية التحتية (CISA) ثغرات نواة لينكس الحرجة إلى كتالوج الثغرات المعروفة المستغلة (KEV)، تبدأ ساعة تشغيلية عاجلة بالعد التنازلي لفرق البنية التحتية وقادة SRE:
فجوة التصحيح من المصدر:
المدة بين التسليح العلني لثغرة يوم الصفر في البرية وتوفر حزم نواة ثنائية موقعة ومختبرة من توزيعات المؤسسات (Ubuntu HWE، Debian، RHEL) تمتد عادةً من 7 إلى 21 يومًا.
في عناقيد Kubernetes الإنتاجية، يؤدي الانتظار السلبي لحزم الموردين إلى تعريض الأنظمة للاستغلال النشط، بينما تخاطر ترقيات النواة المبكرة أو عمليات إعادة التشغيل الطارئة بانقطاعات تشغيلية.
توثق دراسة الحالة هذه إطار عمل ضوابط تعويضية للدفاع في العمق مصمم لإدارة ثلاث ثغرات متزامنة في نواة لينكس (CVE-2025-39964، CVE-2026-53266، CVE-2025-39682) عبر مساحة المستخدم، ومحمل النواة، وطبقات وقت التشغيل دون الحاجة إلى إعادة تشغيل المضيف.
لضمان الدقة التشغيلية، تُصنَّف الدفاعات بدقة حسب خصائصها الأمنية (المنع، الكشف في وقت التشغيل، والاحتواء):
| الثغرة | النظام الفرعي | آلية الهجوم | الخطورة | وضع الدفاع | آلية التنفيذ |
|---|---|---|---|---|---|
| CVE-2026-53266 | جسر Netfilter (ebtables) | تجاوز حسابي في قواعد إعادة كتابة جدول ARP للجسر | عالية (تلف الذاكرة) | المنع (نزع السلاح) | إخلاء RAM (modprobe -r) + تجاوز المحمل (/bin/true) |
| CVE-2025-39964 | Crypto Netlink (AF_ALG) | اقتطاع الأعداد الصحيحة في تخصيص مقبس netlink للتشفير | عالية (LPE / اختراق) | الكشف (eBPF) / البوابة | eBPF الحديث (sys_enter_socket، النطاق 38) + SECCOMP |
| CVE-2025-39682 | TLS النواة (kTLS) | خلل معالجة السجل صفري الطول في TCP ULP | عالية (ذعر النواة / الكومة) | الكشف (eBPF) | eBPF الحديث (sys_enter_setsockopt، TCP_ULP 31 و SOL_TLS 282) |
flowchart TD
subgraph Ring3 ["User Space / Container Pod (Ring 3)"]
Workload["Container Workload / Untrusted Process"]
Probe["Exploit Vectors: socket(AF_ALG) or setsockopt(TCP_ULP)"]
Workload --> Probe
end
subgraph Ring0 ["Linux Kernel (Ring 0)"]
SyscallTrap["Syscall Trap (sysenter)"]
Probe --> SyscallTrap
Tracepoint["Kernel Tracepoint: sys_enter"]
SyscallTrap --> Tracepoint
subgraph eBPFEngine ["Modern eBPF Detection (CO-RE Ring Buffer)"]
Filter{"Syscall Gating:\n- domain == 38 (AF_ALG)\n- SOL_TCP + TCP_ULP\n- SOL_TLS (282)"}
Tracepoint --> Filter
end
Disarmed["Modprobe Hook: /bin/true\n(ebtables evicted & blocked)"]
UserNS["containerd v2.2.4 User Namespace Remap\nContainer UID 0 -> Host UID 4050714624\n(Bounded Credential Containment)"]
Filter -- "Match (<1ms)" --> AlertRingBuf["Ring Buffer Emission"]
Filter -- "Pass" --> KernelExec["Normal Execution Path"]
KernelExec --> UserNS
end
subgraph SecurityPipeline ["Reactive Event Pipeline"]
Falcosidekick["Falco Daemon & Sidekick (:2801)"]
Forwarder["Event Forwarder Daemon (:9876)"]
NATSBus["NATS Security Bus (sovereign.security.alert)"]
AlertRingBuf --> Falcosidekick
Falcosidekick --> Forwarder
Forwarder --> NATSBus
end
subgraph Enforcement ["Automated Remediation & Audit"]
Remediator["Dynamic Bouncer (CrowdSec / nftables Drop)"]
AuditLedger["Cryptographically Tamper-Evident Hash Chain\n(SHA-256 Chaining & Cross-Node Replication)"]
NATSBus --> Remediator
NATSBus --> AuditLedger
end
classDef danger fill:#ffdddd,stroke:#ff0000,stroke-width:2px;
classDef safe fill:#ddffdd,stroke:#00aa00,stroke-width:2px;
classDef arch fill:#f0f4f8,stroke:#0066cc,stroke-width:1px;
class Probe danger;
class Disarmed,UserNS,AuditLedger safe;من الأخطاء الشائعة مع تجاوزات /etc/modprobe.d/ أن install /bin/true يحظر فقط محاولات تحميل الوحدة اللاحقة. إذا قامت شبكة الجسر (Docker، CNI القديم) بتحميل ebtables في وقت سابق من دورة حياة المضيف، يبقى الكود المصاب نشطًا في ذاكرة النواة.
يتطلب نزع السلاح بدون توقف تسلسلًا من خطوتين:
/bin/true لمنع إعادة التحميل.# Step A: Evict active ebtables modules from running kernel RAM
sudo modprobe -r ebtable_nat ebtable_filter ebtable_broute ebt_snat ebt_dnat ebt_arpreply ebtables 2>/dev/null || true
# Step B: Seal the loader via /etc/modprobe.d/blacklist-ebtables.conf
sudo tee /etc/modprobe.d/blacklist-ebtables.conf << 'EOF'
# Mitigation for CVE-2026-53266: Netfilter ARP table corruption
install ebtables /bin/true
install ebtable_nat /bin/true
install ebtable_broute /bin/true
install ebtable_filter /bin/true
install ebt_snat /bin/true
install ebt_dnat /bin/true
install ebt_arpreply /bin/true
blacklist ebtables
blacklist ebtable_nat
blacklist ebt_snat
blacklist ebt_arpreply
EOF
# Test explicit loading:
$ sudo modprobe ebt_snat
$ lsmod | grep ebt
# Output: (Empty - 0 modules resident in kernel memory)
sys_enter عبر مخازن حلقية حديثة لـ eBPF، مما يوفر تنبيهات دون مللي ثانية إلى SIEM/NATS. مُحسَّن للرؤية بدون حمل إضافي دون تعديل تدفق تحكم النواة.-EACCES)، يمكن لمسبار eBPF LSM أو ملف تعريف SECCOMP إسقاط استدعاء النظام قبل التنفيذ.يحدث تمكين TLS النواة على اتصال TCP في مرحلتين متميزتين:
setsockopt(fd, SOL_TCP=6, TCP_ULP=31, "tls", 4) يربط بروتوكول الطبقة العليا.setsockopt(fd, SOL_TLS=282, TLS_TX/TLS_RX, ...) يهيئ مفاتيح التشفير.التصفية على SOL_TLS (282) فقط تفوت مرحلة ربط ULP. تقيّم القاعدة كلا المرحلتين:
# falco-rules-kernel-cve.yaml
customRules:
rules-kernel-cve.yaml: |-
- rule: Detect AF_ALG Crypto Socket Creation (CVE-2025-39964)
desc: Detects creation of Crypto API Netlink sockets used in local privilege escalation
condition: evt.type = socket and evt.rawarg.domain = 38
output: "Active Exploit Probe: AF_ALG socket requested (domain=%evt.rawarg.domain type=%evt.rawarg.type user=%user.name proc=%proc.name container=%container.id)"
priority: WARNING
tags: [cve, zero-day, cve-2025-39964, crypto, container_escape]
- rule: Detect Container Kernel TLS Activation (CVE-2025-39682)
desc: Detects container workloads attaching kTLS TCP_ULP or configuring SOL_TLS
condition: container.id != host and evt.type = setsockopt and
((evt.rawarg.level = 6 and evt.rawarg.optname = 31) or (evt.rawarg.level = 282))
output: "Container kTLS Activation Detected (level=%evt.rawarg.level optname=%evt.rawarg.optname user=%user.name proc=%proc.name container=%container.name)"
priority: WARNING
tags: [cve, zero-day, cve-2025-39682, ktls, tcp_ulp]
على نوى لينكس الحديثة (Linux 7.0+ HWE)، يواجه محرك المفتش في مساحة المستخدم لـ Falco (sinsp) عدم تطابق في تحليل السجلات على معاملات openat (sinsp_exception: could not parse param 2 (name)).
لضمان استقرار DaemonSet المستمر دون حلقات انهيار:
falco:
base_syscalls:
custom_set: ['!openat']
إذا كان يجب منع أحمال العمل داخل الحاوية بشكل صارم من استدعاء AF_ALG، فطبّق ملف تعريف SECCOMP يُرجع SCMP_ACT_ERRNO:
{
"defaultAction": "SCMP_ACT_ALLOW",
"syscalls": [
{
"names": ["socket"],
"action": "SCMP_ACT_ERRNO",
"args": [
{
"index": 0,
"value": 38,
"op": "SCMP_CMP_EQ"
}
]
}
]
}
root داخل بنية بيانات اعتماد العملية (current->cred).hostUsers: false)، يُعيَّن جذر الحاوية (UID 0) إلى نطاق مضيف غير مميز (معرّف المضيف 4050714624). تبقى تصعيدات الاعتماد المحدودة محصورة داخل مساحة الأسماء غير الجذرية.apiVersion: v1
kind: Pod
metadata:
name: hardened-workload
spec:
runtimeClassName: runc
hostUsers: false # Remaps container root away from host root
containers:
- name: app
image: app:latest
$ cat /proc/$(pgrep -f hardened-workload)/uid_map
0 4050714624 65536
يمكن نظريًا تعديل ملفات السجلات المحلية على مضيف مخترق إذا حصل المهاجم على تنفيذ غير مقيد في ring-0. تتطلب عدم القابلية للتغيير الحقيقية إما وسائط فيزيائية تُكتب مرة واحدة أو توزيعًا تشفيريًا:
192.0.2.52)، مما يمنع إعادة كتابة السجلات من جانب واحد بواسطة مضيف مخترق واحد.{
"index": 386200,
"timestamp": "2026-09-22T08:58:36.564478+00:00",
"topic": "sovereign.security.alert",
"prev_hash": "b2f6ef1e467cf8402da283f58e470ee64993a479a957a0914ec8c351be7fa83d",
"hash": "cece8f9bd8839d3753232dd7e504c538a0f58fe0bcf2e260fbefb7d27e77b8cf",
"data": {
"output": "Active Exploit Probe: AF_ALG socket requested (domain=38 type=5 user=root ...)",
"priority": "Warning",
"rule": "Detect AF_ALG Crypto Socket Creation (CVE-2025-39964)"
}
}
أُجري التحقق باستخدام تخصيص مقبس AF_ALG اصطناعي في حاوية اختبار غير مميزة:
import socket
# Requests AF_ALG Netlink family (domain 38, SOCK_SEQPACKET 5)
s = socket.socket(38, socket.SOCK_SEQPACKET, 0)
socket(38, 5, 0) يستدعي sys_enter_socket.domain == 38 وترسل الحدث إلى المخزن الحلقي.:9876).sovereign.security.alert.$ python3 fsm_audit_vault.py --verify
# Verified 386,213 records. Zero tampering detected.
يتضمن هذا المستودع تكوينات جاهزة للإنتاج للنشر الفوري:
|-- etc/
| \-- modprobe.d/
| \-- blacklist-ebtables.conf # Modprobe loader override
|-- helm/
| |-- falco-rules-kernel-cve.yaml # Falco modern eBPF rules (CO-RE)
| \-- README.md # One-line Helm deployment guide
|-- k8s/
| \-- pod-userns-hardened.yaml # containerd v2.2.4 UserNS manifest
|-- scripts/
| |-- evict-and-harden.sh # Two-step module eviction & sealing
| \-- verify-mitigation.sh # Automated verification & CI test suite
|-- seccomp/
| \-- seccomp-block-af-alg.json # Inline SECCOMP blocking profile (EACCES)
|-- vault/
| \-- audit_vault.py # Cryptographic SHA-256 hash-chain engine
|-- README.md
\-- LICENSE
lsmod وأخلِ الوحدات المقيمة صراحةً (modprobe -r).TCP_ULP (SOL_TCP=6، optname=31) وتهيئة الخيارات (SOL_TLS=282).hostUsers: false) يمنع تصعيد الصلاحيات على مستوى الحاوية من المطالبة بسهولة بجذر ring-0 للمضيف.يُصان بواسطة فريق Sovereign Systems & Security Architecture.
مُختبر إنتاجيًا على Linux HWE و Kubernetes CRI v1.30 (containerd v2.2+).