> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/ar/useful-resources/bug-bounty/gitbook-ai-assistant-replay-poc.md).

# إثبات مفهوم إعادة تشغيل GitBook AI Assistant

[Jordanmacia/gitbook-ai-chat-replay-poc](https://github.com/Jordanmacia/gitbook-ai-chat-replay-poc) يوثّق مشكلة مُعالَجة في GitBook AI Assistant حيث كان من الممكن إعادة بناء مسار الطلب لإجراء خادم في Next.js من بيانات وقت التشغيل المرئية للعميل ثم إعادة تشغيله عبر عميل محلي خارجي.

{% hint style="success" %}
الحالة: تم الإصلاح. تم الإبلاغ عن الثغرة إلى GitBook، ويُطبِّق الخلفي الآن ضوابط الاستحقاق والنطاق والجلسة من جهة الخادم. احتفظ بهذه الصفحة كدراسة حالة تاريخية في مجال مكافآت الثغرات، وليس كدليل استغلال مباشر.
{% endhint %}

## لماذا هذا مهم

تقدّم GitBook AI Assistant كميزة مدفوعة ضمن خطة Ultimate. إذا كانت شاشة المعاينة أو التخصيص تكشف بيانات وصفية قابلة لإعادة التشغيل من الخلفية الإنتاجية، ولم يتحقق الخلفي من الاستحقاق والنطاق من جهة الخادم، تصبح المشكلة أكثر من مجرد تجاوز للواجهة: فقد تتحول إلى إساءة استخدام لميزة مدفوعة، وإساءة استخدام للأتمتة، وربما إساءة استخدام لتكاليف الموارد.

<figure><img src="https://raw.githubusercontent.com/Jordanmacia/gitbook-ai-chat-replay-poc/main/ultimate-pricing.png" alt="GitBook Ultimate pricing showing AI Assistant"><figcaption><p>يُقدَّم AI Assistant كجزء من تسعير GitBook Ultimate.</p></figcaption></figure>

<figure><img src="https://raw.githubusercontent.com/Jordanmacia/gitbook-ai-chat-replay-poc/main/preview-assistant.png" alt="GitBook Assistant preview mode"><figcaption><p>وضع معاينة المساعد معروض في واجهة تخصيص GitBook.</p></figcaption></figure>

## فيديو PoC

{% embed url="<https://github.com/user-attachments/assets/2c265d4a-e3c7-4438-841d-d129600980e0>" %}

## ملخص الاكتشاف

| النطاق            | ملاحظات                                                       |
| ----------------- | ------------------------------------------------------------- |
| Product           | GitBook AI Assistant.                                         |
| نوع البحث         | إفصاح مسؤول / دراسة حالة على نمط مكافآت الثغرات.              |
| البدائية الأساسية | إعادة تشغيل طلب إجراء الخادم.                                 |
| إجراء الخلفية     | `streamAIChatResponse`.                                       |
| الخطر الرئيسي     | يجب أن تتم عمليات التحقق من الاستحقاق والنطاق على جهة الخادم. |
| الحالة            | تم الإصلاح بواسطة GitBook.                                    |

الدرس المهم بسيط: قد يكون معرّف إجراء الخادم مرئيًا في JavaScript من جهة العميل، لكنه لا يجب أن يعمل كآلية تفويض. ما يزال على الخلفية التحقق بشكل مستقل من استحقاق الخطة، وملكية الموقع، وحدود المعاينة/الجلسة، وقيود CSRF/الأصل، ومعدلات الطلب.

## الأثر

| منطقة التأثير          | ما الذي كان يمكن أن يحدث خطأ                                               |
| ---------------------- | -------------------------------------------------------------------------- |
| تجاوز الميزة المدفوعة  | قد يُستخدم AI Assistant خارج مسار واجهة خطة Ultimate المقصود.              |
| إساءة استخدام المعاينة | قد تكشف أوضاع التخصيص أو المعاينة بيانات وصفية خلفية قابلة لإعادة التشغيل. |
| الأتمتة                | يمكن تشغيل استعلامات المساعد برمجيًا من عميل مخصّص.                        |
| إساءة استخدام التكلفة  | قد تُستهلك موارد الذكاء الاصطناعي دون بوابة الاستحقاق المتوقعة.            |
| تجاوز واجهة المستخدم   | يمكن تخطي الضوابط أو المطالبات أو بوابات المنتج الموجودة في الواجهة فقط.   |

تعتمد الشدة المقترحة على ما تسمح به الخلفية فعليًا:

| السلوك المؤكد                                                  | الشدة المقترحة |
| -------------------------------------------------------------- | -------------- |
| إعادة التشغيل تعمل فقط للمستخدمين الذين لديهم استحقاق مسبق     | متوسطة         |
| إعادة التشغيل تعمل من المعاينة/التخصيص دون استحقاق مدفوع       | عالية          |
| إعادة التشغيل تعمل لمواقع GitBook العامة العشوائية دون استحقاق | حرجة           |
| إعادة التشغيل تكشف وثائق خاصة دون تفويض                        | حرجة           |

## السبب الجذري

النمط الضعيف هو خطأ في حدود الثقة. يمكن أن تساعد بيانات وقت التشغيل المرئية للعميل في إعادة بناء الطلب:

| المواد المكشوفة                           | لماذا هذا مهم                                              |
| ----------------------------------------- | ---------------------------------------------------------- |
| معرّف إجراء الخادم                        | يوجّه الطلب إلى إجراء الخلفية.                             |
| `spaceId`                                 | يحدد مساحة GitBook.                                        |
| `pageId`                                  | يحدد سياق الصفحة.                                          |
| حالة RSC/الموجّه                          | تساعد في مطابقة شكل طلب Next.js المتوقع.                   |
| شكل جسم الطلب                             | يُظهر كيفية تنظيم استدعاء المساعد.                         |
| ملفات تعريف الارتباط الخاصة بجلسة المتصفح | تحمل جلسة المستخدم إذا تم التقاطها أثناء اختبار مُصرّح به. |

ليست المشكلة أن «إجراءات الخادم مرئية». تظهر المشكلة عندما يقبل الخلفي طلبًا مُعاد تشغيله ومُجمّعًا من بيانات وصفية يمكن ملاحظتها من العميل دون إعادة التحقق من الاستحقاق، والملكية، ونطاق المعاينة، وصحة الجلسة، وCSRF/الأصل، ومعدلات الطلب.

## مسار إثبات المفهوم

يحتوي المستودع على PoC محلي باستخدام Node.js يكتشف بيانات وقت التشغيل الوصفية ويبدأ وكيل HTTPS محلي.

```bash
npm start
```

التدفق عالي المستوى:

1. اطلب صفحة GitBook أو عنوان URL للمعاينة.
2. نزّل HTML الخاص بالصفحة.
3. نزّل أجزاء JavaScript الخاصة بـ GitBook.
4. استخرج `streamAIChatResponse` معرّف إجراء الخادم الحالي.
5. استخرج `spaceId` و `pageId`.
6. افتح Chrome أو Chromium أو Edge للمصادقة.
7. احفظ القيم المطلوبة لوقت التشغيل في `.env`.
8. ابدأ وكيل HTTPS محلي.

ثم افتح:

```
https://localhost:3001
```

تتواصل الواجهة المحلية مع:

```http
POST /api/chat
```

يعيد الوكيل إنشاء طلب GitBook AI Assistant بالرؤوس المكافئة لـ:

```http
accept: text/x-component
content-type: text/plain;charset=UTF-8
next-action: <discovered streamAIChatResponse action id>
next-router-state-tree: <router state>
origin: <target GitBook origin>
referer: <target GitBook URL>
cookie: <captured GitBook cookies>
```

تُرجع عملية الإعادة الناجحة دفق React Server Components يحتوي على أحداث استجابة الذكاء الاصطناعي. يحلّل الوكيل المحلي الإجابة النهائية ويُرجع استجابة JSON عادية لواجهة PoC.

## الإشارات الشائعة

| الاستجابة           | المعنى                                        |
| ------------------- | --------------------------------------------- |
| `400 طلب غير صالح`  | معرّف إجراء الخادم قديم أو غير صحيح.          |
| دفق RSC مع `digest` | الإجراء موجود، لكن الجسم أو السياق غير صالح.  |
| `401` / `403`       | تم رفض الجلسة أو التفويض.                     |
| `text/x-component`  | نوع محتوى متوقع لدفق React Server Components. |

## المتطلبات

| المتطلب      | ملاحظات                               |
| ------------ | ------------------------------------- |
| Node.js      | الإصدار 18 أو أحدث.                   |
| المتصفح      | Chrome أو Chromium أو Microsoft Edge. |
| OpenSSL      | مطلوب في `PATH` لمواد HTTPS المحلية.  |
| نظام التشغيل | يدعم PoC أنظمة Windows وLinux وmacOS. |

## تنظيف

استخدم أمر تنظيف المستودع بعد الاختبار:

```bash
npm run stop
```

يؤدي إلى مسح عمليات PoC الجارية، و `.env` القيم الحساسة، وملفات TLS المحلية المُولَّدة، وملف تعريف المصادقة المخصص للمتصفح.

## المعالجة

الضوابط الموصى بها:

| الضبط                                                   | الغرض                                                   |
| ------------------------------------------------------- | ------------------------------------------------------- |
| فرض استحقاق الخطة داخل `streamAIChatResponse`           | منع تجاوز الميزة المدفوعة.                              |
| عامل `next-action` كبيانات توجيه وصفية                  | تجنب الخلط بين معرّفات الإجراءات والتفويض.              |
| اربط استدعاءات المعاينة برموز قصيرة الأجل يصدرها الخادم | أبقِ الوصول إلى المعاينة داخل نطاق المعاينة.            |
| منع إعادة تشغيل رمز المعاينة                            | أوقف إعادة الاستخدام الخارجي خارج الجلسة المقصودة.      |
| تحقق `spaceId` و `pageId` من جهة الخادم                 | تأكد من أن السياق المطلوب ينتمي إلى النطاق المصرح به.   |
| ارفض السياق غير المطابق الذي يرسله العميل               | منع تبديل السياق.                                       |
| فرض CSRF و `Origin` الضوابط الصارمة                     | تقليل إساءة الاستخدام عبر المواقع والبرمجي.             |
| ضع حدودًا حسب المستخدم والمنظمة والموقع وIP والجلسة     | تحديد الأتمتة وإساءة استخدام التكلفة.                   |
| مراقبة إعادة تشغيل إجراء الخادم البرمجية                | اكتشاف أنماط إعادة التشغيل غير المتصفح أو غير المعتادة. |

## الدروس المستفادة

1. تُعد ميزات المعاينة حدودًا أمنية عندما تتعامل مع خلفيات مدفوعة أو إنتاجية.
2. الضوابط من جهة العميل مفيدة لتجربة المستخدم، لكنها ليست تفويضًا.
3. يجب التعامل مع معرّفات إجراءات الخادم في Next.js باعتبارها تفاصيل توجيه عامة.
4. تحتاج ميزات الذكاء الاصطناعي إلى ضوابط للتكلفة والاستحقاق بقدر حاجتها إلى ضوابط الوصول إلى البيانات.
5. تكون تقارير مكافآت الثغرات أقوى عندما تفصل بين السلوك الملحوظ، والأثر المحتمل، والمعالجة الموصى بها.

## المراجع

* [Jordanmacia/gitbook-ai-chat-replay-poc](https://github.com/Jordanmacia/gitbook-ai-chat-replay-poc)
* [ملف README في المستودع](https://github.com/Jordanmacia/gitbook-ai-chat-replay-poc/blob/main/README.md)
* [مشغّل PoC](https://github.com/Jordanmacia/gitbook-ai-chat-replay-poc/tree/main/scripts)
* [الوكيل المحلي](https://github.com/Jordanmacia/gitbook-ai-chat-replay-poc/blob/main/server.js)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/ar/useful-resources/bug-bounty/gitbook-ai-assistant-replay-poc.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
