FauxUV: חבילות PyPI מזויפות פותחות את Jupyter לאינטרנט

FauxUV: עוזרי PyPI מזויפים שפותחים שרת Jupyter לא מאומת לאינטרנט

TL; DR

אשכול של חבילות PyPI שאלו את השם של uv, מנהל החבילות המהיר והפופולרי מאוד של Python מבוסס Rust, כדי להתחזות לעוזרים של UV. הם כמעט ולא מספקים פונקציונליות אמיתית. מה שהם נושאים במקום זאת הוא מטען של Windows שעומד על... שרת JupyterLab עם אימות כבוי ובגרסאות מאוחרות יותר, מפרסם אותו לאינטרנט הציבורי דרך מנהרה הפוכה.

זה כל הסיפור בשורה אחת: שם של כלי אמין כפיתיון, ו-JupyterLab כמנוע ביצוע קוד מרחוק. שרת Jupyter מריץ כל קוד שאתה מקליד לתוך שרת לאebook תא; אחד שמופעל עם אסימון ריק וקשור לכל ממשק רשת הוא מפרש פתוח שכל מי שיכול להגיע לפורט יכול להפעיל אותו.

אנו עוקבים אחר האשכול כ פו-UVשתי החבילות שנבדקו הן moon-uv (0.0.1-0.0.16) ו my-magic-uv-helper (0.0.1), שפורסם על ידי אותו אופרטור ופעיל ב-PyPI בזמן הניתוח.

מערכת אקולוגיתPyPI
מארזיםmoon-uv (0.0.1-0.0.16), my-magic-uv-helper (0.0.1)
פלטפורמה ממוקדתWindows
התנהגות ליבהשרת JupyterLab לא מאומת, שפורסם לאינטרנט דרך מנהרה הפוכה
שימוש לרעה בכלים לגיטימייםUV, JupyterLab, Cloudflared, פינגי

הפיתוי: שם שכבר בוטחים בו

uv הוא אחד מכלי הפייתון המותקנים ביותר בשנתיים האחרונות, כך ש"עוזר עבור uv"היא חבילה שמפתח מתקין בלי לחשוב פעמיים. FauxUV מבזבזת את אמינותה כולה על שם זה. החבילות עוטפות את אמיתי uv מתקין מ-Astral - כתובות ה-URL בתוכנת המטען מצביעות על שרתים אמיתיים ובעלי מוניטין - כך שמבט חטוף לא רואה דבר מלבד הפניות אמינות. אף אחת מהחבילות לא מוסיפה בפועל uv פונקציונליות; השם הוא כל התחפושת.

JupyterLab כמנוע RCE

מרכז המטען הוא משגר שמפעיל את JupyterLab לאחר הסרת כל מעקה בטיחות:

jupyter server --with jupyterlab   --ip=0.0.0.0            # listen on every interface   --ServerApp.token=""    # no password, no token   --allow_origin='*'      # accept cross-origin connections   --disable_check_xsrf    # allow a remote browser/WebSocket to drive it

כל דגל מסיר הגנה, והכתב הנשלח אפילו מוסיף הערות (בסינית המקורית): האסימון הריק "מכבה את בדיקות הסיסמאות והטוקנים - כל אחד יכול להתחבר." מעבדת ג'ופיטר הוא IDE לגיטימי למדעי הנתונים, אבל לאebook תא מבצע קוד שרירותי מתוכנן. מוגדר כך ומחובר ל 0.0.0.0, הוא מפסיק להיות IDE והופך למעטפת מרוחקת לא מאומתת על המארח - אין צורך בקובץ בינארי תוקפני מותאם אישית, רק כלי רגיל שמכוון לכיוון הלא נכון.

שני חלקים תומכים הופכים את זה לנגיש וחזרתי:

  • טריגר להתקנה שקטה. גרסאות מוקדמות מריצות את PowerShell עם -עקוףעקוף ישר מ setup.py on pip להתקין, ברקע עם שגיאות מודחקות כך פְּעִים נראה רגיל. גרסאות מאוחרות יותר מעבירות את אותו פרימיטיבי לתוך פיפ-UV כלי שורת פקודה - ובטל לחלוטין את ההפעלה האוטומטית בזמן ההתקנה.
  • מנהרה הפוכה ציבורית. שרת פועל 0.0.0.0 עדיין נגיש רק על ידי מארחים שיכולים לנתב למכונה. מודול מצורף פותח [Pinggy](https://pinggy.io/מנהרה הפוכה של SSH שמעבירה את פורט Jupyter המקומי לכתובת ציבורית, ומסירה את המגבלה הזו. הסקריפט שנשלח כולל גם נתיב חלופי - ללא הערות - באמצעות Cloudflare. עננים מתלקחים וכן netsh פורט-פרוקסי לכתובת IP של Linode, המתעד את אותה מטרה דרך תשתית שונה.

להרכיב: התקינו את החבילה, ומארח Windows בסופו של דבר מפעיל JupyterLab ללא סיסמה ומפרסם אותה באינטרנט הפתוח.

כיצד התפתח FauxUV

הגרסאות של FauxUV נשלחו ברצף מהיר, ונקודת ההפעלה של המטען נעה על פניהן - תזכורת לכך שגרסה אחת המסומנת לעיתים רחוקות מספרת את הסיפור המלא של קו אריזה.

התמחות גרסאות הדק מה זה מוסיף
וו התקנה moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 setup.py בהתקנת פיפ התקנת uv + הוספת PATH
זמן ריצה של ממשק שורת פקודה (CRI) moon-uv 0.0.5-0.0.13 pip-uv הפקודה משגר JupyterLab ללא סיסמה
מנהרה moon-uv 0.0.14-0.0.16 pip-uv הפקודה מנהרה הפוכה של פינגי פעילה

ראוי לציין, שההפעלה האוטומטית בזמן ההתקנה הייתה הוסר בגרסאות המאוחרות יותר, בעלות יכולות גבוהות יותר - כך שסורק ממוקד רק על מחזור החיים hooks ידרג את המהדורות החדשות יותר כ פחות מסוכן, בדיוק הפוך.

אינדיקטורים של פשרה

אושר על ידי קריאת מקור החבילה; נקודות הקצה מסומנות הגיב קיימים בקבצים אך אינם מבוצעים על ידי הגרסה המנותחת. מחווני הרשת אינם פעילים.

סוּג אינדיקטור
התקן פקודה powershell -ExecutionPolicy Bypass אחזור מתקין ה-UV המקורי, בזמן התקנת PIP
דגלי JupyterLab --ip=0.0.0.0 --ServerApp.token="" --allow_origin='*' --disable_check_xsrf
מנהרה הפוכה (פעילה) free[.]pinggy[.]io:443 העברה מקומית 127.0.0.1:8888
מארח מנהרה (הערה) cloudflared tunnel --url hxxp://127[.]0[.]0[.]1:2718
IP (עם הערה) 45[.]79[.]134[.]161 (לינוד) דרך netsh port-proxy
התמדה מקדים %USERPROFILE%\.local\bin לנתיב המשתמש

אותות התנהגותיים שכדאי להתריע עליהם, ללא קשר למחרוזות המדויקות הללו: א. pip להתקין שמוליץ עקיפת מדיניות ביצוע של Powershell; כל יופיטר השקת שילוב אסימון = "" עם –ip=0.0.0.0ו-SSH יוצא אל *.pinggy.io ממפתח או מכונת CI.

התנהגות נצפית ומקור

לשתי החבילות יש מחבר ושיטה משותפים: שם של כלי מהימן, גישה ל-Windows בלבד, ביצוע רקע עם דיכוי שגיאות, והסתמכות על כלים בעלי מוניטין, כך שמבט מהיר יראה רק כתובות URL בעלות מוניטין. המקור כולל הערות בשפה הסינית המתארות את הדגלים הרלוונטיים לאבטחה בצורה ברורה; אנו מדווחים על אלה כהצהרות ניתנות לצפייה בקובץ, לא כטענה לגבי מניע. allow_origin ערך ו-a colab.bat שם הקובץ מהדהד את זרימות העבודה הבלתי פורמליות של "שתף את זמן הריצה המקומי שלי" שמסתובבות עבור Google Colab. לא משנה מה המקור, התוצאה הארוזה זהה.

השפעה והדרכה למגינים

מי נחשף לקרינת UV מזויפת. מפתחי Windows ורצים של CI ש pip להתקין אחת מהחבילות האלה. JupyterLab ללא סיסמה ב 0.0.0.0 היא ביצוע קוד מרחוק עבור כל מי שיכול להגיע לפורט; המנהרה מסירה את המגבלה של "מי יכול להגיע אליו". השרת פועל כמשתמש המתקין, ויורש את הקבצים, האסימונים ופרטי הענן של אותו משתמש.

למה קל לפספס. כל מחרוזת רשת מצביעה על מארח בעל מוניטין - Astral, JupyterLab, עננים מתלקחים, פינגי, קולאב. אין בינארי של תוכנה זדונית לגיבוב ואין בלוש ערום לפענוח. סריקה מבוססת מוניטין וחתימה שתיהן ממעיטות במשקל זה, ולכן השאלה ההתנהגותית - מה התקנת החבילה הזו גורמת למכונה לעשות — הוא זה שתופס את זה.

הנחיות:

  • התייחסו לכל זמן התקנה עקיפת מדיניות ביצוע של Powershell כאות לשבירת בנייה, כל כתובת URL שהוא מאחזר.
  • התראה מופעלת יופיטר הושק עם אסימון ריק ו –ip=0.0.0.0; שילוב זה לעולם לא אמור להופיע בתחנת עבודה או ברץ.
  • ניטור SSH יוצא לספקי מנהרות (*.pinggy.io, *.trycloudflare.com) מסביבות מפתחים ו-CI.
  • התקן uv מ[המקור הרשמי שלו](https://docs.astral.sh/uv/) ולהיות סקפטיים לגבי חבילות "עזרה" של צד שלישי שעוטפות כלי שכבר טריוויאלי להתקנה.
  • הצמד ובחן מחדש תלויות בעת שדרוג - שורת חבילה יכולה לפתח יכולות חדשות גרסה אחר גרסה.
כלי SCA לניתוח קומפוזיציה - תוכנה
תעדוף, תיקון ואבטחת סיכוני התוכנה שלך
קבל את החשבון החינמי שלך.
אין צורך בכרטיס אשראי.

אבטחו את פיתוח ואספקת התוכנה שלכם

עם חבילת המוצרים Xygeni