TL; DR
ระหว่างวันที่ 1 เมษายนถึง 3 พฤษภาคม 2026 ผู้เผยแพร่ npm รายเดียว user0001ลงทะเบียนด้วยที่อยู่อีเมล Gmail ที่ยังไม่ได้รับการยืนยัน tanvisoul9@gmail.comได้ทำการปล่อยแพ็กเกจจำนวน 6 ชุดอย่างเงียบๆ โดยตั้งชื่อแพ็กเกจเหล่านั้นอย่างจงใจให้ฟังดูธรรมดาๆ และเกี่ยวข้องกับโครงสร้างพื้นฐาน: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtimeและ node-env-resolve.
สองเวอร์ชันล่าสุดของ node-env-resolveเวอร์ชัน 1.0.7 และ 1.0.8 ถูกระบบ Malware Early Warning (MEW) ของ Xygeni ตรวจพบว่าเป็นมัลแวร์เมื่อวันที่ 2 พฤษภาคม และได้รับการยืนยันว่าเป็นมัลแวร์เมื่อวันที่ 3 พฤษภาคม
มัลแวร์นี้มีความพิเศษตรงที่มันไม่ใช่สิ่งต่อไปนี้: ไม่มีบอท Telegram, ไม่มีการเรียกกลับ OAST, ไม่มีอะไรเลย obfuscationและไม่มีการพยายามดึงข้อมูลประจำตัว AWS ในระหว่างการติดตั้ง แต่จะดำเนินการดังนี้ postinstall.js สร้างรายการการคงอยู่ในการบูตของ Windows โดยใช้ปุ่ม Run ใน HKCU เพื่อเรียกใช้งาน wscript.exe โดยใช้ VBS stub เป็นพื้นฐาน จากนั้นจะสร้างเอเจนต์ Node.js ที่แยกต่างหาก ซึ่งรวมโมดูลสำหรับการบันทึกเสียงไมโครโฟน การขโมยประวัติการเข้าชมเว็บไซต์ การจับภาพหน้าจอ และการจำลองเมาส์/คีย์บอร์ด
เราเรียกคลัสเตอร์นี้ว่าคลัสเตอร์ เดฟแทปหลังจากติดตั้งชุดอุปกรณ์แล้ว ระบบจะทำงานต่อบนเครื่องของนักพัฒนา
ทั้งหกแพ็กเกจยังคงใช้งานได้บน npm ในขณะที่เขียนบทความนี้ เราได้ส่งเรื่องไปยังช่องทางแจ้งการละเมิดของ registry แล้ว Defenders ควรลบการติดตั้งใดๆ ออกจากผู้เผยแพร่ที่รอการลบออก
กลุ่มผลิตภัณฑ์: หกแพ็กเกจ จากผู้เผยแพร่รายเดียว
บัญชีผู้จัดพิมพ์ user0001 ยังไม่ได้รับการตรวจสอบ ไม่มีข้อมูล SCM การตรวจสอบยืนยัน อีเมลต้องไม่ผูกกับโดเมน และไม่มีประวัติการใช้งานมาก่อน ชื่อผู้ใช้ Gmail tanvisoul9 ไม่ปรากฏในบันทึกผู้เผยแพร่ npm อื่นใดที่เราค้นพบ
แพ็กเกจทั้งหกแพ็กเกจมีผู้ดูแลคนเดียวกัน เผยแพร่จากบัญชีเดียวกัน และใช้ข้อมูลเดียวกัน package.json ข้อความมาตรฐาน ไม่มี repositoryที่ homepage, และไม่ description ยาวกว่าบรรทัดเดียว
กลยุทธ์การตั้งชื่อเป็นส่วนที่น่าสนใจ ไม่เหมือนกับกลยุทธ์การสร้างความสับสนในการพึ่งพาหรือการตั้งชื่อที่สะกดผิดแบบคลาสสิก ชื่อเหล่านี้ไม่ได้มุ่งเป้าไปที่ไลบรารีต้นทางใดโดยเฉพาะ แต่ได้รับการปรับแต่งให้กลมกลืนไปกับสภาพแวดล้อมจริง package.json or npm ls เอาท์พุต
| แพ็คเกจ | เผยแพร่ครั้งแรก | รุ่นล่าสุด | รุ่น | บทบาทในกลุ่ม |
|---|---|---|---|---|
| เซ็นทรัลล็อกเกอร์ | 2026-04-01 12:46 UTC | 1.0.9 | 5, จาก 1.0.5 ถึง 1.0.9 | หน้าปก “ยูทิลิตี้การบันทึกข้อมูล” ของคลัสเตอร์; การเผยแพร่ครั้งแรกสุด |
| dom-utils-lite | 2026-04-14 07:36 UTC | 1.0.3 | 3 | ปกตัวช่วย DOM ทั่วไป |
| node-fetch-lite | 2026-04-19 10:22 UTC | 1.0.2 | 3 | เลียนแบบตระกูล node-fetch |
| ตัวเชื่อมต่อ-เอเจนต์ | 2026-04-25 05:12 UTC | 1.0.0 | 1 | ชื่อทั่วไป “เอเจนต์” |
| node-gyp-runtime | 2026-04-25 05:17 UTC | 1.0.0 | 1 | เลียนแบบเครื่องมือสร้างโมดูลเนทีฟ |
| node-env-resolve | 2026-04-25 05:21 UTC | 1.0.9 | 10, จาก 1.0.0 ถึง 1.0.9 | ยาหยอดแบบแอคทีฟ; การปลูกถ่ายแบบเต็มรูปแบบ |
ชื่อเหมือน centralogger, node-fetch-liteและ node-gyp-runtime ถูกออกแบบมาให้ดูไม่ก่อให้เกิดข้อโต้แย้งในการตรวจสอบโค้ด ฟังดูเหมือนสิ่งที่มีอยู่แล้วในโครงสร้างการพึ่งพาของโปรเจ็กต์
เมื่อรวมกับผู้เผยแพร่รายใหม่ที่ไม่ได้รับการตรวจสอบและลิงก์คลังข้อมูลที่ขาดหายไป พวกมันจึงก่อให้เกิดรูปแบบที่สามารถจดจำได้: ผู้กระทำการรายหนึ่งทำการป้อนชื่อที่เข้าถึงได้ง่ายลงในทะเบียน จากนั้นจึงปรับปรุงแก้ไขชื่อที่สำคัญอย่างรวดเร็ว ในกรณีนี้ node-env-resolve ได้รับ 10 เวอร์ชันภายใน 8 วัน
อะไรตกลงบนเครื่องพัฒนา Windows
ห่วงโซ่ที่เป็นอันตรายบน node-env-resolve:1.0.8 สั้น กระชับ และมีฟีเจอร์มากมายเป็นพิเศษสำหรับ RAT ของ npm
หลังการติดตั้ง: การคงอยู่และการแยกเอเจนต์
package.json ประกาศ hook สำหรับการติดตั้งเพียงตัวเดียว:
{ "scripts": { "postinstall": "node postinstall.js" } }postinstall.js ทำสามสิ่งตามลำดับ
ขั้นแรก ระบบจะสร้างไดเร็กทอรีการติดตั้งไว้ภายนอกโครงสร้างของ npm โดยเส้นทางจะถูกคำนวณในสคริปต์ขณะรันไทม์ดังนี้ INSTALL_DIRจากนั้นระบบจะทำการประมวลผลภายใน execSync('npm install --production --silent ...') ภายในนั้นเพื่อดึงส่วนประกอบที่จำเป็นสำหรับการทำงานของอิมแพลนต์ ซึ่งจะทำให้เอเจนต์ถูกบันทึกไว้ในดิสก์ด้วยตนเอง node_modules การตรวจสอบจะไม่พบสิ่งใด
ประการที่สอง มันจะเขียนโปรแกรมเรียกใช้งาน VBS และลงทะเบียนเพื่อให้คงอยู่ในการบูต:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run \ /v ${AGENT_NAME} \ /t REG_SZ \ /d "wscript.exe \"${vbsPath}\"" /fwscript.exe คือ Windows Script Host ซึ่งเป็นไบนารีที่ลงนามโดย Microsoft และทำงานได้ .vbs ไฟล์ที่ไม่มีหน้าต่างคอนโซล นั่นคือก่อนหน้านี้cisนี่คือเหตุผลว่าทำไมจึงนิยมใช้สำหรับการสร้างไฟล์เริ่มต้นการทำงานอัตโนมัติ (autorun stubs)
นอกจากนี้ยังมีการจับคู่ด้วย reg delete เส้นทางภายใน src/index.jsซึ่งบ่งชี้ว่าอุปกรณ์ฝังในร่างกายได้รับการออกแบบมาให้สามารถถอดออกได้อย่างสะอาดหมดจดตามคำสั่งของผู้ใช้งาน
ประการที่สาม มันจะสร้างกระบวนการลูกที่ไม่เกี่ยวข้องขึ้นมา:
spawn(node, [path.join(INSTALL_DIR, 'src/index.js')], { detached: true, env: { ...process.env, SERVER_URL } })มีสองรายละเอียดที่สำคัญในที่นี้
SERVER_URL ค่านี้ถูกอ่านจากสภาพแวดล้อม ส่งผลให้เอนด์พอยต์ C2 สามารถกำหนดค่าได้ตามการใช้งานแต่ละครั้ง และไม่ได้ถูกรวมไว้ในแพ็กเกจ การตัดสินใจเล็กๆ แต่ตั้งใจนี้ช่วยเอาชนะการตรวจสอบ IOC แบบคงที่ส่วนใหญ่ได้
นอกจากนี้ ลูกที่ถูกสร้างขึ้นมาจะได้รับสภาพแวดล้อมของแม่มาอย่างสมบูรณ์ ดังนั้น ลูกใดๆ ก็ตาม NPM_TOKEN, AWS_*, GITHUB_TOKENหรือซ็อกเก็ต SSH-agent ที่มีอยู่ในเชลล์สำหรับนักพัฒนาซอฟต์แวร์ในระหว่างการติดตั้ง จะส่งต่อไปยังหน่วยความจำของเอเจนต์ที่มีอายุการใช้งานยาวนาน
สิ่งที่ตัวแทนจัดส่งให้
มัดรวม src/ โครงสร้างต้นไม้นี้ประกอบด้วยโมดูลสามส่วน ซึ่งชื่อของโมดูลเหล่านั้นก็บอกเล่าเรื่องราวได้เป็นอย่างดี: audioCapture.js, browserHistory.jsและ systemInfo.js.
รายการการพึ่งพาของรันไทม์ ซึ่งได้รับการแก้ไขในระหว่างขั้นตอนการเตรียมการ npm installเป็นการยืนยันข้อเท็จจริงเหล่านั้น
วิธีการนี้จะเปลี่ยนเหตุการณ์วุ่นวายให้กลายเป็นการตอบสนองที่ควบคุมได้
แทนที่จะตอบสนองอย่างไม่รู้เรื่อง ทีมงานจะดำเนินการโดยใช้หลักการที่วางไว้ การจัดลำดับความสำคัญที่ชัดเจนและการแก้ไขปัญหาอย่างรวดเร็ว.
| การอยู่ที่ | มันใช้เพื่ออะไรในบริบทนี้ |
|---|---|
| ภาพหน้าจอเดสก์ท็อป | การบันทึกภาพหน้าจอเป็นระยะ |
| @nut-tree-fork/nut-js | การทำงานอัตโนมัติของเมาส์และคีย์บอร์ด / การจำลองการป้อนข้อมูล |
| ดีกว่า sqlite3 | การอ่านข้อมูลจากฐานข้อมูล SQLite ของ Chrome, Edge และ Firefox โดยตรง |
| แอดเอ็ม-ซิป | รวบรวมและมัดรวมโบราณวัตถุที่เก็บรวบรวมได้ก่อนนำออก |
| คม | การปรับขนาด/บีบอัดภาพหน้าจอและสิ่งผิดปกติในภาพ |
| ซ็อกเก็ต.io-ไคลเอ็นต์ | ช่อง C2 แบบสองทิศทางที่คงอยู่ |
| รหัสเครื่องโหนด | ลายนิ้วมือที่เสถียรต่อโฮสต์สำหรับการติดตามเหยื่อ |
systemInfo.js โทร os.networkInterfaces() เพื่อทำการตรวจสอบลายนิ้วมือเพิ่มเติมก่อนถึงสัญญาณบีคอนแรก
เหตุใดการบันทึกเสียงจึงเป็นสัญญาณที่โดดเด่น
RAT ของ npm ส่วนใหญ่ที่เราตรวจสอบใน MEW จะหยุดอยู่ที่การขโมยข้อมูลลับระหว่างการติดตั้ง พวกมันอ่าน... ~/.npmrcอ่าน ~/.aws/credentialsขูด process.envส่งคำขอ POST ไปยัง webhook แล้วออกจากระบบ นี่คือรูปแบบเศรษฐกิจแบบฉวยโอกาส ข้อมูลประจำตัวมีอายุการใช้งานสั้น และผู้โจมตีจำเป็นต้องสร้างรายได้ให้เร็วที่สุด
node-env-resolve มีรูปร่างแตกต่างกัน
ระบบได้รับการตั้งค่าให้ทำงานได้ต่อเนื่องแม้หลังจากการรีบูต โดยเอเจนต์จะทำงานแบบแยกอิสระและมีอายุการใช้งานยาวนาน wscript.exeชุดอุปกรณ์ที่บรรจุอยู่ภายในนั้นมีไว้สำหรับใช้งานบนเครื่องของนักพัฒนา ไม่ใช่สำหรับการหยิบไปใช้แล้วก็ทิ้งไป ประกอบด้วย เครื่องบันทึกเสียงไมโครโฟน ไดรเวอร์คีย์บอร์ด/เมาส์ การบันทึกประวัติการใช้งานเบราว์เซอร์อย่างครบถ้วน การจับภาพหน้าจอ และช่องทาง Socket.IO แบบโต้ตอบไปยัง C2 ที่สามารถกำหนดค่าได้
การดักฟังไมโครโฟนเป็นสิ่งที่แคมเปญนี้ทำเป็นพิเศษ ซึ่งมัลแวร์ npm ส่วนใหญ่ไม่ได้ทำ
ปัจจุบัน เวิร์กสเตชันของนักพัฒนาซอฟต์แวร์ กลายเป็นเวิร์กสเตชันที่ใช้สำหรับการประชุมประจำวัน การสนทนากับลูกค้า การพูดคุยเกี่ยวกับการออกแบบ และการรับสายฉุกเฉินมากขึ้นเรื่อยๆ อุปกรณ์บันทึกเสียงที่ติดตั้งไว้ไม่ได้มุ่งเป้าไปที่โทเค็น npm ของนักพัฒนาซอฟต์แวร์โดยตรง แต่ต้องการฟังสิ่งที่นักพัฒนาซอฟต์แวร์พูดต่อหน้าแล็ปท็อปต่างหาก
ชุดความสามารถดังกล่าว บวกกับการขาดการปกปิดข้อมูล และการไม่มีการขโมยข้อมูลอย่างฉูดฉาดในระหว่างการติดตั้ง บ่งชี้ว่าเป็นการเตรียมการไว้ล่วงหน้าเพื่อการเข้าถึงเป้าหมาย มากกว่าการขโมยข้อมูลประจำตัวโดยฉวยโอกาส
เราไม่ได้ยืนยันที่มาที่ไปจากข้อมูลนี้เพียงอย่างเดียว เราเพียงแต่สังเกตลักษณะการดำเนินงานเท่านั้น

จังหวะการทำซ้ำแปดวันบน node-env-resolve เป็นรายละเอียดที่สำคัญที่สุดในเชิงปฏิบัติในลำดับเหตุการณ์
นี่ไม่ใช่การปล่อยไฟล์แล้วลืมไปเลย ผู้เผยแพร่กำลังดูแลรักษาตัวปล่อยไฟล์อย่างต่อเนื่อง ซึ่งโดยปกติแล้วหมายความว่าอย่างใดอย่างหนึ่งในสองอย่าง คือ พวกเขากำลังปรับแต่งมันกับสภาพแวดล้อมทดสอบก่อนที่จะนำไปใช้งานในวงกว้าง หรือพวกเขามีข้อมูลการติดตั้งกลับมาแล้วและกำลังตอบสนองต่อข้อมูลเหล่านั้น
แพ็กเกจอีกห้าแพ็กเกจที่เหลือแทบไม่มีการเปลี่ยนแปลงใดๆ หลังจากการเผยแพร่ครั้งแรก ซึ่งสอดคล้องกับรูปแบบ "ทดสอบครั้งเดียว ตั้งชื่อไว้" สำหรับคลัสเตอร์สนับสนุน ในขณะที่ความพยายามด้านวิศวกรรมจะมุ่งเน้นไปที่แพ็กเกจที่ทำหน้าที่หลัก
ที่มาของข้อมูล: เบาะแสเล็กน้อย ยังไม่มีข้อสรุปที่แน่ชัด
สาธารณะ OSINT สัญญาณนั้นบางเบา และเราจะไม่ยืดมันออกไป สิ่งที่สังเกตได้คือ:
บัญชี Gmail tanvisoul9 คล้ายคลึงกับชื่อที่ใช้กันในเอเชียใต้บางส่วน คือ “ทันวี” นี่เป็นสัญญาณที่อ่อนแอ ชื่อผู้ใช้ Gmail ไม่ใช่ตัวตน และส่วนท้ายนั้น soul9 เป็นข้อมูลทั่วไป ไม่ปลอดภัยที่จะอนุมานภูมิศาสตร์จากส่วน "ท้องถิ่น" ในอีเมลเพียงอย่างเดียว
รูปแบบการเขียนโค้ดของ Node.js นั้นธรรมดา ไม่โดดเด่นอะไรเป็นพิเศษ: standard การเรียกใช้ไลบรารี เช่น os, child_process, spawnและ reg addไม่มีการปกปิดข้อมูล ไม่มีกระบวนการหมุนสตริง และไม่มีตรรกะป้องกันการดีบัก ผู้เขียนคุ้นเคยกับฟังก์ชันพื้นฐานของรีจิสทรีของ Windows และการจัดการกระบวนการลูกที่แยกออกมา แต่ดูเหมือนว่าจะไม่ได้พยายามใช้กลวิธีที่ซับซ้อนกว่านี้ที่พวกเขาอาจใช้ได้
ส่วนประกอบที่จำเป็นทั้งหมดเป็นส่วนประกอบสำเร็จรูปที่รู้จักกันดี: screenshot-desktop, nut-js, better-sqlite3และ socket.io-clientไม่มีโปรโตคอลที่กำหนดเอง ไม่มีสแต็ก C2 ที่สร้างขึ้นใหม่ทั้งหมด และไม่มีเทคนิคการคงอยู่ของข้อมูลแบบใหม่ๆ นอกเหนือจากตำราเรียน คีย์เรียกใช้ HKCUนี่คือผู้เชี่ยวชาญด้านการบูรณาการ ไม่ใช่ผู้สร้างเครื่องมือ
เราไม่พบข้อความที่ไม่ใช่ภาษาอังกฤษ ข้อความแสดงความคิดเห็นที่ฝังอยู่ ข้อมูลภาษาท้องถิ่น หรือข้อมูลระบุเขตเวลาจากเอาต์พุตของคอมไพเลอร์ภายในไฟล์ที่เผยแพร่
เราตรวจสอบความซ้ำซ้อนของโค้ดกับแคมเปญก่อนหน้าที่เราติดตามอยู่แล้ว ซึ่งรวมถึง ไช-ฮูลุด, อาวลิเวียนBuildkite และ heibai ล่าสุด / claude-code-best เราไม่พบกลุ่มโคลนของ Anthropic-CLI เลย: ไม่มีรูปแบบ C2 ที่ใช้ร่วมกัน ไม่มีโครงสร้างไฟล์ที่ใช้ร่วมกัน และไม่มีสำนวนการใช้งานที่ใช้ร่วมกัน
สิ่งที่เราจะไม่พูดคือ: นี่เป็นการกระทำของรัฐ กลุ่มที่เป็นที่รู้จัก หรือมีความเชื่อมโยงทางภูมิศาสตร์กับประเทศใดประเทศหนึ่งโดยเฉพาะ
ลักษณะการดำเนินงานสอดคล้องกับทีมงานขนาดเล็กที่มีทักษะปานกลางซึ่งทำหน้าที่เฝ้าระวังเวิร์กสเตชันของนักพัฒนาซอฟต์แวร์ แรงจูงใจหลักน่าจะเป็นด้านการเงินจากการใช้งานสิทธิ์การเข้าถึงในอนาคต แต่ก็อาจเป็นการให้บริการสอดแนมสำหรับผู้ซื้อรายอื่นด้วยเช่นกัน
มีประเด็นทางอ้อมสองประเด็นที่สนับสนุนข้อความนั้น ได้แก่ การหลีกเลี่ยงกลไกการดึงข้อมูลที่ดึงดูดความสนใจซึ่งจะทำให้คลัสเตอร์ล่มเร็ว เช่น บอท Telegram oastify.comหรือ canarytokens และชื่อแพ็กเกจที่จงใจทำให้ดูเรียบง่าย ซึ่งเอื้อต่อการติดตั้งแบบเงียบๆ ในระยะยาว มากกว่าการติดตั้งในปริมาณมากในช่วงสั้นๆ
ตัวบ่งชี้การถูกบุกรุกและการตรวจจับ
| แพ็กเกจและผู้เผยแพร่ | |
|---|---|
| สนาม | ความคุ้มค่า |
| npm publisher | user0001 |
| อีเมลผู้จัดพิมพ์ | tanvisoul9@gmail.com, ยังไม่ได้รับการยืนยัน |
| แบบรวดเร็ว | centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve |
| ยืนยันแล้วว่าเป็นอันตราย | node-env-resolve@1.0.7, node-env-resolve@1.0.8 |
| วัตถุโฮสต์ | |
|---|---|
| ประเภท | ความคุ้มค่า |
| คีย์ความคงทน | HKCU\Software\Microsoft\Windows\CurrentVersion\Run |
| ค่าความคงทน | ชื่อตัวแปร; ข้อมูลในรูปแบบ wscript.exe " \\ .vbs" |
| ติดตั้งตะขอ | postinstall: เพิ่มไฟล์ node postinstall.js ในไฟล์ manifest ของแพ็กเกจ |
| โมดูลฝัง | src/audioCapture.js, src/browserHistory.js, src/systemInfo.js |
| ไดเร็กทอรีจัดเตรียม | INSTALL_DIR ถูกระบุตำแหน่งอยู่นอกโฟลเดอร์ node_modules ของโปรเจ็กต์ โดยตำแหน่งนี้ถูกกำหนดโดย postinstall.js ในระหว่างการติดตั้ง |
| เครือข่าย | |
|---|---|
| ประเภท | ความคุ้มค่า |
| การขนส่ง C2 | socket.io-client ช่องทางการสื่อสารแบบสองทิศทางถาวร |
| จุดสิ้นสุด C2 | ระบุให้ตัวแทนผ่านตัวแปรสภาพแวดล้อม SERVER_URL ไม่ได้เขียนไว้ในไฟล์ที่เผยแพร่โดยตรง |
หมายเหตุการตรวจจับ
มีกฎสองข้อที่สามารถตรวจจับครอบครัวนี้ได้โดยไม่ต้องใช้จุดสิ้นสุด C2
ขั้นแรก ให้ทำเครื่องหมายสคริปต์หลังการติดตั้งที่ดำเนินการภายใน npm install ไปยังพาธที่อยู่นอกไดเร็กทอรีของแพ็กเกจนั้นเอง โปรแกรมดาวน์โหลดพรีบิลด์ที่ถูกต้องตามกฎหมายใดๆ เช่น node-gyp สร้างใหม่หรือดาวน์โหลดไบนารีที่สร้างไว้ล่วงหน้า เขียนลงในแพ็กเกจหรือลงในแพลตฟอร์มstandard แคชพาธที่มีแฮชที่ได้รับการตรวจสอบแล้ว จะไม่เขียนลงในแคชที่สร้างขึ้นใหม่ INSTALL_DIR อยู่ที่อื่นบนดิสก์
ประการที่สอง ให้ทำเครื่องหมายสคริปต์หลังการติดตั้งที่ออกคำสั่ง reg add HKCU\…\Run สีสดสวย wscript.exe ในฐานะตัวเรียกใช้งาน นี่ไม่ใช่ไฟล์ที่ถูกต้องจากแพ็กเกจ npm อย่างแน่นอน ควรแจ้งและกักกันไว้
หลักการวิเคราะห์เชิงอนุมานข้อที่สามมีประโยชน์สำหรับการระบุแพ็กเกจพี่น้องถัดไปก่อนที่จะได้รับการยืนยัน: ผู้เผยแพร่ npm รายใหม่ที่ยังไม่มีข้อมูล SCM การตรวจสอบยืนยัน อีเมล Gmail ไม่มี repository การเผยแพร่ชื่อแพ็กเกจสั้นๆ ทั่วไปที่ฟังดูเหมือนชื่อแพ็กเกจสำหรับโครงสร้างพื้นฐานจำนวนมากภายในเวลาไม่กี่วันนั้น ถือเป็นเหตุผลเพียงพอที่จะต้องตรวจสอบด้วยตนเองแล้ว
ได้รายงานไปยัง npm registry แล้ว เราจะอัปเดตโพสต์นี้เมื่อบัญชีผู้เผยแพร่ถูกลบออก






