العودة
باب خلفي مخفي في عرض عمل على لينكدإن: كيف وقع مطوّر في فخ «مسؤولة التوظيف»
SiTech AI Team3 წთ. საკითხავი

باب خلفي مخفي في عرض عمل على لينكدإن: كيف وقع مطوّر في فخ «مسؤولة التوظيف»

اكتشف مطوّر طُلب منه مراجعة مستودع على GitHub في إطار عرض عمل بابًا خلفيًا يعمل تلقائيًا عند تنفيذ npm install. أما إيداعات المستودع وملف «مسؤولة التوظيف» فكانا يعودان إلى شخصين حقيقيين لم يعملا على المشروع قط.

في أوائل يونيو 2026، تلقّى مطوّر الفول-ستاك رومان إيمانكولوف رسالة على لينكدإن من «مسؤولة توظيف» في شركة كريبتو ناشئة صغيرة. وبعد تبادل الرسائل على مدى أيام، وصفت له نموذجًا أوليًا معطوبًا يبحثون له عن مهندس قائد، وأرسلت له مستودعًا عامًا على GitHub لمراجعته، طالبةً تحديدًا أن «ينظر في مشكلة وحدات Node المهملة». مراجعة شيفرة قائمة أمر معتاد، لكن شيئًا ما أثار شكّه، فقرّر أن يكون أكثر حذرًا.

وبدلًا من استنساخ المستودع وتثبيت الاعتماديات على جهازه، أنشأ خادمًا افتراضيًا مؤقتًا على Hetzner، واستنسخ الشيفرة هناك، ووجّه وكيل ذكاء اصطناعي يُدعى Pi إليه في وضع القراءة فقط، مع أدوات قراءة الملفات فقط: read وgrep وfind وls.

الفخ داخل ملف اختبار

توقّف الوكيل على الفور تقريبًا عند الملف app/test/index.js. بدا المستودع كواجهة React مع خلفية Node، أما الفخ فكان نحو 250 سطرًا متنكّرًا في هيئة مجموعة اختبارات. وداخله كان الرابط يُبنى من أجزاء: البروتوكول «https» والنطاق «store» والنطاق الفرعي «rest-icon-handler» والمسار «/icons/» والرمز «77».

وفي السطر 225، بين جدران من الاختبارات المعلّقة، كان يختبئ كود ينفّذ كل ما يعيده الخادم إلى الجهاز. الملف لم ينتظر تشغيل الاختبارات: إذ ينفّذ app/index.js الأمر require('./test')، ويربط package.json الملف app/index.js بالتشغيل عبر سكربت prepare. ويشغّل npm السكربت prepare تلقائيًا بعد npm install، أي أن مجرد تثبيت الاعتماديات كان يشغّل الباب الخلفي. أما الإشارة إلى «الوحدات المهملة» فكانت طُعمًا.

هوية مستعارة… مرتين

كُتبت الإيداعات التسعة والثلاثون في المستودع كلها باسم وبريد مطوّر حقيقي: مهندس فول-ستاك له ملف عادي على لينكدإن وموقع شخصي وسجل طويل على GitHub. راسله إيمانكولوف فعلم أنه لم يعمل في تلك الشركة قط ولا علاقة له بالمستودع، وأنه تعرّض سابقًا لانتحال هوية على GitHub وأُزيل مستودع بسبب ذلك.

كما كان ملف «مسؤولة التوظيف» مستعارًا: فهو يعود لصحفية ثقافية معروفة ذات خلفية ثقافية طويلة ولا شيء تقني فيها. وعندما أخبرها إيمانكولوف أنه لم يستطع تثبيت المشروع، تحوّلت الصحفية فورًا إلى خبيرة في npm وإصدارات Node، وأصرّت على أن يشغّل npm install.

ما الذي يعنيه ذلك

يكتب إيمانكولوف أنه سمع عن هجمات كهذه من قبل، لكن حين وصل أحدها إليه فاجأه رغم ذلك؛ وفي يوم أكثر تعبًا أو عجلة كان من السهل عليه تشغيل npm install دون تفكير. أبلغ GitHub عن المستودع ولينكدإن عن «المسؤولة». وحتى الآن لم يتغير شيء، والشيفرة ما زالت متاحة.

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

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.