Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π»ΠΈΠ·ΠΎΠ² Π½Π° Π±Π°Π·Π΅ GitHub Actions Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ TanStack Π°ΡΠ°ΠΊΡΡΡΠΈΠΌ ΡΠ΄Π°Π»ΠΎΡΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ NPM 84 Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ, ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ 42 NPM-ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈΠ· ΡΡΠ΅ΠΊΠ° TanStack. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π½Π°ΡΡΠΈΡΡΠ²Π°Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ 10 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π·Π°Π³ΡΡΠ·ΠΎΠΊ Π² Π½Π΅Π΄Π΅Π»Ρ.
ΠΠΎΡΡΡΠΏ ΠΊ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅Π»ΠΈΠ·ΠΎΠ² Π±ΡΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΈΠ·-Π·Π° Π½Π΅Π²Π΅ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ pull_request_target Β«Pwn RequestΒ» Π² GitHub Actions (ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΠΊΠΈ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΠΏΡΠΈΠ²Π΅Π»ΠΎ ΠΊ Π·Π°ΠΏΡΡΠΊΡ pull_request_target Π΄Π»Ρ pull-Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ), ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΡΠ° GitHub Actions ΡΠ΅ΡΠ΅Π· ΡΠΎΡΠΊ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ OIDC-ΡΠΎΠΊΠ΅Π½Π° ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ runner-ΠΏΡΠΎΡΠ΅ΡΡΠ° (Runner.Worker) ΡΠ΅ΡΠ΅Π· ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ /proc/<pid>/mem.
NPM-ΠΏΠ°ΠΊΠ΅ΡΡ Ρ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π±ΡΠ»ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ 11 ΠΌΠ°Ρ Ρ 22:20 Π΄ΠΎ 22:26 (MSK), Π·Π°ΠΌΠ΅ΡΠ΅Π½Ρ ΡΠ΅ΡΠ΅Π· 20 ΠΌΠΈΠ½ΡΡ ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Ρ ΡΠΏΡΡΡΡ ΠΏΠΎΠ»ΡΠΎΡΠ° ΡΠ°ΡΠ°. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΡΠ°ΠΆΡΠ½Π½ΡΡ NPM-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π±ΡΠ»ΠΈ Π²ΡΠΏΡΡΠ΅Π½Ρ ΠΏΠΎ Π΄Π²Π΅ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ» ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½ ΠΊΠΎΠ΄ Π΄Π»Ρ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²Ρ mini-shai-hulud, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠΈΡΠΊ ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΈ ΡΡΡΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ. Π ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ NPM ΡΠ΅ΡΠ²Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π½ΠΎΠ²ΡΠ΅ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠ΅ ΡΠ΅Π»ΠΈΠ·Ρ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΏΠΎΡΠ°ΠΆΠ°Ρ Π΄Π΅ΡΠ΅Π²ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. Π’Π°ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π±ΡΠ»ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ 400 NPM-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΡ TanStack Π² ΡΠΈΡΠ»Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
Π§Π΅ΡΠ²Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π»ΡΡ Π² ΡΠ°ΠΉΠ»Π΅ router_init.js ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π»ΡΡ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΏΠΎΡΠ°ΠΆΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° Π²ΡΡΡΠ½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΈΠ»ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π² ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Β«npm installΒ», Β«pnpm installΒ» ΠΈΠ»ΠΈ Β«yarn installΒ». ΠΠΎΡΠ»Π΅ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ» ΠΏΠΎΠΈΡΠΊ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ² ΠΊ NPM (~/.npmrc), AWS, GCP, Azure, HashiCorp ΠΈ KubernetesK8s, Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΊΡΡΡΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ SSH. ΠΠ°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ»ΠΈΡΡ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠ°ΠΌ ΡΠ΅ΡΠ΅Π· Π΄Π΅ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ P2P-ΠΌΠ΅ΡΡΠ΅Π½Π΄ΠΆΠ΅Ρ getsession.org.
Π ΡΠ΅ΡΠ²Π΅ Π±ΡΠ»ΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π΅ΡΡΡΡΠΊΡΠΈΠ²Π½ΡΡ
Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠ·ΡΠ²Π° ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ NPM-ΡΠΎΠΊΠ΅Π½Π° β Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π»ΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π·Π°ΠΏΡΡΠΊ ΡΠΊΡΠΈΠΏΡΠ° ~/.local/bin/gh-token-monitor.sh, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 60 ΡΠ΅ΠΊΡΠ½Π΄ ΠΏΡΠΎΠ²Π΅ΡΡΠ» Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠΎΠΊΠ΅Π½Π° ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ api.github.com/user ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠ·ΡΠ²Π° ΡΠΎΠΊΠ΅Π½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ» ΠΊΠΎΠΌΠ°Π½Π΄Ρ Β«rm -rf ~/Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
