
إصلاح القطع الأثرية المشابهة مع العيوب المدمجة
Fix Like Artifacts with Embedded Defects
أداة بحثية لقياس مدى جودة قيام وكلاء الذكاء الاصطناعي بترقيع الثغرات الأمنية.
البدء السريع · مجموعات البيانات · التوثيق · نموذج الأمان · المساهمة
تقوم FLAWED بسحب مشروع مفتوح المصدر عند إصدار معروف باحتوائه على ثغرة، وتُسلّم وكيل ذكاء اصطناعي وصفاً للخلل، وتطلب منه كتابة ترقيع. لا يرى الوكيل أبداً الإصلاح الحقيقي الموجود في المصدر الأصلي.
ثم يتم التحقق من كل ترقيع وتدقيقه وتقييمه في حاويات معزولة، بحيث يمكنك رؤية ليس فقط ما إذا كان النموذج قد أصلح الخلل، بل ما إذا كان قد أدخل ثغرات جديدة أثناء ذلك.
flowchart LR
spec[bug spec] --> clone
clone["clone<br/>(open net)"] --> generate
generate["generate<br/>(offline)"] --> validate
validate["validate<br/>(offline)"] --> ast["ast<br/>(offline)"]
generate -.->|"patch.diff"| store[(Postgres)]
validate -.->|"verdict"| store
ast -.->|"summary"| store
store --> ui[web UI + notebook]تعمل كل مرحلة في حاوية خاصة بها. فقط مرحلة clone لديها وصول إلى الشبكة. كل مرحلة لاحقة مقيّدة على واجهة برمجة تطبيقات مزوّد النموذج اللغوي، بحيث لا يستطيع الوكلاء جلب تلميحات أو الإصلاح الأصلي أثناء التشغيل.
تُشغّل FLAWED واجهات سطر أوامر Claude وCodex وGemini في مواجهة مباشرة بنفس المدخلات.
[!WARNING] تقوم FLAWED بتركيب مقبس Docker (مكافئ لصلاحيات الجذر على المضيف) وتنفّذ كوداً خارجياً غير موثوق داخل حاويات مراحلها. شغّلها على جهاز تثق به لتحمّل هذا العبء. راجع
docs/security-model.md.
تحتاج إلى Docker، مع إمكانية الوصول إلى مقبس الخدمة.
# 1. Configure. Writes .env for you (data dir + provider API keys)
./setup.sh
# 2. Bring up the stack (Postgres, API + worker, web UI, notebook)
docker compose up --build
# 3. Open http://127.0.0.1:8080
ثم ابدأ تشغيلك الأول.
bugs/. اسحب واحدة إلى صفحة Bug Specs في واجهة الويب، أو استخدم سطر الأوامر.
./scripts/import-all-bugs.sh
[!NOTE] التشغيل الأول ضد مصدر كبير (مثل Chromium) يكون بطيئاً. تستنسخ مرحلة التحقق المستودع بأكمله مرة واحدة للمقارنة مع الترقيع الأصلي الحقيقي. يُخزَّن الاستنساخ مؤقتاً ويُعاد استخدامه بعد ذلك.
تحتاج إلى Docker، وNode 20+، وpnpm، وuv، و@devcontainers/cli (npm i -g @devcontainers/cli). يمكن لمستخدمي Nix استخدام nix-shell لكل شيء عدا Docker.
make dev # uv sync + web deps
docker compose up -d postgres # FLAWED needs a Postgres to talk to
cp .env.example .env # points FLAWED_DB_URL at it
uv run flawed init # builds base images, creates the schema
uv run flawed serve # API + worker + webapp on port 8080
لحلقة تطوير الويب، شغّل make web-dev في نافذة طرفية ثانية. يقدّم الواجهة على المنفذ 5173 ويوكّل /api إلى flawed serve.
يوجد devcontainer معزول لتشغيل وكلاء البرمجة بالذكاء الاصطناعي ضد هذا المستودع بأمان، وهو موثّق في .devcontainer/README.md.
مواصفة الخلل هي وحدة المدخل. تحمل مستودعاً، وإصداراً يحتوي على ثغرة، ووصفاً للخلل، ومُعيد إنتاج اختياري، ومجموعة من متغيرات التوجيه التي تحاكي كيف قد يُبلَّغ عن الخلل بشكل واقعي (نتيجة SAST، تقرير مكافأة الثغرات، إشعار محظور، PoC خام، …). المواصفات مُصدَّرة بإصدارات وغير قابلة للتغيير، بحيث لا يتغير توجيه تشغيل تاريخي وحكمه بصمت أبداً.
توجد بنية JSON في bugs.schema.json وهي موثّقة في docs/bug-specs.md. تصف جميع المواصفات المضمّنة ثغرات مُفصح عنها علناً ومُصلحة في المصدر الأصلي.
Postgres هو المصدر الوحيد للحقيقة. توجد بيانات التشغيل الوصفية و بايتات المخرجات (الترقيعات، الأحكام، النصوص، السجلات) في قاعدة البيانات، بحيث يُلتقط النشر بالكامل عبر قاعدة بياناته. دليل data/ هو مساحة عمل مؤقتة تُركّبها المراحل في وقت التشغيل.
scripts/export_dataset.py وscripts/import_dataset.py (متاحان أيضاً من واجهة الويب).scripts/export_artifacts.py.uv run alembic upgrade head تلقائياً عند بدء التشغيل).ننشر مجموعات بيانات جاهزة بحيث يمكنك تحميل حملات مكتملة بدلاً من تشغيل كل شيء بنفسك. كل مجموعة بيانات هي ملف .tar.gz للقطة كاملة واحدة، مستضاف على https://flawed.s3.us-east-1.amazonaws.com.
جميع الحملات في حزمة واحدة.
| الحزمة | الأرشيف |
|---|---|
| جميع الحملات | full.tar.gz |
Snapshots → Import datasets، الصق أحد روابط الأرشيف أعلاه، وانقر Find archives. تستورد FLAWED رابط .tar.gz مباشراً كما هو وتفكّه إلى لقطاتك. ثم استعده من قائمة اللقطات (الاستعادة خطوة منفصلة ومؤكَّدة صراحةً).
يكتشف الاستيراد أرشيفات متعددة دفعة واحدة فقط عندما يكون الرابط حاوية قابلة للسرد أو صفحة فهرس دليل. لا ينطبق أي منهما هنا، لذا استورد الروابط واحداً تلو الآخر.
نزّل أرشيفاً، وفكّه إلى دليل اللقطات (FLAWED_HOST_SNAPSHOT_DIR، أو ./flawed-snapshots افتراضياً)، وسيظهر في قائمة اللقطات جاهزاً للاستعادة.
curl -LO https://flawed.s3.us-east-1.amazonaws.com/compressed/campaigns/full/cve-2026-45185-exim-bdat-uaf_full_gpt-5.5_1782988292.tar.gz
mkdir -p "$FLAWED_HOST_SNAPSHOT_DIR"
tar -xzf cve-2026-45185-exim-bdat-uaf_full_gpt-5.5_1782988292.tar.gz -C "$FLAWED_HOST_SNAPSHOT_DIR"
الاستيراد يهيّئ الحزمة على القرص فقط. أما استعادتها، التي تستبدل النشر الحالي، فتُجرى بشكل منفصل من صفحة اللقطات.
packages/
flawed-core/ models, DB schema, settings
flawed-orchestrator/ run lifecycle, worker pool, devcontainer driver
flawed-stage-*/ the pipeline stages (clone, generate, validate, …)
flawed-agent-runner/ runs INSIDE the container (Claude / Codex / Gemini CLIs)
flawed-api/ FastAPI + SSE + notebook proxy
flawed-cli/ the `flawed` CLI
apps/web/ React + Vite + Tailwind webapp
containers/ base image, network lockdown, notebook container
bugs/ example bug specs
docs/ documentation (see above)
تحتاج الاختبارات إلى Docker. تُشغّل Postgres خاصاً بها عبر testcontainers.
تُصدر FLAWED تحت رخصة MIT. المساهمات مرحّب بها. راجع CONTRIBUTING.md، ويرجى الإبلاغ عن المشكلات الأمنية بشكل خاص وفقاً لـ SECURITY.md.
| الميزة | ما توفره لك |
|---|
| أخذ عينات متكرر | ينفّذ التشغيل عدد N من التكرارات لنفس المدخل، بحيث تكون النتائج توزيعات وليست حكايات فردية. |
| الحملات | توزيع خلل واحد عبر متغيرات المُرَقِّع وأنماط التوجيه، من "fix this plz" الغامض إلى إشعار كامل، ومقارنة النتائج على لوحة تحكم حية. |
| تقييم النتائج | يقع كل ترقيع في واحد من خمسة سيناريوهات، من S1 (إصلاح نظيف) إلى S5 (لم يصلح الخلل وأدخل ثغرة جديدة). |
| التحقق المتقاطع | يُعاد الحكم على الترقيعات بواسطة نماذج أخرى، وتتوسط الأرقام الرئيسية بين عدستي التحقق الذاتي والمتقاطع بحيث لا يهيمن تحيّز حكم واحد. |
| كشف الغش | يُبلّغ المدقّق عن التكرارات التي وجد فيها الوكيل الإصلاح الأصلي بدلاً من حل الخلل بنفسه. |
| الحملة | نموذج المُرَقِّع | الحجم | الأرشيف |
|---|
| CVE-2026-22738 (Spring AI SpEL injection) | claude-opus-4-8 | 515.0 MB | .tar.gz |
| CVE-2026-22738 (Spring AI SpEL injection) | gpt-5.5 | 663.9 MB | .tar.gz |
CVE-2026-31431 (Linux algif_aead) | claude-opus-4-8 | 1.1 GB | .tar.gz |
CVE-2026-31431 (Linux algif_aead in-place) | gpt-5.5 | 966.9 MB | .tar.gz |
| CVE-2026-34197 (ActiveMQ Jolokia RCE) | claude-opus-4-8 | 645.2 MB | .tar.gz |
| CVE-2026-34197 (ActiveMQ Jolokia RCE) | gpt-5.5 | 819.0 MB | .tar.gz |
| CVE-2026-45185 (Exim BDAT use-after-free) | claude-opus-4-8 | 1.1 GB | .tar.gz |
| CVE-2026-45185 (Exim BDAT use-after-free) | gpt-5.5 | 1.0 GB | .tar.gz |
| CVE-2026-8512 (Chromium fsevents UAF) | claude-opus-4-8 | 500.7 MB | .tar.gz |
| CVE-2026-8512 (Chromium fsevents UAF) | gpt-5.5 | 342.7 MB | .tar.gz |
| freenginx-26 (Perl SV refcount UAF) | gpt-5.5 | 166.4 MB | .tar.gz |
| GHSA-wpqr-6v78-jr5g (Gemini CLI trust model) | claude-opus-4-8 | 1.2 GB | .tar.gz |
| GHSA-wpqr-6v78-jr5g (Gemini CLI trust model) | gpt-5.5 | 1.3 GB | .tar.gz |
| المستند | ما يحتويه |
|---|
docs/architecture.md | المكوّنات، تدفق البيانات، تخطيط التخزين |
docs/pipeline.md | المراحل، دلالات التكرار، تخطيط الحاويات |
docs/security-model.md | سياسة الشبكة لكل مرحلة، العزل، نموذج التهديد |
docs/bug-specs.md | عقد المدخل، تركيب التوجيه، الإصدارات |
docs/cli.md | مرجع أوامر flawed + متغيرات البيئة |
docs/webapp.md | جولة في الواجهة |
docs/notebook.md | تكامل JupyterLab + وحدة المساعدة flawed |
| المهمة | الأمر |
|---|
| مزامنة جميع تبعيات Python + Node | make dev |
| تشغيل الاختبارات | make test |
| فحص الكود | make lint |
| تنسيق تلقائي | make format |
| خادم تطوير الويب (المنفذ 5173) | make web-dev |
| اختبار E2E السريع | make e2e |