Sploitus

Exploit for cve-2026-46331-audit

kitploit · 2026-08-25

Exploit Code

MARKDOWN142 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-QUAERENDIR-CVE-2026-46331-AUDIT
# cve-2026-46331-audit

سكربت تدقيق للقراءة فقط خاص بـ **CVE-2026-46331** (المعروف أيضًا باسم **pedit COW**) — خلل جزئي في النسخ عند الكتابة (partial copy-on-write) في إجراء `act_pedit` ضمن `net/sched` في نواة Linux، يسمح لمستخدم محلي غير مميَّز بإفساد ذاكرة التخزين المؤقت للصفحات (page cache) وتصعيد الصلاحيات إلى الجذر.

root@kitploit:~
    
    
       ____  _____ ____ ___ _____      ____ _____        __
      |  _ \| ____|  _ \_ _|_   _|    / ___/ _ \ \      / /
      | |_) |  _| | | | | |  | |     | |  | | | \ \ /\ / /
      |  __/| |___| |_| | |  | |     | |__| |_| |\ V  V /
      |_|   |_____|____/___| |_|      \____\___/  \_/\_/
         CVE-2026-46331    net/sched act_pedit partial COW
    

## الخلاصة

تحسب الدالة `tcf_pedit_act()` نطاق COW الخاص بـ `skb_ensure_writable()` مرة واحدة قبل حلقة المفاتيح، باستخدام `tcfp_off_max_hint`. تضيف المفاتيح المُنمَّطة (typed keys) إزاحة ترويسة وقت تشغيل لا يغطيها التلميح، لذا يقع جزء من عملية الكتابة النهائية خارج المنطقة المُخضعَة للنسخ عند الكتابة (COW'd). النتيجة: تُكتب بيانات عشوائية على صفحات مشتركة في ذاكرة التخزين المؤقت للصفحات، ويمكن تسميم ثنائية `setuid` مخزّنة مؤقتًا (الهدف التقليدي: `/bin/su`) في الذاكرة. تبقى التجزئات على القرص سليمة، ولن ترصدها أدوات مراقبة سلامة الملفات.

ينتمي هذا الخلل إلى العائلة نفسها التي ينتمي إليها Dirty COW (CVE-2016-5195) وDirty Pipe (CVE-2022-0847) وCopy Fail (CVE-2026-31431) وDirty Frag (CVE-2026-46300). نقطة الدخول مختلفة، لكن فشل ملكية الصفحات هو نفسه.

## ما الذي يفعله هذا السكربت

فرز تشخيصي للقراءة فقط بشكل صارم. لا يُحمّل أي وحدة نمطية (module) أبدًا، ولا يلمس sysctl، ولا ينفّذ أي PoC. مصمَّم ليكون آمنًا للتشغيل على بيئات الإنتاج.

  * يجرد النواة الجارية والتوزيعة وإصدار حزمة النواة.
  * يفحص قابلية الوصول إلى `act_pedit` عبر أربع إشارات مستقلة: 
    * محمَّلة حاليًا (`lsmod`)
    * قابلة للتحميل عند الطلب (`modinfo`)
    * مدمجة في النواة الجارية (`/boot/config-$(uname -r)`, `/proc/config.gz`, `modules.builtin`)
    * محظورة عبر `blacklist` أو تجاوز `install ... /bin/true` في `modprobe.d`
  * يعرض قواعد `tc action pedit` الموجودة (معلوماتية فقط؛ دون أي تغييرات).
  * يقرأ بوابات userns: `user.max_user_namespaces` و`kernel.unprivileged_userns_clone` وقيود Ubuntu AppArmor على userns.
  * مصفوفة استدلالية لتصحيحات البائعين وفق `/etc/os-release` (RHEL 8/9/10، Debian 11/12/13/14، Ubuntu 18.04→26.04، SUSE، Amazon Linux، وتوزيعات عائلة Arch ذات الإصدار المتجدد (rolling)).



## الاستخدام

root@kitploit:~
    
    
    sudo ./cve-2026-46331-audit.sh                       # full text report
    sudo ./cve-2026-46331-audit.sh --json                # machine-readable JSON, no banner
    sudo ./cve-2026-46331-audit.sh --quiet --no-hunt     # one-line verdict for mass scans
    sudo ./cve-2026-46331-audit.sh --since 2026-06-01    # widen IoC hunt window
    sudo ./cve-2026-46331-audit.sh --no-banner           # text report without the ASCII banner
    

### أكواد الخروج

### مخرجات نموذجية

انظر `examples/sample-output.txt` لتشغيل كامل، و`examples/sample-output.json` للصيغة JSON.

## نموذج تسجيل المخاطر

الدرجة عبارة عن مزيج موزون من:

تُحصر الدرجة عند 100 كحد أقصى. أي درجة أعلى من ~70 يجب التعامل معها كحالة عاجلة على عقد متعددة المستأجرين / CI / Kubernetes؛ والدرجات الأقل من ~20 عادةً ما تؤكد سلامة المضيف.

## النشر الجماعي

### Ansible

root@kitploit:~
    
    
    ansible -i inventory all -m script \
      -a "cve-2026-46331-audit.sh --json --quiet --no-hunt" \
      --become \
      | tee /tmp/audit.jsonl
    

ثم اجمع النتائج باستخدام `jq`:

root@kitploit:~
    
    
    grep -v '^[a-z]' /tmp/audit.jsonl | jq -s 'group_by(.verdict) | map({verdict: .[0].verdict, hosts: length})'
    

### failed_when في play

root@kitploit:~
    
    
    - name: audit CVE-2026-46331
      ansible.builtin.script: cve-2026-46331-audit.sh --quiet --no-hunt
      register: audit
      failed_when: audit.rc == 2
      changed_when: false
    

## إجراءات التخفيف (إذا احتجت إلى تأجيل التصحيح)

بالترتيب حسب الأولوية. سيقترح السكربت الإجراء المناسب بناءً على ما يجده.

root@kitploit:~
    
    
    # Option 1: block act_pedit if you don't use it.
    tc actions list action pedit                  # MUST be empty before doing this
    echo 'install act_pedit /bin/true' | sudo tee /etc/modprobe.d/disable-act_pedit.conf
    lsmod | grep -q act_pedit && sudo rmmod act_pedit
    

root@kitploit:~
    
    
    # Option 2: restrict unprivileged user namespaces.
    # Will break rootless Podman/Docker, browser sandboxes, Flatpak, unprivileged unshare, some CI sandboxes.
    sudo sysctl -w user.max_user_namespaces=0           # EL-family
    sudo sysctl -w kernel.unprivileged_userns_clone=0   # Debian/Ubuntu
    

الإصلاح الحقيقي هو تحديث نواة من البائع إضافة إلى إعادة تشغيل. `uname -r` بعد إعادة التشغيل هو الدليل الوحيد على ذلك.

## سياق عائلة الخلل

هذه هي التكرار الخامس لنفس الفشل المعماري. عالج كلٌّ منها السبب المباشر، ولم يعالج أيٌّ منها السبب الجذري: مسارات سريعة بنسخ صفري (zero-copy) تشارك الصفحات عبر حدود الملكية، حيث يجب على كل كاتب إثبات الخصوصية قبل تعديل البايتات، في مئات المواقع الاستدعائية.

تعالج Rust داخل النواة هذه الفئة تحديدًا عبر أنواع الملكية. لن يظهر هذا النوع من الخلل في `net/sched` غدًا.

## المراجع

  * NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-46331
  * Red Hat: https://access.redhat.com/security/vulnerabilities/RHSB-2026-008
  * Ubuntu: https://ubuntu.com/security/CVE-2026-46331
  * Debian: https://security-tracker.debian.org/tracker/CVE-2026-46331
  * الالتزام من المنبع ووصفه: راجع مراجع سجل NVD.



## الترخيص

MIT. انظر LICENSE.

## إخلاء المسؤولية

للاستخدام الدفاعي المصرَّح به على الأنظمة التي تملكها أو التي صُرِّح لك صراحةً بتدقيقها. لا ينفّذ السكربت إثبات المفهوم العلني (PoC) أبدًا، ولا يعدّل حالة النظام، ولا يُحمّل أي وحدات نمطية. تعامل مع الحكم بوصفه فرزًا تشخيصيًا أوليًا، لا كدليل على الاختراق ولا كدليل على السلامة.