TL; DR
ກຸ່ມຂອງແພັກເກດ PyPI ໄດ້ຢືມຊື່ຂອງ uv, ຕົວຈັດການແພັກເກດ Python ທີ່ອີງໃສ່ Rust ທີ່ໄວ ແລະ ໄດ້ຮັບຄວາມນິຍົມຢ່າງຫຼວງຫຼາຍ, ເພື່ອເຮັດເປັນຕົວຊ່ວຍ uv. ພວກມັນເກືອບບໍ່ມີໜ້າທີ່ຕົວຈິງເລີຍ. ສິ່ງທີ່ພວກມັນມີແທນນັ້ນແມ່ນ payload ຂອງ Windows ທີ່ຢືນຢູ່ ເຊີບເວີ JupyterLab ທີ່ມີການພິສູດຢືນຢັນຕົວຕົນຖືກປິດໄວ້ ແລະ, ໃນລຸ້ນຕໍ່ມາ, ເຜີຍແຜ່ມັນໄປສູ່ອິນເຕີເນັດສາທາລະນະຜ່ານທາງອຸໂມງແບບປີ້ນກັບກັນ.
ນັ້ນແມ່ນເລື່ອງທັງໝົດໃນບັນທັດດຽວ: ຊື່ເຄື່ອງມືທີ່ເຊື່ອຖືໄດ້ເປັນຕົວລໍ້ລວງ, ແລະ JupyterLab ເປັນເຄື່ອງຈັກປະຕິບັດລະຫັດຈາກໄລຍະໄກ. ເຊີບເວີ Jupyter ຈະໃຊ້ລະຫັດໃດກໍ່ຕາມທີ່ທ່ານພິມເຂົ້າໄປໃນebook ເຊວ; ອັນໜຶ່ງທີ່ເປີດໃຊ້ດ້ວຍໂທເຄັນຫວ່າງເປົ່າ ແລະ ຜູກມັດກັບທຸກໆອິນເຕີເຟດເຄືອຂ່າຍແມ່ນຕົວແປພາສາເປີດທີ່ທຸກຄົນທີ່ສາມາດເຂົ້າເຖິງພອດໄດ້ສາມາດຂັບໄດ້.
ພວກເຮົາຕິດຕາມກຸ່ມເປັນ UV ປອມສອງຊຸດທີ່ກວດສອບແມ່ນ moon-uv (0.0.1-0.0.16) ແລະ my-magic-uv-helper (0.0.1), ເຜີຍແຜ່ໂດຍຜູ້ປະຕິບັດການດຽວກັນ ແລະ ເຜີຍແຜ່ຢູ່ໃນ PyPI ໃນເວລາວິເຄາະ.
| ລະບົບນິເວດ | P&IP |
| ການຫຸ້ມຫໍ່ | 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 ໃນຈຸດ payload ຢູ່ທີ່ໂຮດທີ່ແທ້ຈິງ ແລະ ມີຊື່ສຽງ — ສະນັ້ນ ການເບິ່ງໄວໆກໍ່ບໍ່ເຫັນຫຍັງນອກຈາກການອ້າງອີງທີ່ໜ້າເຊື່ອຖື. ບໍ່ມີແພັກເກດໃດເພີ່ມເຂົ້າໄປແທ້ໆ uv ໜ້າທີ່; ຊື່ແມ່ນການປອມແປງທັງໝົດ.
JupyterLab ເປັນເຄື່ອງຈັກ RCE
ຈຸດໃຈກາງຂອງ payload ແມ່ນ launcher ທີ່ເລີ່ມຕົ້ນ JupyterLab ໂດຍເອົາ guardrail ທຸກໆອັນອອກ:
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 ທຸງແຕ່ລະອັນຈະຖອດການປ້ອງກັນອອກ, ແລະສະຄຣິບທີ່ສົ່ງມາແມ່ນແຕ່ມີຄຳອະທິບາຍໃສ່ພວກມັນ (ໃນພາສາຈີນຕົ້ນສະບັບ): ໂທເຄັນຫວ່າງເປົ່າ "ປິດການກວດສອບລະຫັດຜ່ານ ແລະ ໂທເຄັນ - ທຸກຄົນສາມາດເຊື່ອມຕໍ່ໄດ້." jupyter lab ເປັນ IDE ວິທະຍາສາດຂໍ້ມູນທີ່ຖືກຕ້ອງຕາມກົດໝາຍ, ແຕ່ບໍ່ແມ່ນebook ເຊວປະຕິບັດລະຫັດຕາມໃຈມັກໂດຍການອອກແບບ. ຕັ້ງຄ່າດ້ວຍວິທີນີ້ ແລະ ຜູກມັດກັບ 0.0.0.0, ມັນຢຸດເປັນ IDE ແລະກາຍເປັນ remote shell ທີ່ບໍ່ໄດ້ຮັບການພິສູດຢືນຢັນໃນໂຮດ - ບໍ່ຕ້ອງການໄບນາຣີມັລແວຣ໌ທີ່ກຳນົດເອງ, ພຽງແຕ່ເຄື່ອງມືຫຼັກໆຊີ້ບອກທາງທີ່ຜິດ.
ສອງຊິ້ນສ່ວນຮອງຮັບເຮັດໃຫ້ສາມາດເຂົ້າເຖິງໄດ້ ແລະ ເຮັດຊ້ຳໄດ້:
- ຕົວກະຕຸ້ນການຕິດຕັ້ງແບບງຽບໆ. ລຸ້ນກ່ອນໆໃຊ້ PowerShell ດ້ວຍ -ExecutionPolicy Bypass ກົງຈາກ setup.py on pip ຕິດຕັ້ງ, ໃນພື້ນຫຼັງທີ່ມີຂໍ້ຜິດພາດຖືກສະກັດກັ້ນດັ່ງນັ້ນ pip ເບິ່ງຄືວ່າປົກກະຕິ. ລຸ້ນຕໍ່ມາໄດ້ຍ້າຍສິ່ງເດີມໆດຽວກັນໄປເປັນ pip-uv ເຄື່ອງມືບັນທັດຄຳສັ່ງ — ແລະ ຍົກເລີກການເຮັດວຽກອັດຕະໂນມັດໃນເວລາຕິດຕັ້ງທັງໝົດ.
- ອຸໂມງປີ້ນກັບສາທາລະນະ. ເຊີບເວີເປີດຢູ່ 0.0.0.0 ຍັງສາມາດເຂົ້າເຖິງໄດ້ໂດຍໂຮດທີ່ສາມາດສົ່ງໄປຫາເຄື່ອງເທົ່ານັ້ນ. ໂມດູນທີ່ລວມເຂົ້າກັນຈະເປີດ [Pinggy](https://pinggy.io/) ອຸໂມງປີ້ນກັບ SSH ທີ່ສົ່ງຕໍ່ພອດ Jupyter ທ້ອງຖິ່ນໄປຫາທີ່ຢູ່ສາທາລະນະ, ເຊິ່ງລຶບຂໍ້ຈຳກັດນັ້ນອອກ. ສະຄຣິບທີ່ສົ່ງມາຍັງມີ — ຄຳເຫັນອອກ — ເສັ້ນທາງທາງເລືອກໂດຍໃຊ້ Cloudflare's ເມກໄໝ້ ແລະ netsh port-proxy ໄປຫາ Linode IP, ບັນທຶກເປົ້າໝາຍດຽວກັນຜ່ານໂຄງສ້າງພື້ນຖານທີ່ແຕກຕ່າງກັນ.
ປະກອບເຂົ້າກັນ: ຕິດຕັ້ງແພັກເກດ, ແລະໂຮດ Windows ຈະສິ້ນສຸດການໃຊ້ງານ JupyterLab ທີ່ບໍ່ມີລະຫັດຜ່ານ ແລະ ເຜີຍແຜ່ມັນໄປສູ່ອິນເຕີເນັດເປີດ.
FauxUV ພັດທະນາມາແນວໃດ
ລຸ້ນຂອງ FauxUV ໄດ້ຖືກຈັດສົ່ງຢ່າງວ່ອງໄວ, ແລະຈຸດກະຕຸ້ນຂອງ payload ໄດ້ຍ້າຍໄປມາເທິງພວກມັນ - ເປັນການເຕືອນວ່າລຸ້ນທີ່ຖືກໝາຍໄວ້ອັນດຽວບໍ່ຄ່ອຍຈະບອກເລື່ອງລາວທັງໝົດຂອງຊຸດແພັກເກດ.
| ຂັ້ນຕອນຂອງການ | ສະບັບ | ຜົນກະທົບຕໍ່ | ສິ່ງທີ່ມັນເພີ່ມ |
|---|---|---|---|
| ຕິດຕັ້ງ-ຕະຂໍ | moon-uv 0.0.1 – 0.0.3, my-magic-uv-helper 0.0.1 | setup.py ໃນການຕິດຕັ້ງ pip | ຕິດຕັ້ງ uv + PATH ເພີ່ມເຕີມ |
| CLI-runtime | moon-uv 0.0.5-0.0.13 | pip-uv ຄໍາສັ່ງ | ຕົວເປີດໃຊ້ JupyterLab ທີ່ບໍ່ມີລະຫັດຜ່ານ |
| Tunnel | 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 |
| Persistence | ບວກ %USERPROFILE%\.local\bin ຫາ PATH ຂອງຜູ້ໃຊ້ |
ສັນຍານພຶດຕິກຳທີ່ຄວນລະວັງ, ໂດຍບໍ່ຂຶ້ນກັບສາຍເຫຼົ່ານີ້: pip ຕິດຕັ້ງ ທີ່ເກີດ powershell - ການຂ້າມນະໂຍບາຍການປະຕິບັດ; ໃດ ດາວພະຫັດ ການລວມການເປີດຕົວ ໂທເຄັນ =”” ກັບ –ip=0.0.0.0; ແລະ SSH ອອກໄປທີ່ *.pinggy.io ຈາກນັກພັດທະນາ ຫຼື ເຄື່ອງ CI.
ພຶດຕິກຳ ແລະ ຕົ້ນກຳເນີດທີ່ສັງເກດເຫັນ
ສອງແພັກເກດມີຜູ້ຂຽນ ແລະ ວິທີການຮ່ວມກັນຄື: ຊື່ເຄື່ອງມືທີ່ເຊື່ອຖືໄດ້, ການຄວບຄຸມສະເພາະ Windows, ການປະຕິບັດພື້ນຫຼັງທີ່ຖືກສະກັດກັ້ນຄວາມຜິດພາດ, ແລະ ການອີງໃສ່ເຄື່ອງມືທີ່ມີຊື່ສຽງ ດັ່ງນັ້ນການເບິ່ງໄວໆຈະເຫັນພຽງແຕ່ URL ທີ່ມີຊື່ສຽງເທົ່ານັ້ນ. ແຫຼ່ງຂໍ້ມູນມີຄຳເຫັນພາສາຈີນທີ່ອະທິບາຍເຖິງທຸງທີ່ກ່ຽວຂ້ອງກັບຄວາມປອດໄພຢ່າງຊັດເຈນ; ພວກເຮົາລາຍງານສິ່ງເຫຼົ່ານັ້ນເປັນຖະແຫຼງການທີ່ສັງເກດເຫັນໄດ້ໃນໄຟລ໌, ບໍ່ແມ່ນການອ້າງສິດກ່ຽວກັບແຮງຈູງໃຈ. ອະນຸຍາດ_ຕົ້ນກຳເນີດ ມູນຄ່າ ແລະ ກ colab.bat ຊື່ໄຟລ໌ສະທ້ອນເຖິງຂະບວນການເຮັດວຽກທີ່ບໍ່ເປັນທາງການ “ແບ່ງປັນເວລາແລ່ນທ້ອງຖິ່ນຂອງຂ້ອຍ” ທີ່ໄຫຼວຽນສຳລັບ Google Colab. ບໍ່ວ່າຕົ້ນກຳເນີດຈະເປັນແນວໃດ, ຜົນໄດ້ຮັບທີ່ຫຸ້ມຫໍ່ແມ່ນຄືກັນ.
ຜົນກະທົບ ແລະ ການຊີ້ນຳສຳລັບຜູ້ຖືກປົກປ້ອງ
ຜູ້ທີ່ໄດ້ຮັບຜົນກະທົບຈາກ FauxUV. ນັກພັດທະນາ Windows ແລະ ຜູ້ດຳເນີນງານ CI ທີ່ pip ຕິດຕັ້ງ ໜຶ່ງໃນແພັກເກດເຫຼົ່ານີ້. JupyterLab ທີ່ບໍ່ມີລະຫັດຜ່ານ 0.0.0.0 ແມ່ນການປະບັດລະຫັດຈາກໄລຍະໄກສຳລັບທຸກຄົນທີ່ສາມາດເຂົ້າເຖິງພອດໄດ້; ອຸໂມງຈະລຶບຂໍ້ຈຳກັດ "ຜູ້ທີ່ສາມາດເຂົ້າເຖິງມັນໄດ້". ເຊີບເວີເຮັດວຽກເປັນຜູ້ໃຊ້ທີ່ຕິດຕັ້ງ, ໂດຍສືບທອດໄຟລ໌, ໂທເຄັນ ແລະ ຂໍ້ມູນປະຈຳຕົວຄລາວຂອງຜູ້ໃຊ້ນັ້ນ.
ເປັນຫຍັງມັນຈຶ່ງງ່າຍທີ່ຈະພາດ. ທຸກໆສາຍເຄືອຂ່າຍຊີ້ໄປຫາໂຮດທີ່ມີຊື່ສຽງ - Astral, JupyterLab, ເມກໄໝ້, Pinggy, Colab. ບໍ່ມີໄບນາຣີມັລແວຣ໌ທີ່ຈະແຮຊ ແລະ ບໍ່ມີ blob ທີ່ສັບສົນທີ່ຈະຖອດລະຫັດ. ການສະແກນທີ່ອີງໃສ່ຊື່ສຽງ ແລະ ລາຍເຊັນ ທັງສອງຢ່າງນີ້ ຖືວ່າບໍ່ສຳຄັນ, ຊຶ່ງເປັນເຫດຜົນທີ່ຄຳຖາມກ່ຽວກັບພຶດຕິກຳ — ການຕິດຕັ້ງແພັກເກດນີ້ເຮັດໃຫ້ເຄື່ອງເຮັດຫຍັງ - ເປັນຜູ້ທີ່ຈັບມັນໄດ້.
ຄຳ ແນະ ນຳ:
- ປະຕິບັດຕໍ່ເວລາຕິດຕັ້ງໃດໆ powershell - ການຂ້າມນະໂຍບາຍການປະຕິບັດ ເປັນສັນຍານທີ່ເຮັດໃຫ້ເກີດຄວາມເສຍຫາຍຕໍ່ການສ້າງ, ບໍ່ວ່າມັນຈະຖືກດຶງມາຈາກ URL ໃດກໍຕາມ.
- ເຕືອນກ່ຽວກັບ ດາວພະຫັດ ເປີດຕົວດ້ວຍໂທເຄັນທີ່ຫວ່າງເປົ່າ ແລະ –ip=0.0.0.0; ການລວມກັນນັ້ນບໍ່ຄວນປາກົດຢູ່ໃນສະຖານີເຮັດວຽກ ຫຼື ໂປຣແກຣມແລ່ນ.
- ຕິດຕາມກວດກາສຳລັບ SSH ທີ່ສົ່ງອອກໄປຫາຜູ້ໃຫ້ບໍລິການອຸໂມງ (*.pinggy.io, *.trycloudflare.com) ຈາກສະພາບແວດລ້ອມຂອງນັກພັດທະນາ ແລະ CI.
- ຕິດຕັ້ງ uv ຈາກ [ແຫຼ່ງຂໍ້ມູນທາງການ](https://docs.astral.sh/uv/) ແລະ ສົງໄສກ່ຽວກັບແພັກເກດ "ຜູ້ຊ່ວຍ" ຂອງພາກສ່ວນທີສາມທີ່ຫຸ້ມຫໍ່ເຄື່ອງມືທີ່ຕິດຕັ້ງງ່າຍແລ້ວ.
- ປັກໝຸດ ແລະ ກວດສອບການເພິ່ງພາອາໄສຄືນໃໝ່ໃນການອັບເກຣດ — ສາຍແພັກເກດສາມາດເພີ່ມຄວາມສາມາດໃໝ່ໄດ້.



