ترجمة آلية لم تُراجَع بعد. النص الإنجليزي هو المرجع في حال الاختلاف.
الملخص
### الأثر عند تشغيل `@sylphx/pdf-reader-mcp` كخادم HTTP (`MCP_TRANSPORT=http`)، فإنه يقرأ متغيرة البيئة `MCP_API_KEY` ويسجل `API key authentication enabled (X-API-Key header)` عند بدء التشغيل، ولكنه لم يقم أبداً بالتحقق من صحة ترويسة `X-API-Key` على الطلبات الواردة. تم قراءة المفتاح إلى متغير ولم يتم فرضه مطلقاً على مسار الطلب. ونتيجة لذلك، قبلت نقطة النهاية `/mcp` طلبات دون مصادقة. بالتزامن مع عنوان الربط الافتراضي `0.0.0.0` (جميع الواجهات)، يمكن لأي عميل قادر على الوصول إلى المنفذ استدعاء كل أداة PDF وقراءة محتويات أي ملف PDF يمكن لعملية الخادم فتحها في أي مكان على المضيف. تمكّن المصادر القائمة على URL أيضاً من تنفيذ SSRF محدود (يتم حظر العناوين الخاصة/الحلقة المغلقة افتراضياً ما لم يتم تحديد `--allow-private-ips`). جعل سجل بدء التشغيل المضلل هذا التعرض غير ملحوظ: اعتقد المشغل الذي قام بضبط `MCP_API_KEY` بشكل معقول أن الخادم محمي بينما لم يكن كذلك. يؤثر هذا فقط على وسيط نقل HTTP الاختياري؛ بينما لا يتأثر وسيط النقل الافتراضي `stdio`. ### التصحيحات تم إصلاح المشكلة في `@sylphx/[email protected]`. يفرض الإصلاح ترويسة `X-API-Key` بمقارنة ذات وقت ثابت (مع رفض المفاتيح المفقودة/غير المتطابقة برمز HTTP 401)، ويغير مضيف الربط الافتراضي إلى `127.0.0.1` (الحلقة المغلقة)، ويصدر تحذير بدء التشغيل عند الربط بمضيف غير حلقة مغلقة بدون مفتاح API. ### الحلول البديلة بالنسبة لعمليات النشر التي لا يمكنها الترقية فوراً: - الربط بالحلقة المغلقة فقط: `MCP_HTTP_HOST=127.0.0.1`. - وضع وكيل عكسي أمام الخادم يفرض المصادقة. - استخدام وسيط النقل الافتراضي `stdio` بدلاً من HTTP. - تقييد الوصول إلى نظام الملفات باستخدام `--allow-dir` / `MCP_PDF_ALLOWED_DIRS`. تم الإبلاغ بشكل خاص بواسطة novice-22 عبر الإفصاح المسؤول.
المعالجة
المراجع
- تحذيرhttps://github.com/advisories/GHSA-q344-5v34-gm84
- مرجعhttps://github.com/SylphxAI/pdf-reader-mcp/security/advisories/GHSA-q344-5v34-gm84
- مرجعhttps://github.com/SylphxAI/anymd/pull/332
- مرجعhttps://github.com/SylphxAI/anymd/commit/4c35f72862d729301e3912ab8c8317d2828cf4c2
- مرجعhttps://github.com/SylphxAI/anymd/releases/tag/v3.0.1