
CVE-2023-49438 - ثغرة إعادة التوجيه المفتوحة في Flask-Security-Too

ثغرة إعادة توجيه مفتوحة في حزمة بايثون Flask-Security-Too <=الإصدار 5.3.2 تسمح للمهاجمين بإعادة توجيه المستخدمين غير المتوقعين إلى مواقع ضارة عبر عنوان URL مُصمم خصيصًا عن طريق إساءة استخدام المعامل ?next في مسارات /login و /register.
تحتوي Flask-Security-Too على منطق للتحقق من أن عنوان URL المحدد في المعامل next إما نسبي أو له نفس موقع الشبكة لعنوان URL الطالب. هذا موجود في محاولة لمنع عمليات إعادة التوجيه المفتوحة.
تم العثور سابقًا على حزمة بايثون Flask-Security-Too معرضة لتجاوز منطق التحقق الموجود، وقام الإصدار 4.1.0 بإصلاح الأمثلة المعروفة سابقًا مثل https://example/login?next=\\\github.com
ومع ذلك، تم اكتشاف طريقة تحايل بسبب كيفية تطبيع متصفحات الويب للشرطات المائلة في عناوين URL، مما يجعل الحزمة ضعيفة حتى الإصدار 5.3.2.
https://example/login?next=/\github.com
https://example/login?next=\/github.com
تم الإشارة سابقًا في CVE-2021-32618 إلى أنه "إذا تم استخدام Werkzeug (وهو شائع جدًا مع تطبيقات Flask) كطبقة WSGI، فإنه بشكل افتراضي يضمن دائمًا أن رأس Location مطلق - مما يجعل ناقل الهجوم هذا غير فعال."
ومع ذلك، مع Werkzeug >=2.1.0 تم تغيير تكوين autocorrect_location_header إلى False - مما يعني أن رؤوس الموقع في عمليات إعادة التوجيه تكون نسبية بشكل افتراضي. وبالتالي، قد تؤثر هذه المشكلة على التطبيقات التي لم تكن متأثرة سابقًا، إذا كانت تستخدم Werkzeug >=2.1.0 كطبقة WSGI.
pip install -U Flask-Security-Too
أو
app.config['SECURITY_REDIRECT_VALIDATE_MODE'] = "regex"
app.config['SECURITY_REDIRECT_VALIDATE_RE'] = r"^/{4,}|\\{3,}|[\s\000-\037][/\\]{2,}(?![/\\])|[/\\](https://github.com/brandon-t-elliott/cve-2023-49438/blob/HEAD/%5B%5E/%5C%5C%5D%7C/%5B%5E/%5C%5C%5D)*[/\\].*"
أو
autocorrect_location_header إلى True:@app.after_request
def fix_location_header(response):
response.autocorrect_location_header = True
return response
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-49438
https://nvd.nist.gov/vuln/detail/CVE-2023-49438
اكتشف طريقة التحايل براندون ت. إليوت، نوفمبر 2023