- atool npm अकाउंट 19 मई 2026 को compromise हो गया, और लगभग 22 मिनट के दौरान 317 पैकेजों में 637 malicious versions अपने-आप deploy किए गए
- payload 498KB की obfuscated Bun script है, जो SAP compromise में इस्तेमाल हुए Mini Shai-Hulud जैसी scanner संरचना और regex का उपयोग करती है
- चोरी का दायरा AWS credentials, Kubernetes tokens, Vault, GitHub PAT, npm tokens, SSH keys, और local secrets तक फैला हुआ है
- CI में GitHub Actions OIDC को npm publish token में exchange किया जाता है, और Sigstore signing व malicious workflow injection का दुरुपयोग किया जाता है
- प्रतिक्रिया के लिए यह जांचना ज़रूरी है कि कहीं compromised version install तो नहीं हुआ, जिन credentials तक पहुंच संभव थी उन्हें बदलना होगा, और lockfile·dependency pinning व install से पहले inspection की जरूरत है
हमले का सारांश
atool npm अकाउंट (i@hust.cc) 19 मई 2026 को compromise हुआ और लगभग 22 मिनट के दौरान 317 पैकेजों में 637 malicious versions publish किए गए
- यह अकाउंट 547 पैकेज maintain कर रहा था, और हमलावर ने उनमें से कम-से-कम 314 पर दो बार version bump किया
- प्रभावित पैकेजों में
size-sensor (मासिक 42 लाख downloads), echarts-for-react (38 लाख), @antv/scale (22 लाख), timeago.js (11.5 लाख), और कई @antv scope पैकेज शामिल हैं
- payload 498KB की obfuscated Bun script है, और 3 हफ्ते पहले SAP compromise में इस्तेमाल हुए Mini Shai-Hulud toolkit जैसी scanner संरचना, credential regex, और obfuscation patterns का उपयोग करती है
- चुराया गया data या तो public GitHub repositories में Git objects के रूप में commit किया जाता है, या RSA+AES से encrypt किए गए HTTPS POST के जरिए
t.m-kosche[.]com पर भेजा जाता है
वितरण का तरीका और semver जोखिम
- पहली लहर में 19 मई 2026 को 01:39~01:56 UTC के बीच लगभग 317 versions publish किए गए, और दूसरी लहर में 02:05~02:06 UTC के बीच उन्हीं पैकेजों पर लगभग 314 version bumps किए गए
- ज़्यादातर 309 पैकेजों को हर लहर में एक-एक करके ठीक 2 malicious versions मिले
size-sensor, echarts-for-react, jest-canvas-mock, jest-date-mock इन 4 पैकेजों को 3 versions मिले, जिससे लगता है कि इन्हें शुरुआती testing में इस्तेमाल किया गया
- हमलावर ने ज़्यादातर पैकेजों में
latest dist-tag नहीं बदला, लेकिन npm semver resolution latest से अलग range के भीतर सबसे ऊंचा version चुनता है
- उदाहरण के लिए, अगर
echarts-for-react का latest 3.0.6 पर ही रहे, तब भी "echarts-for-react": "^3.0.6" वाला project अगले clean install पर malicious version 3.2.7 पर resolve हो सकता है
execution path और payload
- सभी tampered versions ने
package.json में version bump के साथ "preinstall": "bun run index.js" जोड़ा
- 637 malicious versions में से 630 ने
optionalDependencies में @antv/setup: github:antvis/G2#<commit-sha> जोड़कर दूसरी payload copy fetch कराई
preinstall hook dependency install से पहले चलता है और Bun runtime की मांग करता है
- अगर
preinstall block हो जाए या skip हो जाए, तब भी GitHub impersonation commit की prepare script दूसरी execution path के रूप में बची रहती है
index.js एक single-line 498KB obfuscated Bun bundle है, जिसमें SAP compromise में इस्तेमाल हुए Mini Shai-Hulud payload जैसी Bun requirement, hex-variable obfuscation, 100KB flush-threshold scanner संरचना, और credential regex set मौजूद है
- CI environment detection GitHub Actions, Jenkins, GitLab CI, CircleCI, Travis, Buildkite, Drone, TeamCity, AppVeyor, Bitbucket Pipelines, CodeBuild, Azure DevOps, Netlify, Vercel सहित 20 से अधिक platforms के environment variables जांचती है
credential collection के लक्ष्य
- payload encrypted नामों वाले 80 से अधिक environment variables पढ़ता है, और file contents को regex से scan करता है
- मुख्य targets में GitHub token, npm token, GitHub Actions JWT, AWS key, Azure key, DB connection string, Stripe key, SSH key, Docker auth, Vault token, Kubernetes token, और URL embedded credentials शामिल हैं
- file scanner home directory में
.ssh, .aws/credentials, .npmrc, .docker/config.json, .kube/config जैसी standard credential locations पढ़ता है
- यह AWS credential resolution order को पूरा follow करता है, EC2 IMDSv2 और ECS container credential endpoint से IAM role credentials लाता है, और AWS STS
GetCallerIdentity व Secrets Manager access की भी कोशिश करता है
- Vault के लिए token file और
VAULT_ADDR, VAULT_TOKEN, VAULT_ROLE आदि की जांच की जाती है, और valid credential मिलने पर secret enumeration तथा AWS·Kubernetes authentication की कोशिश की जाती है
- Kubernetes के लिए service account token और
KUBECONFIG की जांच की जाती है, और अगर Docker socket मौजूद हो तो host के containers enumerate करके container escape की कोशिश की जाती है
C2 और data exfiltration
- GitHub API को C2 की तरह इस्तेमाल किया जाता है,
GET /user से चुराए गए GitHub tokens verify किए जाते हैं और GET /user/orgs से organizations enumerate की जाती हैं
repo या public_repo permission वाले tokens हमलावर के exfiltration repositories बनाने में इस्तेमाल किए जाते हैं
- बनाए गए repository का description उल्टे string
niagA oG eW ereH :duluH-iahS के रूप में रखा जाता है, जो सीधा करने पर “Shai-Hulud: Here We Go Again” बनता है
- repository names
harkonnen-melange-742, fremen-sandworm-315, gesserit-navigator-508 की तरह Dune-theme वाले 2 शब्द और एक संख्या जोड़कर बनाए जाते हैं
- exfiltrated data को Git Data API के जरिए blob, tree, commit, ref update क्रम में store किया जाता है
- अलग HTTPS sender
hxxps://t.m-kosche[.]com/api/public/otel/v1/traces को OpenTelemetry OTLP trace ingestion endpoint जैसा दिखाने के लिए configure किया गया है
- HTTPS payload gzip JSON को AES-256-GCM से encrypt करता है, और AES key को hardcoded public key से RSA-OAEP wrapping के जरिए सुरक्षित करता है
CI/CD और trust chain का दुरुपयोग
- चुराए गए tokens जिन GitHub repositories तक पहुंच सकते हैं, वहां से workflow run history, artifacts, secret names, branch lists, और Claude Code settings जुटाए जाते हैं
- GitHub API से secret values तक पहुंच नहीं मिलती, लेकिन secret names यह दिखा देते हैं कि कौन-से credentials मौजूद हैं
- malicious workflow
.github/workflows/codeql.yml में inject किया जाता है, इसका नाम Run Copilot होता है और यह push पर trigger होता है
- workflow
VARIABLE_STORE: ${{ toJSON(secrets) }} के जरिए repository secrets को JSON के रूप में environment variable में डालता है, format-results.txt में save करता है, और फिर artifact के रूप में upload करता है
- इसके बाद artifact zip download किया जाता है, और workflow run deletion व branch ref reset से injection के निशान कम किए जाते हैं
- GitHub Actions OIDC वाले CI में
https://registry.npmjs.org/-/npm/…; endpoint के जरिए npm publish token exchange की कोशिश की जाती है
- payload में Fulcio, Rekor, और SLSA provenance formats सहित Sigstore signing implementation मौजूद है, जिससे compromised CI identity से signed artifacts बनाए जा सकते हैं
डेवलपमेंट एनवायरनमेंट और AI कोडिंग एजेंट संक्रमण
- पेलोड GitHub API के जरिए remote injection और filesystem write के जरिए local infection का उपयोग कर Claude Code, Codex और VS Code एनवायरनमेंट को निशाना बनाता है
- चुराए गए टोकन से जिन repositories तक पहुंच संभव होती है, उनमें
.vscode/tasks.json, .claude/index.js, .claude/settings.json, .claude/setup.mjs, .vscode/setup.mjs को commit किया जाता है
.claude/settings.json SessionStart hook रजिस्टर करता है ताकि हर बार Claude Code session शुरू होने पर node .claude/setup.mjs चलाया जाए
.vscode/tasks.json में "runOn": "folderOpen" प्रोजेक्ट folder खुलते ही execution trigger करता है
setup.mjs GitHub official release से Bun v1.3.14 डाउनलोड करता है, binary extract करता है, और फिर पेलोड चलाता है
- local infection path पेलोड को
~/.claude/package/index.js और ~/.codex/package/index.js में copy करता है, और मौजूदा project config files को scan करके hook inject करता है
- Apple Silicon Mac पर यह local infection path छोड़ दिया जाता है, जबकि Linux, Intel Mac और Windows पर यह चलाया जाता है
persistence और GitHub dead-drop C2
kitty-monitor के रूप में छिपा persistence daemon Linux पर systemd user service के रूप में और macOS पर ~/Library/LaunchAgents/com.user.kitty-monitor.plist के रूप में install होता है
- installer
systemctl --user enable --now और loginctl enable-linger का उपयोग करता है ताकि logout के बाद भी यह बना रहे
cat.py daemon हर 1 घंटे में GitHub Search API को poll करता है और firedalazer keyword वाले commits खोजता है
- commit message format
firedalazer <base64_url>.<base64_signature> होता है, और hardcoded 4096-bit RSA public key से RSA-PSS signature verify करने के बाद URL की Python code को execute किया जाता है
- अलग
gh-token-monitor daemon चुराए गए GitHub tokens को 60-second interval पर poll करता है, और TTL 24 घंटे है
- process memory scanner Linux पर
/proc/pid/maps+mem और Windows पर ReadProcessMemory का उपयोग करके GitHub Actions runner worker process की readable memory regions को dump करता है
antvis/G2 की नकल करने वाले commit
compromise indicators
- 2026-05-19 01:44~02:06 UTC के बीच
atool (i@hust.cc) द्वारा publish किए गए packages जांच के दायरे में हैं
preinstall script bun run index.js है
- पेलोड SHA256
a68dd1e6a6e35ec3771e1f94fe796f55dfe65a2b94560516ff4ac189390dfa1c है
antvis/G2 की नकल करने वाले commits इस प्रकार हैं
1916faa365f2788b6e193514872d51a242876569 — 626 versions
7cb42f57561c321ecb09b4552802ae0ac55b3a7a — 2 versions
dc3d62a2181beb9f326952a2d212900c94f2e13d — 1 version, garbage collected
- network IoC में
hxxps://t.m-kosche[.]com/api/public/otel/v1/traces, 169.254.169.254 EC2 metadata, 169.254.170.2 ECS container metadata requests शामिल हैं
- repository IoC में
chore/add-codeql-static-analysis branch, Run Copilot workflow, और toJSON(secrets) को format-results.txt में dump करने वाला .github/workflows/codeql.yml शामिल है
- डेवलपमेंट एनवायरनमेंट IoC में
.claude/settings.json का SessionStart hook, .vscode/tasks.json का "runOn": "folderOpen", .claude/setup.mjs, .vscode/setup.mjs शामिल हैं
- persistence IoC में
kitty-monitor.service, com.user.kitty-monitor.plist, ~/.local/bin/gh-token-monitor.sh, ~/.local/share/kitty/cat.py, /var/tmp/.gh_update_state शामिल हैं
जांच के लिए प्रमुख packages
compromised-packages.csv तालिका में Package और Compromised Versions नाम के 2 columns हैं, और तालिका के अनुसार 317 packages दिखाए गए हैं
- lockfile में इन packages और 2026-05-19 को publish किए गए malicious versions की मौजूदगी जांचनी चाहिए
- प्रमुख
@antv packages और malicious versions
@antv/g2: 5.5.8, 5.6.8
@antv/g6: 5.2.1, 5.3.1
@antv/g: 6.4.1, 6.5.1
@antv/l7: 2.26.10, 2.27.10
@antv/x6: 3.2.7, 3.3.7
@antv/s2: 2.8.1, 2.9.1
@antv/f2: 5.15.0, 5.16.0
- सामान्य npm packages और malicious versions
echarts-for-react: 3.0.7, 3.1.7, 3.2.7
size-sensor: 1.0.4, 1.1.4, 1.2.4
jest-canvas-mock: 2.5.3, 2.6.3, 2.7.3
jest-date-mock: 1.0.11, 1.1.11, 1.2.11
timeago.js: 4.1.2, 4.2.2
timeago-react: 3.1.7, 3.2.7
@lint-md/cli: 2.1.0, 2.2.0
@lint-md/core: 2.1.0, 2.2.0
@lint-md/parser: 0.1.14, 0.2.14
प्रतिक्रिया और बचाव
- अगर compromised version इंस्टॉल हुआ था, तो build environment से एक्सेस किए जा सकने वाले npm token, GitHub PAT, AWS key, SSH key, cloud credentials, database password, Vault token, Kubernetes service account token, और local password manager के secret values को बदलना चाहिए
t.m-kosche[.]com को network और DNS स्तर पर block करना चाहिए
- यह जांचना चाहिए कि build environment से एक्सेस किए जा सकने वाले token वाले GitHub accounts के तहत कोई unauthorized public repository बनाई गई है या नहीं
- CI pipeline में unauthorized package publish और npm OIDC token exchange logs की समीक्षा करनी चाहिए
- यह देखने के लिए Sigstore transparency log जांचना चाहिए कि compromised CI identity से बनाए गए signed artifact मौजूद हैं या नहीं
- local Node.js project में
.claude/settings.json hook, .vscode/tasks.json auto-run task, .claude/setup.mjs, .vscode/setup.mjs की जांच करनी चाहिए
kitty-monitor systemd user service और com.user.kitty-monitor LaunchAgent को हटाना चाहिए, और ~/.local/share/kitty/cat.py, /var/tmp/.gh_update_state, ~/.local/bin/gh-token-monitor.sh की मौजूदगी की जांच करनी चाहिए
- dependencies को pin करना चाहिए या lockfile का उपयोग करना चाहिए ताकि semver range resolution किसी malicious version तक न पहुंच जाए
- CI/CD pipeline में Docker socket exposure और EC2 metadata access का audit करना चाहिए, और IMDSv2 hop limit restriction पर विचार करना चाहिए
- Package Manager Guard (pmg) एक open source install proxy है जो
preinstall चलने से पहले package को threat intelligence से मिलान करता है
- dependency cooldown configurable time window के भीतर deploy किए गए version को reject करता है, जिससे semver range के नए malicious release में resolve होने से पैदा होने वाली अचानक deployment wave को कम किया जा सकता है
- vet unexpected
preinstall hook, size spike, maintainer change जैसे abnormal package update को CI/CD pipeline तक पहुंचने से पहले detect कर सकता है
- एक ही account के तहत 547 package, और एक session में weaponize किए गए 314 से अधिक package का impact range npm trust model की structural weakness को उजागर करता है
संदर्भ सामग्री
1 टिप्पणियां
Hacker News की टिप्पणियाँ
अब NPM lifecycle scripts को डिफ़ॉल्ट रूप से disable होना चाहिए
सुविधा के नाम पर इसमें मनमाना code execution built-in है, और यह transitive dependencies पर भी लागू होता है। बड़े पैमाने पर फैले सभी NPM worm-शैली के हमले इसी default setting के ज़रिए फैले हैं। ऐसा नहीं होना चाहिए कि किसी खास command में एक बार इसे on करने से सभी transitive dependencies lifecycle scripts चला सकें; जिन dependencies को सच में इसकी ज़रूरत हो, उन्हें अलग से स्पष्ट रूप से mark करना चाहिए
ज़्यादातर NPM packages इन scripts पर निर्भर नहीं हैं, इसलिए अगर अभी तक नहीं किया है तो इसे globally off कर देना बेहतर है
हालांकि package पहली बार program में import होने पर भी जो चाहे बेकार चीज़ें चला सकता है
“इसे रोका नहीं जा सकता” जैसी बात सिर्फ़ उसी package manager के बारे में कही जाती है जहाँ ऐसी घटनाएँ नियमित रूप से होती रहती हैं
किसी बिंदु पर क्या Dependabot को बंद करके NPM packages को minor/patch versions तक पूरी तरह pin कर देना लगातार update करते रहने से बेहतर नहीं हो जाता?
खासकर frontend packages में आजकल meaningful security fixes supply-chain attacks की तुलना में कम दिखते हैं
यह दुखद स्थिति है, लेकिन frontend को एक static BOM में बदलकर और यह मानकर चलने में कि NPM कम से कम “पुराने version को दोबारा publish नहीं किया जा सकता” वाला नियम ठीक से लागू करता है, क्या कोई समस्या है?
ज्ञात CVE ठीक करने वाले versions के लिए exception रखा जा सकता है
हालात दिन-ब-दिन पागलपन की तरफ़ जा रहे हैं। मैंने तो निजी तौर पर अपनी मशीन से node, python, और सभी package managers हटा दिए हैं, और अब सिर्फ़ devcontainer या VM के अंदर ही इस्तेमाल करता हूँ
अगर developer community बहुत मज़बूत सुरक्षा भी बना ले, तब भी डर है कि कम से कम एक साल के भीतर models की social engineering क्षमता इतनी अच्छी हो जाएगी कि यह फिर भी हारने वाला खेल बना रहेगा
उदाहरण के लिए XZ hack में भारी मेहनत लगी थी, और वह मौजूदा maintainer को समय के साथ थकाने के तरीके पर आधारित था, इसलिए उसे तेज़ नहीं किया जा सकता था। ज़रूरी malicious messages को कुछ सेकंड में बनाकर भेजा जा सकता है, लेकिन उन्हें पढ़ने वाले इंसानों की गति तेज़ नहीं होती, और अगर सब एक साथ पहुँचें तो उल्टा शक पैदा होगा
input कितना convincing हो सकता है, इसकी भी एक सीमा है। XZ maintainer को भेजे गए किसी भी random malicious message को लेकर उसे और ज़्यादा निर्दयी, और ज़्यादा सटीक, और maintainer की निजी कमज़ोरियों व डर को बेहतर दर्शाने वाला बनाया जा सकता है, लेकिन क्या उससे कुल मिलाकर वह बहुत ज़्यादा असरदार हो जाता? शायद नहीं, या बहुत हुआ तो थोड़ा ही
अब जब Zed 1.0 हो गया है, मैं पूरी तरह migrate करना चाहता हूँ, लेकिन मेरी जानकारी में उसका security model सब-कुछ-या-कुछ-नहीं वाला है। या तो मुझे अनजान NPM packages को मनमाने ढंग से download और install करने देना होगा, या फिर सारे LSP features बंद करने होंगे
और फिर ऐसी ख़बरें बार-बार दिखती रहती हैं
क्या npm ऐसा program चला सकता है जिसमें package upload को अपने-आप लगभग 10 मिनट delay किया जाए, और उस दौरान उसे तीसरे पक्ष की code auditing companies के ecosystem में भेजकर automated checks कराए जाएँ?
कौन-सा auditor सबसे तेज़ और सबसे भरोसेमंद ढंग से समस्याएँ पकड़ता है, इसका public leaderboard बनाया जा सकता है, या monetary rewards दिए जा सकते हैं
यह सूची अधूरी है। कम से कम एक और package, nx-console VS Code extension, भी कल इस worm से संक्रमित हुआ था और उसके 22 लाख downloads हैं
अगर credentials और network access वाला कोई व्यक्ति यह पढ़ रहा है, तो यह देखने के लिए उसकी dependency chain भी trace करना फ़ायदेमंद हो सकता है कि और कुछ है या नहीं। संदर्भ यहाँ है:
https://github.com/nrwl/nx-console/security/advisories/GHSA-...
PS: संक्रमण के तुरंत बाद लोगों को बताने के लिए मैंने इसे HN पर पोस्ट किया था, लेकिन दुर्भाग्य से इसे लगभग कोई upvotes नहीं मिले
पूरे ecosystem को देखें तो TC39 को JS में ही बेहतर standard library जोड़ने के तरीकों पर ध्यान देना चाहिए। इससे one-liner packages की संख्या घट सकती है
सहमत। जब मैं पहले Deno पर काम करता था, तो सबसे अच्छी बात standard library[0] और कुल मिलाकर ज़्यादा complete development environment थी। runtime में integrated test runner और assertion library होना तो बिल्कुल स्वाभाविक लगता है
0 - https://docs.deno.com/runtime/reference/std/
node:test[0] औरnode:assert/strict[1] modules देता है।node --testआसानी से Mocha की जगह ले सकता है, औरnode:assert/strictभी ठीक है, हालांकिchaiकभी-कभी ज़्यादा सुविधाजनक लगता है।expectजैसी usability की वजह से। Deno के @std मेंexpect-style assertion library हैसमस्या यह है कि Node ecosystem में test runners बहुत ज़्यादा हैं, और उनमें से काफ़ी को Mocha की तरह आसानी से replace नहीं किया जा सकता। इसलिए built-in test harness और assertion library की तरफ़ migration स्वाभाविक रूप से दर्दनाक और धीमा होगा। लोग कई कारणों से Jest और Vitest की ज़रूरत से ज़्यादा जटिल प्रकृति को पसंद करते हैं। बड़ी कंपनियों को Karma एक अच्छा विचार लगा था। “आपको unit testing के लिए V8 पसंद है? तो लीजिए, आपके मौजूदा V8 environment के अंदर हम V8 की एक और copy चला देते हैं” — इस सोच से और ज़्यादा developers को चिढ़ क्यों नहीं हुई, यह आज तक समझ नहीं आया
[0] https://nodejs.org/api/test.html
[1] https://nodejs.org/api/assert.html#strict-assertion-mode
किस language standard library में “3 घंटे पहले” जैसे format converter होते हैं? timeago.js वही करता है
slice.js सिर्फ़ Python-जैसी negative indexing देता है। TC39 पहले ही array.at() और array.slice() को negative values संभालने योग्य बना चुका है
https://nodejs.org/api/
बात यह है कि payload Docker socket को check करता है, और अगर वह मिले तो तीन क्रमिक तरीकों से container escape की कोशिश करता है
इसलिए devcontainer या VM के अंदर चलाने पर भी ऐसे worms बाहर निकलने की कोशिश पहले से कर रहे होते हैं
यह सुनिश्चित करना चाहिए कि आप rootless VM engine इस्तेमाल कर रहे हैं। जैसे Docker की जगह podman
इससे वह ज़माना याद आता है जब लोग कम-privilege Linux accounts बाँट देते थे और भरोसा करते थे कि kernel privilege escalation रोक देगा। Docker मूल रूप से वही चीज़ है, बस और प्रक्रियात्मक परतों के साथ। खासकर आजकल तो नए kernel local privilege escalation bugs मानो हर 5 मिनट में आ रहे हों
Podman इस मायने में थोड़ा बेहतर है कि वह attacker को root नहीं देता, लेकिन शुरू से ही account देना क्यों? सीधे एक proper VM इस्तेमाल करो
क्या Linux में BSD जैसी कोई व्यापक sandboxing है?
अब मैं Mr Bones' Wild Ride से उतरना चाहता हूँ, लेकिन डर है कि यह सब चलता ही रहेगा। मैंने जितना देखा है, कई commercial detection strategies package को load या use करने के समय repository/device/developer स्तर पर केंद्रित हैं
यह email spam या सामान्य malware से निपटने के तरीकों जैसा लगता है। इसलिए लगभग हमेशा ऐसे targets मौजूद रहेंगे जो malicious actors के लिए कोशिश करते रहने लायक़ होंगे। लेकिन email के विपरीत, package managers केंद्रीकृत प्राधिकरण वाले होते हैं, और out-of-band समस्याएँ आसानी से developers की ज़िम्मेदारी बताकर टाली जा सकती हैं
बाहर से देखने पर लगता है कि शायद हमें तेज़ releases और ढीली versioning culture से हटकर registry में स्थिर और गहराई से जाँचे गए versions पर ध्यान देना चाहिए। मात्रा और scale के प्रभाव की वजह से मैं ग़लत भी हो सकता हूँ, लेकिन यह अब भी संकेतक है कि ज़्यादा churn वाली languages अधिक बार प्रभावित होती दिखती हैं
काश इस पूरे मौजूदा परिदृश्य पर कोई व्यापक लेख मिलता
उस फ़िल्म के roller coaster का नाम Mr Bonestripper था: https://www.youtube.com/watch?v=NEZEgd8GjJc
इसके बजाय यह Roller Coaster Tycoon 2 से आया है: https://knowyourmeme.com/memes/mr-bones-wild-ride
spam की तुलना के हिसाब से, हम लगभग सभी commercial और social computer network environments में email addresses को खींचकर spam को लोगों द्वारा स्वीकार्य बनाने और उसे वैधता की सतही परत देने की दिशा में कुछ हद तक बस चुके हैं। इस क्षेत्र में भी कुछ वैसा ही होने की संभावना काफ़ी है। शायद Oracle license monitoring agents जैसे software और automated dependency management का मिश्रण — यानी दूसरे malware को allowlist करके supply-chain malware को “हल” करना — जैसा कुछ