اختراق Railway: شو انكشف من متغيرات البيئة، وبأي ترتيب تدوّر أسرارك؟
مهاجم فكّ تشفير جزء من متغيرات البيئة المخزّنة على Railway، والشركة لغت كل توكناتها. إذا فتحت حسابك قبل 21 تشرين الأول 2026، غيّر كل سر مخزّن هونيك، وبلّش بقواعد البيانات.

إذا عندك مشروع على Railway، اعتبر كل سر حطيته بمتغيرات البيئة مكشوف لحد ما تغيّره. متغيرات البيئة (environment variables) هي القيم يلي بيقراها تطبيقك وقت التشغيل، متل كلمة سر قاعدة البيانات ومفاتيح الـ API، وRailway أكدت إنو مهاجم سحبها مشفّرة وفكّ تشفير جزء منها. بآخر المقال رح تعرف شو صار، وليش وقف النشر عندك، وبأي ترتيب تغيّر أسرارك، وكيف تتأكد إنو ما حدا استعملها.
شو صار بـ Railway بالضبط؟
مهاجم من برّا دخل على جزء من الأنظمة الداخلية تبع Railway بين 20 و22 تشرين الأول 2026، وسحب متغيرات البيئة المشفّرة من قاعدة بياناتها، وفكّ تشفير قسم منها بمفاتيح سرقها. Railway بتقول إنو هدفه كان مفاتيح مزوّدي الذكاء الاصطناعي.
هيك مشيت الحادثة حسب التقرير الأولي يلي نشرته Railway يوم 22 تشرين الأول، والأوقات بتوقيت UTC:
الوقت | شو صار |
|---|---|
20 تشرين الأول، 13:58 | المراقبة نبّهت الفريق على بطء غير طبيعي، ومن هون الشركة بتحسب بداية الهجوم |
20 تشرين الأول، 14:03 لـ 16:51 | لقوا محاولة رفع صلاحيات (privilege escalation) بأنظمة البناء، ووقّفوا الـ builds |
21 تشرين الأول، 04:24 لـ 05:23 | التحقيق بيّن إنو المهاجم سحب أسرار مشفّرة ولسا ما قدر يفكّها |
21 تشرين الأول، 05:27 لـ 07:25 | المهاجم أخد مفاتيح بيئة الـ CI عندهم، وفكّ فيها ملفات فيها صلاحيات API زيادة |
21 تشرين الأول، 07:25 لـ 09:18 | سجلات قاعدة البيانات ورجت استعلامات على متغيرات البيئة المشفّرة، وجزء منها انفكّ بالمفاتيح المسروقة |
21 تشرين الأول، 09:25 | الشركة بلّغت المزوّدين وطلبت منهم يلغوا المفاتيح |
21 تشرين الأول، 20:19 لـ 22:10 | لغت جلسات المستخدمين، ونشرت إعلان الأمان وإرشادات تغيير المفاتيح |
22 تشرين الأول، 03:32 | تأكدت إنو المهاجم ما عاد عنده وصول |
22 تشرين الأول، 17:00 لـ 22:49 | رجع الـ API كامل، ورجع النشر لكل الباقات |
التقرير ما بيقول من وين دخل المهاجم أول مرة: الشركة ما نشرت تفاصيل الثغرات لسا لحتى تحمي زبائنها، ووعدت بتقرير نهائي. وحسب التقرير، الهجوم كان بدو مفاتيح مزوّدي الذكاء الاصطناعي لهجمات distillation. الـ distillation هي إنك تدرّب نموذج أضعف على أجوبة نموذج أقوى (حسب تعريف Anthropic)، والمفتاح المسروق بيخلي هالأجوبة على حساب صاحبه.
مفاتيح الذكاء الاصطناعي صارت هدف متكرر هالشهر. نفس الشي شفناه بـ برنامج سرقة المفاتيح بنسخة LiteLLM 1.107.0، يلي كان بيسحب مفاتيح المزوّدين من قاعدة بيانات البوابة دفعة وحدة.
مين متأثر، وشو يلي انكشف؟
حسب Railway، 1.85% من مساحات العمل (workspaces) بالكثير كان فيها متغيرات بيئة ممكن تكون انكشفت، وهاد حوالي 100,000 مساحة عمل. بس الشركة بتنصح كل حدا فتح حسابه قبل 21 تشرين الأول يغيّر المفاتيح المخزّنة عندها.
الرقم سقف مش عدد مؤكد. الشركة كتبت إنها ما بتقدر تعرف من الاستعلام لحاله أي مفاتيح بالضبط تأثرت، لأن المفاتيح مشفّرة بطريقة الـ envelope encryption: البيانات بتتشفّر بمفتاح، والمفتاح نفسه بيتشفّر بمفتاح تاني (حسب توثيق AWS). وبتقول إنو المهاجم دوّر على الأهداف الغالية: مساحات عمل فيها عدد كبير من متغيرات البيئة، وبيئات فيها مفاتيح كتير لمزوّدي الذكاء الاصطناعي.
شو كمان بيقول التقرير:
المهاجم ما دخل على حسابات المستخدمين. أما كود المستخدمين، فالشركة لسا ما استبعدت إنو وصله، ورح تحسمها بالتقرير النهائي.
الشركة بعتت للمزوّدين المفاتيح يلي ممكن تكون انفكّت، ولمزوّدين متل GitHub بعتت كل المفاتيح يلي على المنصة، وبعض المزوّدين طلبوا يلغوا الكل. فمفتاح OpenAI أو غيره ممكن يكون انلغى عندك حتى لو مساحة عملك مش من الـ 1.85%، وإيميل الإلغاء ما بيعني إنو مفتاحك انكشف.
لغت كل توكنات الوصول تبع Railway، وغيّرت تثبيتات تطبيق GitHub تبعها، وغيّرت مفاتيح كل الـ storage buckets يلي على المنصة.
ليش وقف النشر عندك بعد الحادثة؟
النشر وقف لأن Railway وقّفت استقبال أي نشر جديد وقت الحادثة، والـ commits يلي دفعتها وقتها ما انحطت بالدور، فخدمتك لسا شغّالة على آخر نشر ناجح قبلها. وبعد ما رجع النشر، في سببين ممكن يخلّوه يفشل: Railway قطعت وصلات GitHub، ولغت توكنات الـ API وجلسات سطر الأوامر.
حسب دليل Railway لإصلاح النشر، أغلب الخدمات بتحتاج بس ترجع توصل GitHub:
افتح إعدادات الحساب وتأكد إنو حساب GitHub موصول، وإنو تطبيق Railway على GitHub لسا عنده وصول للريبو.
افصل الريبو ورجّع وصله من إعدادات الخدمة. بمشروع فريق، لازم يعملها نفس الشخص يلي وصل الريبو أول مرة.
اضغط CMD أو CTRL مع K واختار Deploy Latest Commit. بيطلع معك نشر جديد من آخر commit.
إذا بتنشر من سطر الأوامر، الجلسة القديمة انلغت، فسجّل خروج ودخول من جديد:
railway logout
railway login
railway link
railway upوإذا بتنشر من الـ CI، اعمل توكن مشروع جديد من Settings بعدين Tokens (أو توكن حساب من إعدادات الحساب) بنفس الصلاحيات، وحطه مكان القديم بأسرار الـ CI. وإذا الـ CI عندك على GitHub Actions، توثيق GitHub بيقول إنو أي action مخترقة بالـ workflow بتوصل لكل الأسرار المضبوطة بالريبو، فثبّت كل action على commit محدد (كيف تحمي GitHub Actions إذا حدا غيّر الـ tag).
بأي ترتيب تدوّر أسرارك؟
تدوير السر يعني تعمل قيمة جديدة عند المزوّد وتلغي القديمة، مش بس تبدّل القيمة بـ Railway. رتّب الشغل حسب الضرر: قواعد البيانات أول لأنها بتفتح بيانات زبائنك، بعدين الدفع، بعدين مفاتيح الذكاء الاصطناعي والسحابة، وتوكنات Railway آخر شي.
غيّر كلمة سر كل قاعدة بيانات من Railway نفسها. بـ PostgreSQL: افتح خدمة القاعدة، بعدين Database وConfig، واضغط Regenerate جنب كلمة السر. بيتغيّر
POSTGRES_PASSWORD، ومعهDATABASE_URLوDATABASE_PUBLIC_URL. لـ MySQL وMongoDB وRedis في دليل لكل وحدة.أعد نشر كل خدمة بتستعمل القاعدة. الخدمة بتقرا المتغيرات وقت الإقلاع بس، وRegenerate بيعيد نشر القاعدة لحالها. وأي أداة برّا المشروع (جهازك، الـ CI، أدوات التقارير) بدها القيمة الجديدة بإيدك.
سكّر الوصول العام للقاعدة إذا ما في شي برّا المشروع بيحتاجه: من Settings بعدين Networking بعدين Public Access. هالخطوة من توصيات التقرير نفسه.
غيّر مفاتيح الدفع متل Stripe عند المزوّد، وشوف إذا في استعمال ما بتعرفه.
احذف مفاتيح OpenAI وAnthropic وOpenRouter وGrok واعمل جداد. لا تستنى إيميل إلغاء من المزوّد: غياب الإيميل ما بيثبت إنو المفتاح ما انكشف.
افحص حساب AWS أو GCP عن وصول غريب، وغيّر المفاتيح يلي كانت بمتغيرات البيئة.
غيّر توكنات GitHub وبيانات دخول الـ registry (متل Docker Hub)، وراجع سجل التدقيق (audit log) بالاتنين، ومين عنده وصول من تطبيقات GitHub المثبّتة.
آخر شي، اعمل توكن Railway جديد للـ CI، وتأكد إنو النشر التلقائي رجع اشتغل.
Railway بتحذّر بدليل تغيير كلمة سر PostgreSQL: لا تعدّل POSTGRES_PASSWORD أو PGPASSWORD بإيدك، ولا تشغّل ALTER USER لحالك. كل تعديل من هدول بيغيّر طرف واحد، فبيصير المتغير بقيمة والقاعدة بقيمة تانية. ونفس الدليل بينصح تستعمل متغير مرجعي متل ${{ Postgres.DATABASE_URL }} بدل رابط اتصال ملصوق، لحتى تاخد الخدمة كلمة السر الجديدة لحالها مع أول نشر.
كيف تشوف مين متصل بقاعدة PostgreSQL هلق؟
اتصل بالقاعدة بأمر railway connect Postgres، وشغّل الاستعلام يلي بيعطيه دليل Railway:
SELECT pid, usename, client_addr, application_name, backend_start, state
FROM pg_stat_activity
WHERE datname = current_database();أي جلسة ما بتعرفها، سكّرها برقم الـ pid تبعها، وبعدين شوف إذا في أدوار (roles) جديدة ما عملتها:
SELECT pg_terminate_backend(12345);
SELECT rolname FROM pg_roles;بدّل 12345 برقم الـ pid من الاستعلام الأول.
كيف بتعرف إذا حدا استعمل أسرارك؟
شوف الاستهلاك والسجلات عند كل مزوّد من 20 تشرين الأول لليوم: أي طلب أو دفعة أو جلسة أو عضو ما بتعرفه علامة إنو السر انستعمل. Railway نشرت أدلة لأشهر المزوّدين، وكلهن ماشيين على نفس الفكرة.
بمفاتيح الذكاء الاصطناعي، دليل Anthropic بيقلك تفتح صفحة Usage وتجمّع حسب المفتاح، وصفحة Cost لفترة الانكشاف، وLogs مفلترة على المفتاح، وMembers لتشوف إذا في حدا ما عزمته. ودودة npm يلي بتسرق مفاتيح أدوات الذكاء الاصطناعي كانت عم تدوّر على نفس النوع من المفاتيح، فإذا بتستعمل المفتاح بأكتر من مكان، غيّره بكل الأماكن.
بقاعدة PostgreSQL، دوّر بسجلات النشر تبع خدمة القاعدة على
authentication failed. القاعدة ما بتسجّل الاتصالات الناجحة لحالها، فغياب السطر ما بيعني إنو ما حدا دخل.بـ GitHub والـ registry، سجل التدقيق بيورجيك مين عمل شو وإمتى.
إذا لقيت بيانات متغيّرة، احفظ الأدلة أول، بعدين رجّع من نسخة احتياطية أو من الاسترجاع لنقطة زمنية (point-in-time recovery).
من وين تبلّش هلق؟
بلّش بقائمة: كل متغير بيئة بكل خدمة على Railway، شو هو، وعند أي مزوّد بيتغيّر. القائمة بتمشّيك على الترتيب فوق، وبتورجيك الخدمات الميتة يلي لسا فيها أسرار شغّالة، فاحذفها هي وأسرارها.
وإذا بدك حدا يفحص منصتك ويلاقي وين أسرارها مكشوفة قبل ما تصير الحادثة الجاية، هاد شغل مُحَصَّن. أما هلق: افتح أول قاعدة بيانات على Railway واضغط Regenerate.
أسئلة شائعة
ما وصلني إيميل من Railway، يعني أنا مش متأثر؟
مش بالضرورة. Railway قالت إنها رح تراسل المتأثرين بالإيميل لما تتأكد من حساباتهم، وبنفس الوقت بتنصح كل حدا فتح حسابه قبل 21 تشرين الأول 2026 يغيّر المفاتيح المخزّنة عندها.
وصلني إيميل من OpenAI أو Google إنو مفتاحي انلغى، ليش؟
لأن Railway بعتت للمزوّدين المفاتيح يلي ممكن تكون انفكّت، ولبعضهم بعتت كل المفاتيح يلي على المنصة، وبعض المزوّدين طلبوا يلغوا الكل. فإيميل الإلغاء ما بيعني إنو مفتاحك انكشف، بس لازم تحط مفتاح جديد بمتغيرات البيئة وتنشر من جديد.
ما وصلني إيميل إلغاء من المزوّد، يعني مفتاحي لسا آمن؟
مش بالضرورة. غياب الإيميل ما بيثبت إنو مفتاحك ما انكشف، وRailway بتنصح كل حدا فتح حسابه قبل 21 تشرين الأول 2026 يغيّر مفاتيحه. احذف المفتاح عند المزوّد بنفسك واعمل واحد جديد.
بيكفي أعمل توكن Railway جديد؟
لأ. التوكن الجديد بيرجّعلك النشر من الـ CI ومن سطر الأوامر بس. كلمات سر قواعد البيانات ومفاتيح الدفع والذكاء الاصطناعي يلي كانت بمتغيرات البيئة بتضل شغّالة لحد ما تغيّرها عند كل مزوّد.
هل المهاجم وصل لكود مشروعي؟
لسا ما في جواب نهائي. Railway كتبت إنو المهاجم ما دخل على حسابات المستخدمين، بس لسا ما استبعدت إنو وصل لكود المستخدمين، ووعدت تحسم هالنقطة بتقريرها النهائي.


