Kompromiso sa Workstation ng Developer: Malicious Dependency o IDE Extension Response¶
Iba-iba ang mga numero ng emergency ayon sa bansa. Ang pahinang ito ay gumagamit ng 911, ang numero para sa Estados Unidos at Canada. Maraming ibang bansa ang gumagamit ng 112, 999, o ibang numero. Hanapin ang numero para sa iyong bansa.
Pagtuklas na ang isang software package na kaka-install mo lang sa pamamagitan ng npm install, pip install, cargo build, gem install, o go get, o isang bagong na-update na Visual Studio Code, Cursor, o JetBrains IDE extension, ay isang malisyosong typosquat, dependency confusion payload, o na-hijack na upstream release ay kumakatawan sa isang kritikal na emergency sa imprastraktura. Hindi tulad ng mga karaniwang consumer computer, isang software engineer, DevOps architect, o data scientist workstation ang may hawak na direktang cryptographic key sa production cloud environment, source code repository, container registries, CI/CD pipelines, at customer database. Kapag may malisya preinstall o postinstall script sa loob package.json, isang armas setup.py sa isang Python wheel, o isang nakompromiso .vsix Ipapatupad ang extension sa iyong laptop, ito ay tumatakbo kasama ng iyong buong mga pribilehiyo ng user at agad na nag-aani -/.aws/credentials, -/.ssh/id_ed25519, -/.npmrc, -/.pypirc, -/.kube/config, lokal .env mga file, macOS Keychain o Linux libsecret mga entry, at aktibong cookies ng session ng browser sa loob ng ilang segundo.
Kung napagtanto mo lang na nagsagawa ka ng isang nakakahamak na open-source dependency, nag-clone at nagtayo ng isang weaponized na repository (tulad ng isang pekeng teknikal na proyekto ng panayam mula sa isang recruiter scam), o nag-install ng isang trojanized na extension ng IDE, bawat segundo ay mananatiling konektado ang iyong machine sa network ay nagbibigay-daan sa payload na mag-pivot sa iyong corporate cloud o mag-publish ng mga self-propagating worm gamit ang iyong package registry token. Kung ang pag-atake ay nagsasangkot ng pangingikil, pisikal na pagbabanta, o kritikal na pampublikong imprastraktura na pagkagambala, tawagan ang iyong lokal na numero ng emergency (911 sa Estados Unidos at Canada, 112 sa buong European Union, 999 sa United Kingdom) o kumonsulta sa aming internasyonal mga numerong pang-emergency direktoryo. Sundin kaagad ang containment na ito, forensic triage, at cryptographic key rotation procedures.
Gawin ito ngayon¶
- Agad na putulin ang lahat ng koneksyon sa network sa workstation ng developer (i-off ang Wi-Fi, i-unplug ang Ethernet, at patayin ang mga aktibong VPN o SSH tunnel), ngunit HUWAG papatayin o i-reboot ang makina: Ang pag-unplug sa Ethernet at pag-togg ng Wi-Fi ay humihinto sa aktibong reverse shell, C2 beacon, o automated na worm sa paggamit ng iyong lokal na mga token upang itulak ang mga karagdagang nakakahamak na bucket. Panatilihing naka-on ang makina sa offline na estado (o suspindihin lamang ito pagkatapos makuha ang mga pabagu-bagong listahan ng proseso) para masuri mo ang mga tumatakbong proseso ng bata, magbukas ng mga socket ng network, kasaysayan ng shell, at kung alin mismo
.envat mga file ng kredensyal na naninirahan sa disk sa sandali ng pagpapatupad. - Gumamit ng hiwalay at malinis na device (gaya ng iyong smartphone sa cellular data o hindi nagagalaw na laptop) para abisuhan ang iyong Security Operations Center (SOC) at bawiin ang iyong Single Sign-On (SSO) at Cloud IAM session: Huwag kailanman mag-log in sa AWS, GCP, Azure, GitHub, o Okta mula sa infected na workstation para i-rotate ang mga key. Kung pinapanood ng isang memory-resident stealer, nakakahamak na extension ng IDE, o shell hook ang iyong terminal at browser, ang anumang bagong token na bubuo mo sa machine na iyon ay agad na makukuha.
- Bawiin at i-rotate ang iyong mga token ng high-blast-radius na developer sa mahigpit na pagkakasunud-sunod ng priyoridad sa loob ng unang 15 minuto:
- Priyoridad 1 (Cloud at Kubernetes): I-deactivate ang lahat ng lokal na AWS IAM Access Keys (
AKIA...), bawiin ang Mga Default na Kredensyal ng Google Cloud Application (gcloud auth application-default revoke), hindi wasto ang mga token ng Azure CLI (az account clear+ Pagbawi ng session ng Entra ID), at i-rotate ang Kuberneteskubeconfigmga sertipiko ng kliyente o mga token ng account ng serbisyo. - Priority 2 (Source Code & CI/CD): Tanggalin ang lahat ng GitHub, GitLab, at Bitbucket SSH na pampublikong key, Mga Token ng Personal na Access (
ghp_...,github_pat_...,glpat-...), at mga token ng OAuth CLI (-/.config/gh/hosts.yml), at suriin ang mga setting ng webhook ng repository at mga lihim ng GitHub Actions / GitLab CI. - Priority 3 (Package Registries at Container): Bawiin ang npm automation at mag-publish ng mga token (
-/.npmrc), mga token ng PyPI API (-/.pypirc), Docker Hub / GHCR / ECR login token (-/.docker/config.json), at mga token ng Terraform Cloud (-/.terraform.d/credentials.tfrc.json). - Suriin ang npm, PyPI, Cargo, at GitHub NGAYON AGAD para i-verify na hindi pa nagamit ng malware ang iyong mga lokal na token para mag-publish ng worm-infected na bersyon ng sarili mong mga package o itulak ang mga malisyosong commit: Mga modernong supply-chain payload (tulad ng
ua-parser-js,coa,rc,ctx,lottie-player, atultralyticskompromiso) awtomatikong i-parse ang developer ng biktima-/.npmrc,-/.pypirc, at-/.gitconfigupang agad na mag-publish ng mga backdoored na bersyon ng patch ng bawat open-source o panloob na package na pinapanatili ng developer, o lumikha ng mga nakatagong daloy ng trabaho sa Mga Pagkilos ng GitHub sa mga repositoryo ng developer. - I-scan ang bawat direktoryo ng proyekto sa workstation para bumuo ng kumpletong imbentaryo ng nakalantad
.envfile, database connection string, at hardcoded API keys: Bago i-wipe ang workstation, magpatakbo ng offline na script sa nakahiwalay na machine para ilista ang bawat.env,.env.local,terraform.tfstate, atapplication.ymlfile sa iyong hard drive para ma-rotate mo ang bawat third-party na sikreto (Stripe, Twilio, SendGrid, OpenAI, Anthropic, Datadog, Slack, Postgres, MongoDB, at Redis na mga kredensyal) na nababasa ng iyong user account. - Wakasan ang lahat ng mga session ng browser at mga koneksyon sa hardware wallet: Dahil ang mga developer na nakompromiso ay madalas na nagde-deploy ng mga commodity infostealers (gaya ng Lumma, RedLine, o Atomic macOS Stealer) kasama ng developer-specific credential harvester, sundin ang aming session cookie hijacking at infostealer token na gabay sa pagbawi at, kung gagawa ka ng Web3 development o may hawak na mga digital na asset, isagawa ang aming cryptocurrency wallet drain at gabay sa kompromiso ng pariralang binhi.
Danger
Bakit tumatakbo npm uninstall <package> o pip uninstall <package> HINDI nililinis ang iyong workstation: Sa Node.js (npm, yarn, pnpm) at Python (pip) ecosystem, ang malisyosong code ay halos hindi naghihintay hanggang sa iyo import o require() ang library sa iyong application code. Sa halip, inilalagay ng mga umaatake ang payload sa loob ng lifecycle hook ng package (preinstall, install, o postinstall sa package.json, o top-level na pagpapatupad sa loob setup.py sa panahon ng source distribution wheel building). Sa sandaling pinindot mo Enter sa npm install o pip install, ang arbitrary na script ng shell o binary na isinagawa ng umaatake sa iyong operating system, ay kinopya ang iyong -/.ssh, -/.aws, at .env mga file sa isang panlabas na server, at madalas na nag-inject ng paulit-ulit na backdoor sa -/.bashrc, -/.zshrc, crontab, o -/Library/LaunchAgents. Ang pag-uninstall ng package pagkatapos ay tatanggalin lamang ang folder sa loob node_modules o site-packages habang iniiwan ang mga ninakaw na susi sa mga kamay ng umaatake at ang mekanismo ng pagtitiyaga na tumatakbo sa iyong OS.
Decision tree: pagsubok ng kompromiso sa supply-chain ng developer workstation¶
Gamitin ang daloy ng trabaho para sa pagtugon sa insidente na ito para maglaman ng blast radius sa iyong personal na development environment at production corporate infrastructure:
flowchart TD
Detect["Pinaghihinalaang Nakakahamak na npm / PyPI / Cargo Package, Trojanized IDE Extension, o Fake Recruiter Repo Naipatupad"] --> Isolate["HAKBANG 1: Agad na Idiskonekta ang Workstation Wi-Fi at Ethernet (Panatilihing Naka-on ang Machine para sa Offline Triage)"]
Isolate --> ScopeCheck{"Naganap ba ang Pagpapatupad sa Host OS o Inside Isolated Container / VM?"}
ScopeCheck -->|"Host OS (Mac / Linux / Windows / WSL2)"| FullCompromise["Ipagpalagay na 100% ng Home Directory (-/.aws, -/.ssh, -/.npmrc, .env, Browser Cookies) ay Na-exfiltrate"]
ScopeCheck -->|"DevContainer / Docker"| MountCheck["Suriin ang Volume Mounts (-v -/.ssh, -v -/.aws, Docker Socket /var/run/docker.sock, o Host Network)"]
MountCheck --> FullCompromise
FullCompromise --> CleanDevice["HAKBANG 2: Mula sa Hiwalay na Malinis na Device, Alert SOC at Bawiin ang Cloud IAM, SSO, GitHub/GitLab, at Registry Token"]
CleanDevice --> WormCheck["HAKBANG 3: I-audit ang GitHub Commits, CI/CD Workflows, at npm/PyPI Published Versions para sa Automated Worm Propagation"]
WormCheck --> OfflineAudit["HAKBANG 4: Sa Offline na Workstation, Imbentaryo Lahat ng .env File, Terraform State Files, at Persistence Backdoors"]
OfflineAudit --> RotateEnv["HAKBANG 5: I-rotate ang Bawat Password ng Database, Webhook Secret, GPG Signing Key, at API Key na Natagpuan sa .env / State Files"]
RotateEnv --> RebuildOS["HAKBANG 6: I-wipe ang Workstation sa pamamagitan ng Clean OS Reinstall -> Ipatupad ang Hardware-Backed SSH Keys, OIDC, at --ignore-scripts"]
Pag-unawa kung paano isinasagawa ang supply-chain ng developer at IDE vectors¶
Ang mga modernong pag-atake laban sa mga software engineer ay nagta-target ng apat na natatanging execution surface sa isang workstation. Ang pagtukoy kung aling vector ang tumama sa iyong makina ay nagsasabi sa iyo kung anong mga pribilehiyo at mga path ng file ang na-access ng payload:
1. Nakakahamak na Package Lifecycle Hooks (npm, pnpm, yarn, pip, cargo, gem)¶
- Node.js (
package.jsonscripts): Bilang default, tumatakbonpm installawtomatikong nagpapatupad ng anumang utos ng shell na tinukoy sa"preinstall","install", o"postinstall"mga larangan ngpackage.json, hindi lamang para sa top-level na package na iyong na-type, ngunit para sa bawat transitive dependency sa tree. Gumagamit ang mga umaatake ng typosquatting (hal.,reqeusts,crossenv,lodahs), dependency confusion (pag-publish ng pampublikong package sa npm o PyPI na may eksaktong parehong pangalan at mas mataas na numero ng bersyon, gaya ng99.99.9, bilang panloob na pribadong package ng iyong kumpanya), o mga pag-takeover ng maintainer account para mag-slip ng isang linyang tulad"postinstall": "node index.js"sa isang pakete. - Python (
setup.pyat.pthfiles): Kailanpipnag-i-install ng source distribution (sdist.tar.gz), ito ay nagpapatupadsetup.pyna may ganap na mga pribilehiyo ng interpreter ng Python. Kahit na kapag nag-i-install ng pre-compiled binary wheels (.whl) na hindi isinasagawasetup.pysa panahon ng pag-install, kasama ng mga umaatake ang malisyosong.pth(path configuration) na mga file ay direktang nahulog sasite-packages/. Anumang linya sa loob a.pthfile na nagsisimula saimportay awtomatikong isinasakatuparan ng Python interpreter sa bawat pagkakataonpythonnagsisimula sa sistemang iyon. - ** kalawang (
build.rs) at Go**: Sa Rust, awtomatikong nagko-compile at nag-e-execute ang Cargobuild.rshindi lamang sa panahoncargo buildocargo run, ngunit kaagad kapagrust-analyzer(sa loob ng VS Code o IntelliJ) ay nagbubukas ng folder ng proyekto sa mga uri ng index. Pagbubukas lamang ng isang naka-clone na Rust repository sa iyong IDE gamit angrust-analyzerpinapagana ay nagpapatupad ng arbitrary na code sa loobbuild.rsbago ka mag-type ng terminal command.
2. Nakakahamak o Na-hijack na Mga Extension ng IDE (VS Code Marketplace, OpenVSX, JetBrains)¶
- Visual Studio Code, Cursor, Windsurf, at mga extension ng VSCodium (
.vsix) tumakbo sa pangunahing proseso ng Node.js Extension Host sa iyong workstation na may zero sandboxing. Anumang naka-install na extension ay may ganap na read/write access sa iyong buong filesystem, ay maaaring magbunga ng mga tahimik na proseso ng bata (child_process.exec), maaaring basahin ang bawat bukas na buffer ng editor at.envfile, at maaaring i-hook ang iyong pinagsamang terminal. - Ang mga aktor ng pagbabanta ay karaniwang naglalathala ng mga pekeng extension ng tema (
Darcula Official), mga pekeng AI coding assistant, o typosquatted linter/Prettier extension na tahimik na nagda-download ng second-stage infostealer o reverse shell sa sandaling ilunsad ang IDE.
3. Mga Weaponized Git Repositories at IDE Workspace Auto-Execution ("Fake Recruiter / Take-Home Test" Traps)¶
- North Korean state-sponsored groups (
Contagious Interview/Lazarus Group) at mga aktor ng pagbabanta na nakatuon sa crypto ay regular na lumalapit sa mga developer sa LinkedIn, Upwork, o GitHub na nagpapanggap bilang mga recruiter o CTO na nag-aalok ng mataas na bayad na malayuang tungkulin. Hinihiling nila sa developer na i-clone ang isang Bitbucket o GitHub repository para sa isang "15 minutong debugging assessment" o "Web3 gaming MVP review." - Ang mga repository na ito ay naglalaman ng mga nakatagong execution traps na nagti-trigger kapag binuksan sa isang IDE o sa panahon ng build:
.vscode/tasks.jsonkasama"runOn": "folderOpen": Awtomatikong nagpapatakbo ng background shell script sa sandaling i-click mo ang "Oo, pinagkakatiwalaan ko ang mga may-akda" sa VS Code.- Malisyoso
.git/hooks/o.gitmodules: Sinasamantala ang Git submodule configuration o bumuo ng mga script (Makefile,webpack.config.js,next.config.js,vite.config.ts) na naglo-load ng mga obfuscated na JavaScript payload (kadalasang may padded na libu-libong espasyo sa labas ng screen upang itago sa column 2,000+) na tumatawag sa isang external na C2 server.
Phase 1: Kumpletuhin ang Kredensyal ng Developer at Secret Rotation Matrix¶
Gamit ang malinis na pangalawang laptop o smartphone, sistematikong magtrabaho sa pamamagitan ng 12-point na imbentaryo ng kredensyal ng developer na ito. Ipagpalagay na anumang file na nababasa ng iyong non-root OS user account (chmod 600 o 644 pagmamay-ari ng iyong user) ay na-upload sa server ng umaatake sa loob ng 3 segundo ng pagsasagawa ng payload.
| Kategorya ng Kredensyal | Eksaktong Lokal na Mga Path ng File na Na-harvest sa Workstation | Mandatoryong Pagbawi at Pag-ikot ng Pagkilos (Mula sa Malinis na Device) |
|---|---|---|
| 1. AWS IAM at SSO | -/.aws/credentials-/.aws/config-/.aws/sso/cache/*.json-/.aws/cli/cache/*.json |
1. Sa AWS IAM Console, kaagad I-deactivate at Tanggalin lahat ng static na Access Keys (AKIA...) na nakaimbak sa laptop na iyon.2. Sa AWS IAM Identity Center (SSO), bawiin ang mga aktibong session ng user at tanggalin ang nakarehistrong mga token ng device ng kliyente ng OIDC. 3. I-audit ang AWS CloudTrail para sa GetCallerIdentity, CreateUser, CreateAccessKey, AssumeRole, ListBuckets, at SecretsManager:GetSecretValue mga tawag na nagmumula sa hindi pangkaraniwang mga IP o user-agents (Boto3, aws-cli, Go-http-client). |
| 2. Google Cloud (GCP) at Firebase | -/.config/gcloud/credentials.db-/.config/gcloud/access_tokens.db-/.config/gcloud/application_default_credentials.json-/.config/configstore/firebase-tools.json*-service-account.json |
1. Pumunta sa myaccount.google.com/permissions at bawiin ang access para sa Google Cloud SDK at Firebase CLI.2. Sa GCP Console > IAM at Admin > Service Accounts, tanggalin ang anumang Service Account JSON key ( private_key_id) na na-download sa hard drive ng workstation.3. Siyasatin ang Cloud Audit Logs para sa mga hindi awtorisadong IAM binding o paggawa ng Compute Engine. |
| 3. Microsoft Azure at Entra ID | -/.azure/msal_token_cache.bin-/.azure/accessTokens.json-/.azure/azureProfile.json |
1. Magpatakbo ng isang Entra ID Admin Revoke-MgUserSignInSession -UserId <your-user-id> upang pawalang-bisa ang lahat ng Refresh Token at Primary Refresh Token (PRT).2. Tanggalin ang anumang mga lihim o sertipiko ng kliyente ng Pangunahing Serbisyo na nakaimbak nang lokal. |
| 4. Kubernetes at Helm | -/.kube/config-/.kube/cache/-/.config/helm/registry/config.json |
1. Kung -/.kube/config naglalaman ng mga static na sertipiko ng kliyente (client-certificate-data / client-key-data) o matagal nang ServiceAccount bearer token, bawiin ang certificate sa pamamagitan ng iyong cluster CA (CSR / RBAC removal) o tanggalin at muling likhain ang ServiceAccount secret agad.2. I-audit ang mga audit log ng Kubernetes API Server para sa exec, pods, o secrets ilista/kumuha ng mga pandiwa. |
| 5. GitHub, GitLab at Bitbucket | -/.ssh/id_ed25519, -/.ssh/id_rsa-/.config/gh/hosts.yml-/.git-credentials, -/.netrc-/.gitconfig |
1. Pumunta sa github.com/settings/keys (at mga katumbas ng GitLab/Bitbucket) at Tanggalin ang SSH public key at GPG/SSH commit-signing key mula sa infected na makina.2. Pumunta sa github.com/settings/tokens at github.com/settings/applications para bawiin ang lahat ng Personal Access Token (ghp_, github_pat_), OAuth app (GitHub CLI, VS Code, Git Credential Manager), at mga aktibong web session.3. Suriin ang Security Log ( github.com/settings/security-log) para sa repo.clone, org.Invite_member, o hook.create. |
| 6. GPG at Code-Signing Keys | -/.gnupg/private-keys-v1.d/-/Library/Keychains/login.keychain-db (Apple Developer ID / .p12) |
1. Kung ang iyong GPG private key ay naka-store sa disk nang walang hardware smartcard (YubiKey OpenPGP) at ang passphrase ay naka-cache sa gpg-agent o nag-type kamakailan, bumuo at mag-publish ng GPG Revocation Certificate kaagad at alisin ang GPG key mula sa GitHub/GitLab.2. Bawiin ang anumang na-export na Apple Developer .p12 o Android Keystore .jks code-signing certificate na nakaimbak sa makina. |
| 7. Mga Rehistro ng Package (npm, PyPI, Cargo, RubyGems, NuGet) | -/.npmrc (_authToken=...)-/.pypirc-/.cargo/credentials.toml-/.gem/credentials |
1. Mag-log in sa npmjs.com > Access Token, pypi.org > Mga setting ng account > API token, crates.io > Account Settings > API Token, at rubygems.org, at Bawiin kaagad ang lahat ng aktibong token. 2. I-audit ang iyong mga na-publish na package (tingnan ang Phase 2 sa ibaba) upang kumpirmahin na hindi nagtulak ang attacker ng backdoored release sa nakalipas na ilang oras. |
| 8. Mga Rehistro ng Docker at Container | -/.docker/config.json (Base64 auths para sa Docker Hub, GHCR, ECR, GCR, Quay) |
1. Tandaan mo yan "auth" sa -/.docker/config.json (kapag hindi ginagamit credsStore: osxkeychain o wincred) ay hindi naka-encrypt na Base64 username:password_or_token.2. Bawiin ang Personal Access Token sa Docker Hub ( hub.docker.com/settings/security), GitHub Container Registry, at Quay.io. |
| 9. Infrastructure-as-Code (Terraform / Pulumi / Ansible Vault) | -/.terraform.d/credentials.tfrc.json**/terraform.tfstate (Mga file ng lokal na estado)-/.pulumi/credentials.json-/.vault-token |
1. Bawiin ang Terraform Cloud / Enterprise user API token at HashiCorp Vault token. 2. KRITIKAL: Anumang lokal terraform.tfstate file sa iyong disk ay naglalaman ng plaintext password, RDS master credential, pribadong TLS key, at IAM secret key para sa bawat mapagkukunang pinamamahalaan ng estadong iyon. I-rotate ang bawat lihim na isinangguni sa loob ng lokal .tfstate mga file. |
| 10. Mga Database at Caching CLI History | -/.psql_history, -/.pgpass-/.mysql_history, -/.my.cnf-/.rediscli_history-/.mongodb/mongosh/Mga config ng DBeaver / TablePlus / DataGrip |
1. Ang mga tagapamahala ng database ng GUI (TablePlus, DBeaver, DataGrip, Postico, pgAdmin, MongoDB Compass) ay nag-iimbak ng mga naka-encrypt o na-obfuscate na password ng database nang lokal na regular na nagde-decrypt ng mga magnanakaw. 2. I-rotate ang mga password ng user ng database para sa anumang staging o production database na maa-access sa pamamagitan ng VPN, balwarte, o pampublikong IP mula sa iyong workstation. |
11. Aplikasyon .env Mga File at Third-Party na SaaS Key |
**/.env, **/.env.local, **/.env.production, **/.env.development |
I-rotate ang bawat API key na nakaimbak sa loob ng lokal na proyekto .env mga file: Stripe (sk_live_...), OpenAI (sk-...), Antropiko (sk-ant-...), Twilio, SendGrid, AWS SES, Slack Bot Token (xoxb-...), Discord Bot Token, Datadog, Sentry, Supabase (service_role), Firebase Admin, at JWT signing secrets. |
| 12. Mga Kilalang Host at Bastion Jump Server ng SSH | -/.ssh/config-/.ssh/known_hosts-/.zsh_history, -/.bash_history |
Agad na nag-parse ang mga attacker -/.ssh/config at -/.zsh_history upang mahanap ang bawat panloob na IP ng server, bastion host, at username na iyong kinokonekta, pagkatapos ay gamitin ang iyong ninakaw -/.ssh/id_ed25519 susi upang mag-log in nang diretso sa mga server na iyon. Alisin ang iyong lumang pampublikong key mula sa -/.ssh/authorized_keys sa bawat malayong server ng Linux at suriin /var/log/auth.log sa mga server na iyon para sa mga hindi awtorisadong pag-login sa SSH. |
Phase 2: Pagsusuri para sa Automated Supply-Chain Worm Propagation (GitHub, CI/CD & Package Registries)¶
Hindi tulad ng generic na malware, ang mga payload na naka-target sa developer ay partikular na naka-program upang mag-self-propagate sa software supply chain sa loob ng ilang segundo ng pag-landing sa iyong workstation. Bago ka bumalik sa paglilinis ng iyong laptop, gamitin ang iyong malinis na device upang i-verify na ang iyong mga ninakaw na kredensyal ay hindi pa nagamit upang mahawahan ang iyong team o ang iyong mga downstream na user:
- I-audit ang iyong GitHub / GitLab Repositories para sa Silent Backdoors at Malicious Workflows:
- Suriin
.github/workflows/*.ymlsa lahat ng repositoryo na mayroon kang access sa pagsulat: Mga kamakailang supply-chain worm (Shai-Hulud,tj-actions/changed-fileskompromiso, atultralyticspagsasamantala) ay awtomatikong gumagamit ng mga ninakaw na token ng developer upang gumawa ng isang nakakahamak na daloy ng trabaho ng Mga Pagkilos sa GitHub o baguhin ang isang umiiral na daloy ng trabaho upang itapon${{ toJSON(secrets) }}(pag-exfiltrate sa mga lihim ng pag-deploy ng produksyon ng iyong organisasyon mula sa mga runner ng GitHub Actions). - I-verify ang mga kamakailang commit ng may-akda at committer timestamp: Tandaan na kahit sino ay maaaring magpeke ng pangalan ng may-akda at timestamp ng Git (
git commit --date="..." --author="..."). Sa GitHub, siyasatin ang Push Events sa repository Activity view o organisasyon Audit Log (repo.push), na nagtatala ng totoong timestamp sa gilid ng server at ang eksaktong token ng pagpapatunay (oauth_application_idossh_key_fingerprint) na nagtulak ng code. - Suriin ang Repository Webhooks, Deploy Keys, at Collaborators: Tumingin sa ilalim ng Settings > Webhooks, Settings > Deploy keys, at Settings > Collaborators and teams sa iyong mga repository para matiyak na hindi nagdagdag ang attacker ng patuloy na read/write deploy key o webhook na tumuturo sa isang external na server.
- Pag-audit ng npm, PyPI, Cargo, at Docker Hub para sa Mga Hindi Pinahihintulutang Paglabas ng Package:
- Kung isa kang maintainer o collaborator sa anumang pampubliko o pribadong package sa npm, PyPI, RubyGems, o Crates.io, tingnan ang tab na Bersyon / Kasaysayan ng Paglabas para sa bawat package sa ilalim ng iyong account.
- Kung ang bersyon ng patch (halimbawa,
1.4.2pagkatapos ng iyong huling lehitimong pagpapalaya1.4.1) ay nai-publish sa loob ng takdang panahon ng iyong kompromiso sa workstation, kaagad na ihinto o bawiin ang bersyong iyon (npm deprecate <pkg>@<version> "CRITICAL: Compromised version, do not use"o yank sa PyPI) at makipag-ugnayan sa npm Support (security@npmjs.com/ GitHub Security) o PyPI Security (security@pypi.org) upang alisin ang malisyosong artifact at mga bersyon na apektado ng quarantine. - Suriin ang Secret TruffleHog / Git Clone Exfiltration:
- Ang mga magnanakaw ng supply-chain ay madalas na tumatawag sa GitHub/GitLab API gamit ang iyong ninakaw na token upang i-clone ang bawat pribadong imbakan ng organisasyon na mayroon kang access at magpatakbo ng mga awtomatikong sikretong scanner (
TruffleHogoGitleaks) laban sa buong kasaysayan ng commit ng iyong kumpanya. Kung ang iyong organisasyon ay hindi sinasadyang gumawa ng isang lihim sa kasaysayan ng Git ng isang pribadong repositoryo nang hindi ito iniikot, i-rotate ang mga makasaysayang lihim na iyon ngayon.
Phase 3: Offline Forensic Triage sa Nakompromisong Workstation¶
Sa iyong workstation ganap na nadiskonekta sa Wi-Fi at Ethernet, magbukas ng terminal window para magsagawa ng offline na triage. Ang iyong layunin ay dalawa: (A) hanapin ang bawat isa .env at configuration file sa disk para malaman mo kung aling mga lihim ang iikot, at (B) makuha ang ebidensya kung ano talaga ang ginawa ng nakakahamak na package o extension bago mo i-wipe ang operating system.
Hakbang 1: Imbentaryo Bawat Nakalantad .env, Pribadong Key, at State File sa Iyong Disk¶
Patakbuhin ang read-only na command na ito sa iyong offline na macOS, Linux, o WSL2 workstation para bumuo ng kumpletong checklist ng bawat lokal na file na naglalaman ng mga lihim na maaaring mabasa ng malware:
# Create an offline audit list of all .env files, Terraform states, kubeconfigs, and private keys in your home directory:
find ~ -maxdepth 5 \( \
-name ".env" -o \
-name ".env.*" -o \
-name "*.tfstate" -o \
-name "*.tfstate.backup" -o \
-name "*.pem" -o \
-name "*.key" -o \
-name "*.p12" -o \
-name "*.pfx" -o \
-name "*service-account*.json" -o \
-name "credentials.json" -o \
-name ".npmrc" -o \
-name ".pypirc" -o \
-name ".netrc" \
\) -not -path "*/node_modules/*" -not -path "*/.git/*" -not -path "*/Library/Caches/*" 2>/dev/null > ~/exposed_secrets_inventory.txt
cat ~/exposed_secrets_inventory.txt
Balik-aral -/exposed_secrets_inventory.txt linya sa linya at buksan ang bawat isa .env o .tfstate offline na file para ma-rotate mo ang bawat API key, database password, at webhook secret na nakalista sa loob ng mga ito mula sa iyong malinis na device.
Hakbang 2: Siyasatin Kung Ano ang Isinagawa ng Malicious Package o IDE Extension¶
Bago tanggalin ang nakakasakit na folder, siyasatin ang eksaktong payload at tingnan kung saan ito naka-install ng persistence sa iyong operating system:
# 1. Inspect package.json lifecycle scripts in the suspect project and its node_modules:
grep -rnE '"(preinstall|install|postinstall|prepublish|prepare)"' ./package.json ./node_modules/*/package.json ./node_modules/@*/*/package.json 2>/dev/null
# 2. Check Python site-packages for malicious .pth startup hook files:
find . -path "*/site-packages/*.pth" -exec head -n 20 {} + 2>/dev/null
# 3. Inspect recently installed or modified VS Code / Cursor / Windsurf Extensions:
ls -lt ~/.vscode/extensions/ ~/.cursor/extensions/ ~/.windsurf/extensions/ 2>/dev/null | head -n 30
# 4. Check for persistence injected into your Shell RC profiles and Git global hooks:
tail -n 30 ~/.zshrc ~/.bashrc ~/.bash_profile ~/.zprofile ~/.profile 2>/dev/null
git config --global --list | grep -E "core.hooksPath|alias|credential|filter"
Hakbang 3: Paghanap para sa OS-Level Persistence na Ibinaba ng Developer Malware (macOS, Linux, at Windows)¶
Ang mga nakakahamak na dependency at "pekeng recruiter" na mga repositoryo ay madalas na nag-aalis ng mga permanenteng ahente sa background na itinago bilang mga nag-update ng system, Node daemon, o Spotlight indexer:
- Sa Apple macOS:
# 1. Check user and system LaunchAgents / LaunchDaemons for recently added .plist files: ls -laht ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons # 2. Check active cron jobs and running background node/python/curl/nohup processes: crontab -l ps aux | grep -iE "node|python|osascript|curl|wget|nc|bash -i|/tmp/|/var/tmp/|Library/Application Support" - Sa Linux / Ubuntu / Fedora / WSL2:
# 1. Check user systemd services, cron jobs, and SSH authorized_keys: ls -la ~/.config/systemd/user/ /etc/systemd/system/ crontab -l cat ~/.ssh/authorized_keys # 2. Check running processes executing out of /tmp, /dev/shm, or ~/.cache: ls -la /proc/*/exe 2>/dev/null | grep -E "/tmp/|/dev/shm/|\.cache|\.local" - Sa Windows (Native o Host ng WSL2):
- Tandaan na ang isang nakakahamak na npm o Python script na tumatakbo sa loob ng WSL2 (Windows Subsystem para sa Linux) ay maaaring direktang ma-access ang iyong buong host ng Windows
C:\magmaneho sa pamamagitan ng/mnt/c/Users/<username>/at maaaring mag-invokepowershell.exeocmd.exedirekta mula sa loob ng shell ng Linux upang mahawahan ang Windows host Registry (HKCU:\Software\Microsoft\Windows\CurrentVersion\Run), Mga Naka-iskedyul na Gawain, at Chrome/EdgeCookiesmga database. - Patakbuhin ang buong Windows PowerShell persistence audit sa aming session cookie hijacking at infostealer gabay at ang aming malware, ransomware, at gabay sa impeksyon ng spyware.
Phase 4: Bakit Kailangan Mong Punasan at Muling Buuin ang Developer Workstation¶
Kahit na mahanap at tanggalin mo ang nakakahamak node_modules folder, ang .vsix extension, at isang buhong -/Library/LaunchAgents plist, hindi ka dapat magpatuloy sa paggamit ng nakompromisong developer workstation para sa production engineering nang hindi nagsasagawa ng malinis na OS wipe at reinstall.
Binabago ng mga sopistikadong payload na naka-target sa developer ang mga kasalukuyang lehitimong binary o mga configuration file sa iyong system na walang antivirus scanner na nag-flag bilang nakakahamak:
1. Trojanized Local CLI Binaries (git, ssh, sudo, aws, kubectl, docker): Hindi ma-overwrite ang isang payload na tumatakbo sa ilalim ng iyong user account /usr/bin/ssh walang sudo, kaya sa halip ay bumaba ito ng script ng wrapper sa -/.local/bin/ssh, -/bin/git, o -/bin/sudo at inilalagay ang direktoryo na iyon sa iyong PATH. Sa susunod na mag-type ka sudo o ssh -i pagkatapos muling kumonekta sa internet, tahimik na haharangin ng wrapper ang iyong password o passphrase at ipapasa ito sa umaatake bago tawagan ang tunay na binary.
2. ** Mga nahawaang Lokal na Package Cache (-/.npm/_cacache, -/.cache/pip, -/.cargo/registry, -/Library/Caches/pnpm)**: Maaaring lason ng malware ang mga naka-cache na tarball sa loob ng iyong lokal na package manager cache upang kahit na mag-install ka ng malinis, lehitimong package sa susunod na linggo, i-unpack ng iyong package manager ang backdoored tarball mula sa iyong lokal na cache.
3. Binagong IDE Core Files (workbench.desktop.main.js): Ang ilang partikular na VS Code at mga kargamento ng Cursor ay direktang nag-patch sa Electron asar archive o workbench.desktop.main.js sa loob ng bundle ng IDE application para mabuhay ang backdoor sa pag-alis ng lahat ng extension.
I-back up lamang ang purong source code (na-verify sa pamamagitan ng git status at git diff sa isang malinis na makina) at mga personal na dokumento, pagkatapos ay magsagawa ng malinis na macOS Burahin ang Lahat ng Nilalaman at Mga Setting / DFU Restore, isang malinis na Linux USB installation, o malinis na Windows 11 USB installation.
Pinapatigas ang Iyong Bagong Workstation ng Developer Laban sa Mga Pag-atake sa Supply-Chain sa Hinaharap¶
Kapag nagse-set up ng iyong bagong wiped na developer workstation, palitan ang mga static na plaintext na file sa iyong home directory ng hardware-backed, ephemeral, at sandboxed na daloy ng trabaho upang kahit na may malisyosong dependency sa hinaharap, mayroong zero static na mga lihim sa disk para ito ay manakaw:
1. I-disable ang Automatic Lifecycle Script Execution sa Package Managers¶
I-configure npm, pnpm, yarn, at pip kaya ang mga hindi pinagkakatiwalaang dependency ay hindi maaaring tahimik na magsagawa ng mga script ng shell sa panahon ng pag-install:
- Node.js (npm / yarn / pnpm):
# Globally disable automatic preinstall/postinstall script execution in npm:
npm config set ignore-scripts true
pnpm.onlyBuiltDependencies sa package.json, paggawa pnpm Ang v10+ ay makabuluhang mas ligtas laban sa mga supply-chain worm kaysa sa default npm.)
- Python (pip / uv):
# Refuse to run arbitrary setup.py scripts from source distributions (.tar.gz); require binary wheels only:
export PIP_ONLY_BINARY=":all:"
npm config set before, pnpm minimumReleaseAge, o Socket.dev / Artifactory firewall) upang tanggihan ang mga bersyon ng package na na-publish sa loob ng huling 48 hanggang 72 oras.
2. Tanggalin ang Plaintext -/.ssh/id_ed25519, -/.aws/credentials, at .env Mga file mula sa Disk¶
- Ilipat ang SSH Keys sa isang Hardware YubiKey (
ed25519-sk) o Secure Enclave / Biometric Agent: - Huwag kailanman mag-iwan ng hindi naka-encrypt o passphrase-less
-/.ssh/id_ed25519file sa disk. Alinman ay bumuo ng hardware-resident FIDO2 SSH key (ssh-keygen -t ed25519-sk -O verify-required) sa isang pisikal na YubiKey (na nangangailangan ng iyong pisikal na pagpindot ng daliri sa metal contact para sa bawatgit pushosshkoneksyon), o iimbak ang iyong mga SSH key sa loob ng 1Password SSH Agent / Secretive (macOS Secure Enclave) kung saan ang pribadong key ay hindi kailanman umiiral bilang isang file sa-/.ssh/at bawat signature ay nag-uudyok para sa Touch ID / Windows Hello. - Palitan ang Static
-/.aws/credentials(AKIA...) na may Short-Lived SSO (aws sso loginoaws-vault): - Tanggalin ang lahat ng permanenteng IAM user access key (
AKIA...). Gamitin ang AWS IAM Identity Center (aws sso login) na may maiikling tagal ng session (1 hanggang 4 na oras) o balutin ang mga kredensyal sa loobaws-vaultna sinusuportahan ng macOS Keychain / Windows Credential Manager na may mga biometric na prompt. - Palitan ang Plaintext
.envMga file na may Runtime Secret Injection (1Password CLI op run,Doppler, oaws-vault): - Sa halip na mag-imbak
STRIPE_SECRET_KEY=sk_live_...sa isang plaintext.envmag-file na kahit anonode_modulespwede ang scriptfs.readFileSync('.env'), store reference tulad ngSTRIPE_SECRET_KEY="op://Dev-Vault/Stripe/secret_key"at ilunsad ang iyong lokal na dev server sa pamamagitan ngop run --env-file=".env.template" -- npm run devpagkatapos mag-authenticate gamit ang Touch ID. - Gumamit ng Trusted Publishing (OIDC) sa halip na Long-Lived
-/.npmrcat-/.pypircMga Token: - Huwag kailanman magtago ng token na may kakayahang mag-publish sa loob
-/.npmrco-/.pypircsa iyong laptop. Parehong PyPI at npm (sa pamamagitan ng Provenance / OIDC) ay nagbibigay-daan sa iyo na mag-publish ng mga package na eksklusibo mula sa nakahiwalay na GitHub Actions / GitLab CI Trusted Publishers gamit ang panandaliang OpenID Connect (OIDC) na mga token, ibig sabihin ay walang mga token sa pag-publish kailanman sa anumang laptop ng maintainer.
3. Ihiwalay ang Mga Hindi Pinagkakatiwalaang Repository at Bumuo ng Mga Script sa loob ng Mga Hardened DevContainer o VM¶
- Huwag kailanman mag-clone at magpatakbo ng "Recruiter Take-Home Assessment", hindi pamilyar na open-source na proyekto, o bounty repo nang direkta sa iyong host OS:
- Magpatakbo ng mga hindi pamilyar na proyekto sa loob ng GitHub Codespace, isang disposable cloud VM, o isang lokal na Docker DevContainer na HINDI bind-mount ang iyong host home directory (
-), ay HINDI naka-mount/var/run/docker.sock, at nagpapasa lang ng nasasakupan, read-only na Git token kung kinakailangan. - Audit VS Code / Mga Extension ng Cursor at I-disable ang Auto-Update para sa Mga Hindi Na-verify na Publisher:
- Tandaan na ang Cursor, Windsurf, at VSCodium ay kumukuha ng mga extension mula sa OpenVSX Registry (
open-vsx.org) kaysa sa opisyal na Visual Studio Marketplace ng Microsoft. I-verify ang eksaktong namespace ng publisher at bilang ng pag-install bago mag-install ng anumang extension, panatilihing minimal ang iyong listahan ng naka-install na extension, at i-uninstall ang mga extension na hindi mo na aktibong ginagamit.
Mga madalas itanong¶
Tumatakbo ba npm install --ignore-scripts ganap na protektahan ako mula sa isang malisyosong npm package?¶
Tumatakbo npm install --ignore-scripts hinaharangan ang pinakakaraniwang supply-chain attack vector: awtomatikong pagpapatupad ng paunang i-install, i-install, at postinstall mga utos ng shell na tinukoy sa loob package.json sa oras ng pag-install. Gayunpaman, hindi ka nito pinoprotektahan sa sandaling aktwal mong isagawa ang JavaScript code ng package (halimbawa, kapag tumakbo ka npm tumakbo dev, pagsubok sa npm, biro, webpack, o vite, o kapag nag-load ang ESLint/TypeScript plugin ng iyong IDE ng malisyosong plugin mula sa node_modules). Dahil walang runtime filesystem o network sandbox ang Node.js bilang default, mababasa pa rin ang anumang code na na-import sa panahon ng iyong build o pagsubok na hakbang. -/.aws at -/.ssh maliban kung ihiwalay mo ang build sa loob ng isang lalagyan o gamitin ang modelo ng pang-eksperimentong pahintulot ng Node (node --pahintulot).
Nagbukas ako ng kahina-hinalang repository sa VS Code mula sa isang recruiter sa LinkedIn, at na-click ko ang "Oo, pinagkakatiwalaan ko ang mga may-akda" bago ko napagtanto na ito ay isang scam. Nag-execute ba ang code kahit na hindi ako tumakbo npm install?¶
Oo, dapat mong ipagpalagay na ang arbitrary code ay naisakatuparan sa eksaktong segundo na iyong na-click ang "Oo, pinagkakatiwalaan ko ang mga may-akda." Sa Visual Studio Code at Cursor, ang pagbibigay ng Workspace Trust ay agad na nagbibigay-daan sa repositoryo .vscode/tasks.json file upang patakbuhin ang mga gawain sa shell sa background na naka-configure "runOn": "folderOpen", nagbibigay-daan sa workspace-defined .vscode/settings.json upang ituro ang mga server ng wika (gaya ng Python, TypeScript, ESLint, o Rust Analyzer) sa mga nakakahamak na executable path sa loob ng folder ng repositoryo, at nagti-trigger ng awtomatikong pagpapatupad ng build.rs sa mga proyektong Rust. Idiskonekta kaagad ang makina mula sa network at sundin ang Phase 1 upang paikutin ang lahat ng mga kredensyal.
Kung tumakbo ang nakakahamak na npm o PyPI package sa loob ng isang Docker container o DevContainer, ligtas ba ang aking host Mac o Windows laptop?¶
Ito ay ganap na nakasalalay sa kung anong volume ang nag-mount, mga variable ng kapaligiran, at mga socket ang ipinasa sa container na iyon. Mga karaniwang template ng DevContainer at lokal docker-compose.yml madalas na auto-forward ng mga setup ang iyong host SSH_AUTH_SOCK (nagbibigay-daan sa malware sa loob ng container na gamitin ang mga SSH key ng iyong host para kumonekta sa mga malalayong server o mag-push sa GitHub), bind-mount -/.aws, -/.gitconfig, o ang iyong workspace .env file, o i-mount ang host Docker socket (/var/run/docker.sock), na nagbibigay ng instant root access sa buong host operating system. Siyasatin ang iyong devcontainer.json at inspeksyon ng docker mounts upang makita kung aling mga mapagkukunan ng host ang nalantad sa loob ng lalagyan.
Paano ko masusuri kung ang bersyon ng package na ii-install ko ay may mga nakatagong script ng pag-install o na-obfuscate na telemetry bago ito i-install?¶
Bago mag-install ng hindi pamilyar na npm, PyPI, Go, o Rust package, siyasatin ito Socket.dev o Deps.dev (ng Google Open Source Insights), na static na sinusuri ang bawat bersyon para sa pag-install ng mga script, mga kahilingan sa network, pag-access sa filesystem,eval() obfuscation, at mga pagbabago sa maintainer. Maaari ka ring tumakbo npm tingnan ang sa iyong terminal upang siyasatin ang mga script ng lifecycle nito nang hindi dina-download o isinasagawa ang package.
Sinuri ang mga pinagmulan¶
- Cybersecurity at Infrastructure Security Agency (
CISA) at National Security Agency (NSA) (United States): Pag-secure sa Software Supply Chain: Mga Inirerekomendang Kasanayan para sa Mga Developer at Pagtugon sa Mga Nakompromisong Dependency. - GitHub Security Lab at npm Security Advisories: Pagtugon sa Mga Nakompromisong npm Package, Nakakahamak
.vscode/tasks.jsonMga Traps sa Imbakan (Contagious Interview), at GitHub Actions Workflow Secret Exfiltration Mitigations. - Python Packaging Authority (
PyPA) & PyPI Security: Paghawak ng Malicious Wheel.pthMga file,setup.pyArbitrary Execution, at Trusted Publishing (OIDC) Mga Alituntunin sa Pagpapatupad. - Buksan ang Worldwide Application Security Project (
OWASP): Software Supply Chain Security Cheat Sheet at CI/CD Security Top 10 Risks. - National Cyber Security Center (
NCSC) (United Kingdom): Pagtatanggol sa Mga Developer Environment at Cloud Management Planes Laban sa Target na Pag-aani ng Kredensyal.
Mga kaugnay na gabay¶
- Pag-hijack ng cookie ng session, mga infostealers, at pagbawi ng token
- Cryptocurrency wallet drain at seed phrase compromise
- Mga nakakahamak na extension ng browser, clipboard hijacker, at pag-aalis ng adware
- Mga pekeng scam sa alok ng trabaho, panloloko sa pagsusuri ng kagamitan, at pagnanakaw ng pagkakakilanlan sa onboarding
- Impeksyon sa malware, ransomware, at spyware
- Mga numerong pang-emergency ayon sa bansa