نموذج إعادة تعيين كلمة المرور لديك هو مدفع بريد إلكتروني مجاني
نموذج إعادة تعيين كلمة المرور هو على الأرجح أقل نقطة نهاية إثارة للاهتمام تملكها. وهو أيضاً النقطة الوحيدة التي يستطيع مهاجم أن يصوّبها نحو أي شخص. لم يكن لدى نموذجنا تحديد للمعدل لكل بريد إلكتروني لفترة من الوقت، والسبب في أهمية ذلك ليس السبب الذي قد تخمّنه.
رد الفعل الغريزي، حين تسمع "نقطة نهاية غير مُصادَق عليها، بلا تحديد للمعدل"، هو التفكير في الهجوم بالقوة الغاشمة. لكن لا يوجد ما يُخترق بالقوة الغاشمة في طلب إعادة التعيين. أنت لا تخمّن كلمة مرور. تُقدّم عنوان بريد إلكتروني فيرسل النظام رابطاً. طرقه بلا توقف لا يُدخلك إلى أي حساب. فمن الذي يتضرّر إذاً؟
الضحية طرف ثالث. اكتب عنوان شخص آخر، [email protected]، اضغط إرسال، كرّر. كل طلب يرسل بريداً إلكترونياً حقيقياً إلى صندوق وارد حقيقي لا تتحكم فيه. لقد جنّدت نموذج إعادة التعيين لدينا في قنبلة بريدية مصوّبة نحو شخص لم يُسجّل في أي شيء قط. ولأن البريد يأتي منّا، يحطّ الضرر في مكانين في آنٍ واحد. صندوق وارد الضحية يمتلئ. وسمعة الإرسال لدينا تتلقّى الضربة، لأن سيلاً من البريد غير المرغوب فيه من نطاقنا هو بالضبط ما يراقبه مزوّدو صناديق البريد. يكفي قدر منه لكي يبدأ بريدنا المشروع، روابط التحقق، وعمليات إعادة تعيين كلمة المرور الفعلية، بالحطّ في مجلد البريد المزعج لكل عميل حقيقي لدينا. نقطة نهاية غير مُصادَق عليها، بلا بيانات اعتماد وبلا كلفة على المهاجم، تُدهور مورداً يتشاركه جميع مستخدمينا.
لذا تُحدّد معدّلها. لكل عنوان بريد إلكتروني، حتى لا يُغرق هدف واحد. سهل. غير أن التنفيذ البديهي يفتح بهدوء ثغرة أخرى.
إذا طبّقت التحديد فقط، أو أدّيت العمل فقط، حين يكون للعنوان حساب فعلي، فإن نقطة النهاية تتصرّف على نحو مختلف مع الحسابات الحقيقية عنه مع الحسابات المختلقة. المهاجم الذي يستطيع رؤية ذلك الفارق، في الاستجابة أو في رمز الحالة أو في التوقيت وحده، يملك الآن أوراكل (كاشفاً) لمعرفة أي عناوين البريد الإلكتروني مُسجّلة لديك. نماذج إعادة التعيين تسريب كلاسيكي لتعداد الحسابات لهذا السبب بالضبط: الإصلاح الساذج للقنبلة البريدية يخلق ثغرة التعداد.
الحل الحقيقي عليه أن يفعل الأمرين في آنٍ واحد، والنصفان منفصلان. أولاً، حدّد المعدل بناءً على البريد الإلكتروني المُطبَّع بصرف النظر عن وجود حساب. مفتاح التحديد هو العنوان نفسه، بأحرف صغيرة وبلا مسافات حتى يتشارك Victim@ وvictim@ دلواً واحداً، ويُطبّق العدّاد قبل أن تكون قد بحثت عن أي شيء. ذلك العدّاد عليه أن يعيش في مخزن مشترك ودائم، لا في ذاكرة عملية واحدة، وإلا تبخّر عند إعادة التشغيل ولم يفعل شيئاً عبر عدة نُسخ. ثانياً، استجب على نحو متطابق في كل حالة: نفس الحالة، ونفس رسالة "إذا كان لذلك العنوان حساب، فقد أرسلنا رابطاً"، ونفس شكل التوقيت، سواء أكان العنوان أحد عناوينك أم لا. أنت لا تزال لا ترسل بريداً فعلياً إلا حين يكون خلفه حساب. لكن لا شيء مما يستطيع غريب أن يرصده يتغيّر بناءً على ذلك السرّ. تحديد المعدل يحمي الطرف الثالث؛ والاستجابة الثابتة تحمي حقيقة من يملك حساباً.
الدرس العام يتجاوز إعادة تعيين كلمات المرور. أي نقطة نهاية غير مُصادَق عليها تُحدث أثراً جانبياً في العالم الحقيقي، إرسال بريد إلكتروني، إرسال SMS، استدعاء webhook، ليست مجرد جزء من سطح هجومك. إنها سلاح مصوّب نحو من يقع في الطرف المتلقّي، وفاتورة إطلاقه تحطّ على سمعتك، لا على سمعة المهاجم. حدّد المعدل بناءً على الشيء الذي يُتّخذ الإجراء بحقّه، وهو المُتلقّي لا المُستدعي. وافعل ذلك دون أن تدع وجود أو غياب حالة سرية يغيّر ما يراه الراصد.
نموذج إعادة تعيين كلمة المرور يبدو كأنه سباكة. إنه القطعة الوحيدة من السباكة التي سترشّ برضاً أي شخص في العالم عند الطلب. قِس تدفّقه تبعاً لذلك.
قياس نقطة نهاية غير مُصادَق عليها ذات أثر جانبي دون تسريب من يملك حساباً أمرٌ أدقّ مما يبدو. يشحن Authagonal تدفّق إعادة التعيين محدّد المعدل ومحصّناً ضد التعداد سلفاً، حتى لا تكون سمعة المُرسِل لديك أبداً على بُعد حلقة curl واحدة من الخراب.