FauxUV: ყალბი PyPI uv პაკეტები ხსნის Jupyter-ს ვებ-გვერდზე

FauxUV: ყალბი PyPI uv დამხმარეები, რომლებიც ინტერნეტში არაავტორიზებული Jupyter სერვერს ხსნიან.

სარჩევი

აუცილებლად წასაკითხი პოსტები

საინტერესო უახლესი პოსტები

TL; DR

PyPI პაკეტების კლასტერმა ისესხა სახელი uv, სწრაფი, უაღრესად პოპულარული Rust-ზე დაფუძნებული Python-ის პაკეტების მენეჯერი, რომლებიც UV დამხმარეებად წარმოაჩენენ. ისინი თითქმის არ გვთავაზობენ რეალურ ფუნქციონალს. სამაგიეროდ, ისინი გვთავაზობენ Windows-ის დატვირთვას, რომელიც JupyterLab სერვერი გამორთული ავტორიზაციისთვის და, შემდგომ ვერსიებში, აქვეყნებს მას საჯარო ინტერნეტში საპირისპირო გვირაბის მეშვეობით.

ეს არის მთელი ისტორია ერთ სტრიქონში: სანდო ინსტრუმენტის სახელი, როგორც სატყუარა, ხოლო JupyterLab, როგორც დისტანციური კოდის შესრულების ძრავა. Jupyter სერვერი ასრულებს ნებისმიერ კოდს, რომელსაც აკრიფებთ არაში.ebook უჯრედი; ის, რომელიც გაშვებულია ცარიელი ტოკენით და დაკავშირებულია ყველა ქსელურ ინტერფეისთან, არის ღია ინტერპრეტატორი, რომლის მართვაც შეუძლია ყველას, ვისაც შეუძლია პორტთან წვდომა.

ჩვენ ვაკვირდებით კლასტერს, როგორც FauxUVორი შესწავლილი პაკეტია 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 სერვერი, გამოქვეყნებული ინტერნეტში საპირისპირო გვირაბის საშუალებით
ლეგიტიმური ინსტრუმენტების ბოროტად გამოყენებაულტრაიისფერი, JupyterLab, ღრუბლოვანი ნათება, Pinggy

სატყუარა: სახელი, რომელსაც უკვე ენდობით

uv ბოლო ორი წლის განმავლობაში ერთ-ერთი ყველაზე ხშირად დაინსტალირებული Python-ის ინსტრუმენტია, ამიტომ „დამხმარეა“ 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 ნორმალურად გამოიყურება. უფრო გვიანდელი ვერსიები იგივე პრიმიტივს გადააქვს პიპ-უვ ბრძანების ხაზის ინსტრუმენტი — და მთლიანად გამორთეთ ინსტალაციის დროს ავტომატური გაშვება.
  • საჯარო საპირისპირო გვირაბი. სერვერი ჩართულია 0.0.0.0 ჯერ კიდევ მხოლოდ იმ მასპინძლებისთვისაა ხელმისაწვდომი, რომლებსაც შეუძლიათ მანქანაზე მარშრუტიზაცია. კომპლექტში შემავალი მოდული ხსნის [Pinggy](https://pinggy.io/) SSH უკუ გვირაბი, რომელიც ლოკალურ Jupyter პორტს საჯარო მისამართზე გადამისამართებს, რითაც ამ ლიმიტს აშორებს. გაგზავნილი სკრიპტი ასევე ახორციელებს — კომენტირებულ — ალტერნატიულ გზას Cloudflare-ის გამოყენებით. ღრუბლიანი და netsh Linode IP-ის პორტ-პროქსი, რომელიც ერთი და იგივე მიზანს სხვადასხვა ინფრასტრუქტურის მეშვეობით ადოკუმენტირებს.

ერთად: დააინსტალირეთ პაკეტი და Windows-ის ჰოსტი საბოლოოდ გაუშვებს პაროლის გარეშე JupyterLab-ს და გამოაქვეყნებს მას ღია ინტერნეტში.

როგორ განვითარდა FauxUV

FauxUV-ის ვერსიები სწრაფად გაიგზავნა ერთმანეთის მიყოლებით და ტვირთის გამშვები წერტილი მათზე მოძრაობდა - რაც შეგახსენებთ, რომ ერთი დროშით მონიშნული ვერსია იშვიათად მოგვითხრობს ამანათების ხაზის მთელ ისტორიას.

სტაჟირება ვერსიები Trigger რას ამატებს ის
ინსტალაციის კაუჭი moon-uv 0.0.1-0.0.3, my-magic-uv-helper 0.0.1 setup.py pip-ის ინსტალაციაზე uv ინსტალაცია + PATH-ის წინადადების დამატება
CLI-ის გაშვების დრო 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 Pip-ის ინსტალაციის დროს, ნამდვილი UV ინსტალატორის მოძიება
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 მომხმარებლისთვის PATH

ქცევითი სიგნალები, რომლებზეც ყურადღების მიქცევა ღირს, ამ ზუსტი სტრიქონებისგან დამოუკიდებლად: ა პიპის დაყენება რომელიც იშლება powershell -ExecutionPolicy გვერდის ავლით; ნებისმიერი იუპიტერი გაშვების გაერთიანება ჟეტონი =”” ერთად –ip=0.0.0.0; და გამავალი SSH-ისკენ *.pinggy.io დეველოპერისგან ან CI აპარატისგან.

დაკვირვებული ქცევა და წარმომავლობა

ორ პაკეტს აქვს საერთო ავტორი და მეთოდი: სანდო ინსტრუმენტის სახელი, მხოლოდ Windows-ისთვის განკუთვნილი კარიბჭე, შეცდომებისგან დაცლილი ფონური შესრულება და სანდო ინსტრუმენტებზე დამოკიდებულება, ამიტომ სწრაფი დათვალიერებისას მხოლოდ სანდო URL-ები ჩანს. წყარო შეიცავს ჩინურენოვან კომენტარებს, რომლებიც ნათლად აღწერენ უსაფრთხოებასთან დაკავშირებულ დროშებს; ჩვენ მათ ფაილში დაკვირვებად განცხადებებად ვაცხადებთ და არა მოტივის შესახებ მტკიცებად. allow_origin ღირებულება და ა colab.bat ფაილის სახელი იმეორებს Google Colab-ისთვის გავრცელებულ არაფორმალურ „ჩემი ლოკალური გაშვების დროის გაზიარების“ სამუშაო პროცესებს. წარმოშობის მიუხედავად, შეფუთული შედეგი იგივეა.

გავლენა და ხელმძღვანელობა დამცველებისთვის

ვინ არის FauxUV-ის ზემოქმედების ქვეშ. Windows-ის დეველოპერები და CI მორბენლები, რომლებიც პიპის დაყენება ერთ-ერთი ასეთი პაკეტი. პაროლის გარეშე JupyterLab 0.0.0.0 ეს არის კოდის დისტანციური შესრულება ნებისმიერი პირისთვის, ვისაც შეუძლია პორტთან წვდომა; გვირაბი ხსნის „ვის შეუძლია მასთან წვდომა“-ს ლიმიტს. სერვერი მუშაობს როგორც ინსტალაციის მომხმარებელი, მემკვიდრეობით იღებს ამ მომხმარებლის ფაილებს, ტოკენებს და ღრუბლოვან სერთიფიკატებს.

რატომ არის ადვილი მისი გამოტოვება. ქსელის ყველა სტრიქონი მიუთითებს სანდო ჰოსტზე — Astral, JupyterLab, ღრუბლიანი, პინგი, კოლაბი. არ არსებობს მავნე პროგრამაში ჰეშირებადი ბინარული ფაილი და არ არსებობს ბუნდოვანი ბლობი დეკოდირებისთვის. რეპუტაციასა და ხელმოწერაზე დაფუძნებული სკანირება ამ ყველაფერს არასაკმარისად აფასებს, რის გამოც ქცევითი კითხვა... რას აკეთებს ამ პაკეტის ინსტალაცია მანქანაში? — ის არის, ვინც მას იჭერს.

Ხელმძღვანელობა:

  • ნებისმიერი ინსტალაციის დროის დამუშავება powershell -ExecutionPolicy გვერდის ავლით როგორც სტრუქტურის დამრღვევი სიგნალი, რა URL-საც არ უნდა იღებდეს.
  • გაფრთხილება ჩართულია იუპიტერი ცარიელი ტოკენით გაშვებული და –ip=0.0.0.0; ეს კომბინაცია არასდროს არ უნდა გამოჩნდეს სამუშაო სადგურზე ან შემსრულებელზე.
  • გამავალი SSH-ის მონიტორინგი გვირაბის პროვაიდერებზე (*.pinggy.io, *.trycloudflare.com) დეველოპერისა და CI გარემოდან.
  • ინსტალაცია uv [მისი ოფიციალური წყაროდან] (https://docs.astral.sh/uv/) და სკეპტიკურად განწყობილი იყავით მესამე მხარის „დამხმარე“ პაკეტების მიმართ, რომლებიც ისეთ ინსტრუმენტს ახვევს, რომლის ინსტალაციაც ისედაც მარტივია.
  • განახლებაზე დამოკიდებულებების დაფიქსირება და ხელახლა გადახედვა — პაკეტის ხაზს შეუძლია ვერსიიდან ვერსიამდე გაზარდოს ახალი შესაძლებლობები.
sca-tools-software-composition-analysis-tools
თქვენი პროგრამული უზრუნველყოფის რისკების პრიორიტეტიზაცია, გამოსწორება და დაცვა
მიიღეთ თქვენი უფასო ანგარიში.
საკრედიტო ბარათი არ არის საჭირო.

უზრუნველყავით თქვენი პროგრამული უზრუნველყოფის შემუშავება და მიწოდება

Xygeni Product Suite-თან ერთად