
أداة بحث في ثغرات نواة لينكس مدركة للمصدر (Provenance-aware) تُستخدم في التحقيق في الثغرة الأمنية CVE-2026-53075
أداة بحث · استيراد أصلي: 3 أبريل 2026 · مراجعة توثيق الإصدار v2: 11 يوليو 2026
إشارة خارجية: من توزيع الانتباه إلى الفرز الواعي بالمصدر
استخدم ملاحظات قابلة لإعادة الإنتاج لتوجيه انتباه النموذج، ثم استخدم مصدر المستودع لتنظيم قوائم المراجعة—وليس أبدًا لإثبات الادعاءات.
نسب المشروع— Kernel Codex Harness v1 · توزيع الانتباه → Kernel Codex Harness v2 · الفرز الواعي بالمصدر
حالة المشروع. هذا المستودع هو أداة بحث مساعدة بنماذج لغوية كبيرة (LLM) تطور سير عمل توزيع الانتباه من الإصدار v1 إلى الفرز الواعي بالمصدر للتحقيق الفعلي في ثغرات نواة Linux. استُخدم هذا الإصدار لاكتشاف الثغرة المنشورة باسم CVE-2026-53075. ليس أداة كشف تلقائي للثغرات، ولا أداة حكم على الجدة، ولا أداة تحقق من الاستغلال، ولا أداة ضمان أمني للنواة؛ التحقق النهائي والتقرير يتمان بواسطة البشر.
الملخص— عند ترك نموذج لغوي كبير يستكشف قاعدة كود ضخمة مثل نواة Linux مباشرة، يتشتت السياق وتختلط بسهولة وجود واجهات برمجية خطرة مع إمكانية الهجوم الفعلية. يعالج Kernel Codex Harness v2 هذه المشكلة عبر مرحلتين من معالجة . قبل استدعاء النموذج، تُرتَّب الملفات المرشحة عبر أوزان المسارات، والضربات المعجمية، وتداخل syzbot المخزن لتوزيع الانتباه. بعد استجابة النموذج، تُدمج حالة Git (الفرع، HEAD، الحالة المتسخة) مع مراجع CVE والالتزامات والعلامات المعروفة المستخرجة من الاستجابة لتصنيف النتائج القوية في مجموعات مراجعة واعية بالمصدر. استُخدمت هذه الأداة في تحقيق فعلي في نواة Linux اكتشف خللًا في التحقق من صلاحيات مساحة اسم الشبكة المستهدفة في PPP، نُشر باسم . الفرز هو أسلوب استدلالي لتنظيم قوائم التحقيق، وخاصةً تعني فقط عدم العثور على أدلة معروفة أو مشكلات مصدر، وليست إثباتًا للجدة. تتطلب جميع النتائج إعادة تحقق بشرية من قابلية الوصول من مساحة المستخدم، وكسر الثوابت، والأثر الملموس.
new_candidateمصطلحات الفهرس— نواة Linux، بحث الثغرات، إشارة خارجية، مصدر، فرز استدلالي، تنسيق نماذج لغوية كبيرة، syzbot، Codex.
هناك نوعان مختلفان من عدم اليقين في مراجعة أمن النواة.
كانت المشكلة المركزية في v1 هي الأولى، أي توزيع الانتباه. يحافظ v2 على هذا المبدأ ويوسع المشكلة الثانية إلى فرز واعٍ بالمصدر. استُخدم كلا الإصدارين في تحقيقات فعلية؛ أدى التحقيق المدعوم بـ v1 إلى CVE-2026-31720، وأدى التحقيق المدعوم بـ v2 إلى CVE-2026-53075.
تُستخدم الملاحظات خارج النموذج لتضييق نطاق التحقيق، وبعد استجابة النموذج يُرفق مصدر مستودع قابل للتحقق. لا تثبت أي إشارة في أي مرحلة وجود ثغرة أو جدة.
الإشارة الخارجية قبل الاستدلال هي ملاحظات تُحسب قبل تشغيل النموذج، وليست حكمًا من نموذج لغوي كبير.
باستخدام نفس شجرة المصدر والملف الشخصي وJSON syzbot المخزن، يمكن إعادة حساب ترتيب المرشحين. هذه الدرجة ليست احتمالًا أو قابلية استغلال، بل ترتيب نسبي لتحديد من ننظر إليه أولًا.
تجمع مرحلة ما بعد الاستدلال المعلومات التالية مع الحكم النموذجي القوي.
في هذا المستند، تشير الإشارة الخارجية بعد الاستدلال فقط إلى المصدر الذي جُمع بشكل مستقل عن النموذج، مثل مستودع Git/الحالة، والفرع، وHEAD، والحالة المتسخة، ونسب الالتزامات المحلية. مراجع CVE والالتزامات والعلامات المعروفة هي مراجع مشتقة من النموذج مستخرجة من استجابته، وليست إشارة خارجية أو حقيقة موثوقة. يجمع الفرز بين نوعي المدخلات لكنه يسجل مصدر كل منهما بشكل منفصل.
تُنظم النتائج القوية تشغيليًا في إحدى مجموعات المراجعة التالية.
| المجموعة | المعنى |
|---|---|
new_candidate | مرشح تم التحقق من مصدره ولم تُكتشف إشارات حظر متسخة/معروفة |
known_issue | مرشح يحتوي على مرجع معروف غير منفي، أو استجابة تشير إلى علاقة إصلاح/أعلى المنبع مع التزام موجود في HEAD الحالي |
dirty_tree_suspect | مرشح لا يمكن استبعاد تأثير مستودع متسخ أو هدف متسخ عليه |
provenance_unknown | مرشح تعذر التحقق بشكل موثوق من مستودع Git أو حالته أو HEAD |
novelty_proven في جميع نتائج التصنيف هو false. new_candidate لا تعني "ثغرة جديدة"، بل قائمة انتظار يستمر فيها البشر في تحقيق الجدة أولًا.
يفحص التدقيق أولًا الحدود التي تبدأ من مساحة المستخدم، مثل syscall وioctl وnetlink وprocfs وأنظمة الملفات وBPF وخطافات برامج التشغيل. بعد ذلك فقط تُقيَّم فئات الثغرات مثل UAF وOOB وrefcount والسباق وتسريب المعلومات وفحوصات الصلاحيات.
تُقيَّد وحدة التحقيق الواحدة بملف واحد ومسارات الاستدعاء والتفكيك والتحرير القريبة منه. يُحدَّد عدد المتابعات اليدوية التي يقترحها النموذج بحد أقصى مرتين للحفاظ على مسارات قصيرة قابلة للتحقق بدلًا من استكشاف واسع.
يجب أن يشرح النتيجة القوية على الأقل ما يلي.
يقوم المحلل اللغوي بتطبيع الحكم والهدف التالي فقط، ولا يثبت تلقائيًا اكتمال هذه الأدلة.
انطلق التدفق الأولي من فكرة التحليل على مستوى الملف، وتوسيع السياق المحدود، والمخرجات المنظمة التي استخدمتها أداة vulnhuntr من Protect AI [1]. أُعيد تصميم هذا المشروع ليناسب سطح نواة Linux القابل للوصول من مساحة المستخدم، ودورة حياة كائنات النواة، ومسارات التفكيك، وتداخل syzbot. المساهمة الإضافية لـ v2 هي وضع مرحلة فرز النتائج باستخدام مصدر المستودع بعد توزيع الانتباه.
الشكل 1. الإشارة الخارجية قبل الاستدلال ترتب وحدات المراجعة القابلة لإعادة الإنتاج. الفرز بعد الاستدلال يجمع بين مصدر Git المستقل عن النموذج ومراجع الاستجابة المشتقة من النموذج، دون معاملة الأخيرة كإشارة خارجية أو حقيقة موثوقة. يبقى التحقق البشري خارج المرحلتين الآليتين.
الجدول الأول — مسؤوليات الوحدات الرئيسية
| الوحدة | المسؤولية |
|---|---|
targeting.py | استكشاف ملفات النواة وتسجيل درجات إشارات المسار والمعجم وsyzbot |
models.py | Candidate وSignal وExternalSignal المشتق من syzbot |
bundle.py | إنشاء البيان وفهرس الجلسة وحزمة المطالبات/المقتطفات |
prompting.py | مطالبات تدقيق النواة المرتكزة على قابلية الوصول والثوابت |
session.py | تخزين حالة المراجعات المعلقة والسجل وعمق المتابعة |
ingest.py | تطبيع الحكم الصارم والهدف التالي الوحيد |
repo_state.py | جمع فرع Git وHEAD والحالة والمسارات المتسخة والنسب |
finding_triage.py | تصنيف المجموعات الاستدلالية بناءً على المصدر والمراجع المعروفة |
autopilot.py | تنفيذ Codex بميزانية زمنية، والاستيعاب، والأرشفة، وتسجيل النتائج |
syzbot.py | جمع HTML syzbot العام وإنشاء ذاكرة JSON محلية |
cli.py | ربط أوامر scan/review/doctor/autopilot |
يتجاوز الماسح ملفات .c و.h تحت دليل include في الملف الشخصي.
Score(f) = Σ path_weight(f)
+ Σ line_signal_weight(f)
+ Σ syzbot_overlap_weight(f)
يجمع التنفيذ الحالي التطابقات على مستوى السطر ويحد فقط من عدد الإشارات الأعلى المعروضة في المطالبة. تحدد الدرجة ترتيب تحقيق النموذج، لكنها ليست قيمة إحصائية مصححة لاحتمالية الثغرة.
الإشارات الثابتة الرئيسية هي كما يلي.
__user| الملف الشخصي | التركيز |
|---|---|
default | نقاط بداية kernel/mm/net/fs/security/io_uring/lib/drivers |
net | netlink وsocket وskb وXDP |
fs | ioctl وprocfs وseq_file وdebugfs |
io_uring | دورة حياة الطلبات غير المتزامنة والتفكيك |
bpf | المدقق ودورة حياة الخرائط/البرامج وBTF |
drivers | ioctl وDMA وMMIO وتفكيك برامج التشغيل |
يستخرج syzbot-fetch العنوان والنظام الفرعي ونوع الثغرة والملف:السطر من صفحات أخطاء syzbot العامة ويخزنها في JSON. يُستخدم تداخل الملفات الدقيق كإشارة ترتيب قوية، بينما يُستخدم تداخل الأنظمة الفرعية كإشارة ضعيفة. نظرًا لأن لوحة المعلومات المباشرة قد تتغير، فإن وحدة إعادة الإنتاج هي JSON المخزن وقت الجلب. تداخل الانهيارات هو تلميح لاصطياد المتغيرات وليس دليلًا على ثغرة.
ينشئ scan بيان المرشحين المرتب بالكامل وحزمة المطالبات العليا. --limit هو عدد المرشحين المحتفظ بهم في البيان، و--top هو عدد الحزم المُنشأة مسبقًا. يمكن إنشاء الرتب اللاحقة عند الطلب.
تُطبع استجابة النموذج إلى أحد الأحكام التالية.
cve_candidateplausible_security_buglatent_bugnot_cve_candidateneeds_more_contextتستخدم المراجعة اليدوية والطيار الآلي نفس review_state.json ومسار الاستجابة الثابت ومحلل الأحكام.
يتحقق doctor والطيار الآلي من وجود مستودع Git، ونجاح جمع الحالة، والفرع، وHEAD، والمسارات المتسخة. لا تُعتبر الحالة التي لا يمكن تأكيد المصدر فيها نظيفة، بل تُحفظ كـ provenance_unknown.
يتبع فرز الحكم القوي تقريبًا الأولويات التالية.
provenance_unknown،dirty_tree_suspect،known_issue،new_candidate.لا تُستخدم تعبيرات النفي أو عدم الصلة مثل "ليست مشكلة معروفة" أو "غير مرتبطة بـ CVE-…" كأساس للمعرفة. يُحتفظ في الحكم النهائي بالحكم الأصلي مع الفرع وHEAD والحالة والحالة المتسخة والمرجع المطابق والسبب.
يُطبق حاليًا تصنيف المجموعات الواعي بالمصدر وكاتب JSONL على مسار استيعاب الطيار الآلي. تستخدم loop وingest اليدويان نفس حالة الجلسة الأساسية ومحلل الأحكام لكنهما لا ينشئان أداة المجموعات.
اعتماديات وقت تشغيل Python هي المكتبة القياسية فقط.
git clone https://github.com/foxirain/linux-kernel-codex-harness-v2.git
cd linux-kernel-codex-harness-v2
python3 -m venv .venv
source .venv/bin/activate
python -m pip install .
kernel-harness --help
يُضمَّن JSON الملف الشخصي المدمج في العجلة. يمكن تمرير قواعد منفصلة عبر --config /path/to/profile.json.
# 1. تحقق من مصدر المستودع.
kernel-harness doctor /path/to/linux
# 2. أنشئ جلسة مرتبة.
kernel-harness scan /path/to/linux \
--profile net \
--limit 80 \
--top 20 \
--out artifacts
# 3. افحص واعرض مراجعة مركزة واحدة.
kernel-harness inspect artifacts/session-YYYYMMDDTHHMMSSZ --top 10
kernel-harness codex artifacts/session-YYYYMMDDTHHMMSSZ \
--rank 1 \
--include-snippet
تُحفظ استجابة Codex اليدوية في codex_response.txt كما يحدد دليل التشغيل، ثم يمكن استيعابها بالأمر التالي.
kernel-harness loop artifacts/session-YYYYMMDDTHHMMSSZ --include-snippet
kernel-harness status artifacts/session-YYYYMMDDTHHMMSSZ
kernel-harness autopilot artifacts/session-YYYYMMDDTHHMMSSZ \
--duration 30m \
--per-run-timeout 10m \
--include-snippet \
--require-clean-tree \
--stop-on-finding
القيمة الافتراضية لصندوق رمل Codex هي read-only. يسمح --require-clean-tree بالتنفيذ فقط عندما يتم تأكيد مستودع Git وحالته وHEAD وتكون شجرة العمل نظيفة. يتوقف --stop-on-finding فقط عندما تكون نتيجة الفرز الاستدلالي new_candidate.
kernel-harness syzbot-fetch https://syzkaller.appspot.com/upstream \
--out artifacts/syzbot/upstream.json \
--limit 50
kernel-harness syzbot-stats artifacts/syzbot/upstream.json --top 15
kernel-harness scan /path/to/linux \
--profile fs \
--syzbot-json artifacts/syzbot/upstream.json \
--out artifacts
artifacts/session-<timestamp>/
├── SESSION.md
├── targets.json
├── finding_template.json
├── review_state.json
├── codex_response.txt # موجود عندما تكون الاستجابة معلقة
├── bundles/
├── responses/
└── autopilot/
├── AUTOPILOT_STATUS.txt
├── AUTOPILOT_PROGRESS.txt
├── AUTOPILOT_BASELINE.json
├── AUTOPILOT_FINDINGS.txt
├── AUTOPILOT_FINDINGS_NEW.txt
├── AUTOPILOT_KNOWN_ISSUES.txt
├── AUTOPILOT_SUSPECTS.txt
├── AUTOPILOT_PROVENANCE_UNKNOWN.txt
├── AUTOPILOT_FINDINGS.jsonl
├── prompts/
├── exec/
├── parse_errors/
└── findings/
├── new/
├── known/
├── suspects/
└── unknown/
يحافظ AUTOPILOT_FINDINGS.jsonl على الحكم والمجموعة والسبب والفرع وHEAD وحالة المصدر والمرجع المطابق ومسارات النتيجة/الأرشيف بصيغة قابلة للمعالجة اللاحقة.
طُبقت v2 البنية الموسعة على تحقيق فعلي في ثغرات نواة Linux.
الجدول الثاني — نتيجة الثغرة المنشورة
| النتيجة العامة | المنطقة المتأثرة | الشدة / CVSS | الثغرة | نموذج التحقيق |
|---|---|---|---|---|
| CVE-2026-53075 | PPP · drivers/net/ppp/ppp_generic.c | افتقرت استدعاءات ioctl الإدارية غير المرتبطة إلى فحص CAP_NET_ADMIN مقابل مساحة اسم المستخدم التي تمتلك مساحة اسم الشبكة المستهدفة | ظهرت النتيجة أثناء تحقيق مدعوم بـ v2؛ ظل التحقق والإفصاح بقيادة بشرية |
CVE-2026-53075: سجل CVE الخاص بـ Linux CNA · CVSS 3.1 · 8.8 High · CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:Hتركز الاختبارات الانحدارية الستة عشر على عقد البرمجيات وقابلية النشر، وليست معيارًا لدقة كشف الأمان.
python -m unittest discover -s tests -v
python -m pip wheel . --no-deps --wheel-dir dist
python -m pip install --force-reinstall dist/*.whl
تشغل GitHub Actions اختبارات الانحدار على Python 3.11 و3.12، وتثبت العجلة، ثم تختبر دخانيًا الملفات الشخصية الستة المعبأة والفحص الافتراضي. الحالة العامة أعلاه هي نتيجة تشغيلية من تحقيق فعلي، لكنها ليست معيارًا لقياس الدقة أو الاستدعاء أو قابلية الاستغلال أو معدل اكتشاف CVEs على مجموعة أشجار Linux تمثيلية.
read-only ويُوصى بالحفاظ عليها.doctor ثم --require-clean-tree.--dangerously-bypass-approvals-and-sandbox إلا في بيئة تجريبية معزولة.new_candidate وknown_issue ليسا حكمًا نهائيًا على الجدة.ركز v1 (المستودع) على مشكلة توزيع انتباه LLM عبر الإشارة الخارجية، واستُخدم في تحقيق فعلي مدعوم بـ v1 اكتشف CVE-2026-31720. يواصل v2 نفس الفلسفة البحثية ويوسعها لتسجيل حالة المستودع والمراجع المشتقة من الاستجابة حتى بعد أن ينتج النموذج نتيجة قوية. في تحقيق لاحق باستخدام هذه البنية، اكتُشفت CVE-2026-53075.
v1: ملاحظات المصدر → ترتيب → مراجعة مركزة
v2: ملاحظات المصدر → ترتيب → مراجعة مركزة → فرز واعٍ بالمصدر
مبدآن يجب الحفاظ عليهما في هذا التطور.
إذا تم التوسع الآن، ستُعطى الأولوية لرسم بياني للاستدعاءات عبر Clang/tree-sitter، وتطبيع الدرجات، وبيان مُصدر وقفل حالة بين العمليات، ومحول قاعدة بيانات CVE/إصلاح موثوقة، وفصل المشغل والفرز وكاتب الأداة. تستخدم كتابة الحالة الحالية ملفات مؤقتة واستبدالًا ذريًا.
لا يحل Kernel Codex Harness v2 محل كشف الثغرات. قبل استدعاء النموذج، توزع الإشارة الخارجية ميزانية التحقيق على مرشحين قابلين للتفسير؛ وبعد استدعاء النموذج، تنظم إشارة المصدر النتائج القوية في قوائم انتظار قابلة للمراجعة. استُخدمت هذه البنية في تحقيق فعلي أدى إلى اكتشاف CVE-2026-53075، والنتيجة الأساسية للمشروع ليست خوارزمية تحكم تلقائي في الجدة، بل سير عمل مراجعة أمنية عملي بنماذج لغوية كبيرة يفصل صراحةً بين توزيع الانتباه والفرز الواعي بالمصدر.
.
├── .github/workflows/ci.yml
├── docs/
│ ├── assets/kernel-harness-v2-architecture.svg
│ ├── AUTOPILOT.md
│ ├── CODEX_CLI.md
│ ├── CODEX_WORKFLOW.md
│ └── SYZBOT.md
├── kernel_harness/
│ ├── resources/
│ │ ├── linux-kernel-default.json
│ │ └── profiles/
│ │ ├── bpf.json
│ │ ├── drivers.json
│ │ ├── fs.json
│ │ ├── io_uring.json
│ │ └── net.json
│ ├── __init__.py
│ ├── __main__.py
│ ├── autopilot.py
│ ├── bundle.py
│ ├── cli.py
│ ├── finding_triage.py
│ ├── ingest.py
│ ├── models.py
│ ├── prompting.py
│ ├── repo_state.py
│ ├── session.py
│ ├── syzbot.py
│ └── targeting.py
├── tests/test_regressions.py
├── .gitignore
├── README.md
└── pyproject.toml
يمكن الاطلاع على التشغيل اليدوي التفصيلي في دليل Codex CLI، والتنفيذ التلقائي والفرز في دليل الطيار الآلي، واستخبارات الانهيارات في دليل syzbot.
[1] Protect AI, "vulnhuntr," مستودع GitHub. https://github.com/protectai/vulnhuntr
[2] Google, "syzkaller and syzbot," مستودع GitHub. https://github.com/google/syzkaller
[3] OpenAI, "Codex CLI." https://developers.openai.com/codex/cli/
مرخص بموجب رخصة Apache 2.0.