Supply Chain Attack: เกิดขึ้นได้อย่างไร และแฮกเกอร์ทำอะไรต่อ?

เรียบเรียงโดย จิรมิตร สนทนา, MCT

Supply Chain Attack: How It Happens and What Comes Next

Supply Chain Attack คืออะไร?


ลองนึกภาพว่าคุณสั่งอาหารจากร้านที่ ไว้ใจได้ ร้านนั้นปลอดภัยดี แต่มีคนแอบวางยาพิษไว้ที่ วัตถุดิบของซัพพลายเออร์ คุณป่วยทั้งที่ ไว้ใจ ร้านนั้นเต็มที่

Supply chain attack ในโลกซอฟต์แวร์ก็ทำงานแบบเดียวกัน — ผู้โจมตีไม่ได้แฮกแอปของคุณโดยตรง แต่ วางยาพิษใส่ package ที่แอปคุณพึ่งพาอยู่

Trivy Incident (March 2026)

Trivy คือเครื่องมือสแกนช่องโหว่แบบ open-source ของ Aqua Security ใช้กันอย่างแพร่หลายใน CI/CD pipeline เพื่อสแกน container image และ filesystem หา CVE ที่รู้จัก

เกิดอะไรขึ้น

วันที่ 19 มีนาคม 2026 ผู้ไม่หวังดีเจาะเข้า CI/CD pipeline ของ Aqua Security ได้สำเร็จ พวกเขาขโมย credentials ที่ใช้งานได้จริงออกมา แล้วนำไปใช้ push Docker image ที่ฝัง backdoor ไว้เข้าไปใน repository ของจริงอย่าง aquasec/trivy บน Docker Hub — แหล่งเดียวกับที่นักพัฒนาทั่วโลกหลายล้านคน pull Trivy มาใช้ทุกวัน

จากนั้นวันที่ 22 มีนาคม 2026 ก็มีการ push image อันตรายชุดที่สองตามมาอีก

ทีมไหนที่รันคำสั่ง:

docker pull aquasec/trivy

ในช่วงเวลาดังกล่าว ก็ได้รับ image ที่เป็นอันตรายไปโดยไม่มีการเตือนใดๆ ทั้งสิ้น

แฮกเกอร์ทำอะไรต่อ

Image ของ Trivy ที่ถูกฝัง backdoor ไว้นั้นบรรจุ infostealer — มัลแวร์ที่ออกแบบมาเพื่อเก็บรวบรวมและขโมยข้อมูลสำคัญออกจากสภาพแวดล้อมที่ Trivy ทำงานอยู่อย่างเงียบๆ

เนื่องจาก Trivy เป็นเครื่องมือด้านความปลอดภัยที่รันอยู่ใน CI/CD pipeline มันจึงมักมีสิทธิ์เข้าถึงส่วนที่ละเอียดอ่อนที่สุดของระบบ มัลแวร์มุ่งเป้าไปที่:

      • CI/CD secrets — pipeline token, deploy key, service account credentials
      • Cloud credentials — AWS, GCP, Azure access key ที่เก็บเป็น environment variable
      • SSH keys — private key ที่มีอยู่ใน runner environment
      • Docker configurations — ~/.docker/config.json ที่บรรจุ credentials ของ registry

สาเหตุที่การโจมตีครั้งนี้ได้ผลดีมาก:

      1. ทีมด้านความปลอดภัย ไว้ใจ เครื่องมือด้านความปลอดภัยของตัวเองอย่างไม่มีข้อสงสัย
      2. Trivy มีสิทธิ์เข้าถึงทุกอย่างเพื่อสแกน — ทำให้มัลแวร์มี attack surface กว้างมาก
      3. Image มาจาก repository aquasec/trivy บน Docker Hub ของจริง ไม่ใช่ของปลอม
      4. ไม่ต้องแก้ไข code ใดๆ ในฝั่งเหยื่อเลย — แค่ docker pull ก็โดนแล้ว

เมื่อได้ credentials ไปแล้ว ผู้โจมตีสามารถเข้าถึง cloud infrastructure, push code อันตรายเข้า registry, หรือเจาะเข้าเครือข่ายภายในโดยใช้ SSH key ที่ขโมยมา

axios Incident (March 2026)

axios คือ HTTP client ที่ได้รับความนิยมสูงสุดบน npm — มียอดดาวน์โหลดกว่า 100 ล้านครั้งต่อสัปดาห์ สำหรับ version 1.x วันที่ 31 มีนาคม 2026 axios กลายเป็นเป้าหมายของการโจมตี supply chain โดยผู้อยู่เบื้องหลังคือ UNC1069 กลุ่มแฮกเกอร์ที่มีความเชื่อมโยงกับเกาหลีเหนือ ที่ปฏิบัติการมาตั้งแต่ปี 2018 เป็นอย่างน้อย

เกิดอะไรขึ้น

UNC1069 บัญชี maintainer ของ axios บน npm ได้สำเร็จ โดยเปลี่ยน email ที่ผูกกับบัญชีเป็นที่อยู่ที่ตัวเองควบคุม ([email protected]) จากนั้นใช้บัญชีนั้น publish version ที่ฝัง backdoor ออกมาสองตัว:

ช่วงเวลาของการโจมตีสั้นมาก: 31 มีนาคม 2026 เวลา 00:21 ถึง 03:20 UTC รวมแล้วไม่ถึงสามชั่วโมง

ทั้งสอง version ได้เพิ่ม dependency ใหม่ — package อันตรายชื่อ plain-crypto-js — เข้าไปใน package.json โดยตรง:

{
  "name": "axios",
  "version": "1.14.1",
  "dependencies": {
    "plain-crypto-js": "4.2.1"
  }
}

นักพัฒนาหรือ CI/CD pipeline ใดก็ตามที่รัน npm install หรือ npm update ในช่วงเวลานั้น จะดึง plain-crypto-js มาติดตั้งโดยอัตโนมัติในฐานะ transitive dependency — โดยที่ตัวเองไม่ต้องทำอะไรเพิ่มเติมเลย

แฮกเกอร์ทำอะไรต่อ

plain-crypto-js คือ obfuscated dropper — โปรแกรมที่ถูก obfuscate ไว้อย่างหนักเพื่อทำหน้าที่ปล่อยมัลแวร์ ซึ่งใช้ postinstall hook ใน package.json ของตัวเองเพื่อรันโดยอัตโนมัติทันทีที่ npm ติดตั้งเสร็จ:

"scripts": {
  "postinstall": "node setup.js"
}

setup.js เป็นไฟล์ JavaScript ที่ถูก obfuscate ไว้ เมื่อถอดรหัสแล้วพบว่าทำงานสองขั้นตอน:

      1. ระบบปฏิบัติการที่มีผลกระทบ — Windows, macOS หรือ Linux
      2. ติดตั้ง WAVESHAPER.V2 — Remote Access Trojan (RAT) ข้ามแพลตฟอร์มที่สร้างโดย UNC1069
npm install axios  (หรือ npm update)
        ↓
plain-crypto-js postinstall ทำงานอัตโนมัติ
        ↓
setup.js รัน obfuscated dropper
        ↓
WAVESHAPER.V2 RAT ถูกติดตั้งลงเครื่อง
        ↓
ผู้โจมตีมีสิทธิ์เข้าถึงเครื่องจากระยะไกลอย่างถาวร

WAVESHAPER.V2 ให้ผู้โจมตีสามารถควบคุมเครื่องที่ติดเชื้อได้อย่างสมบูรณ์:

      • รันคำสั่งใดๆ ก็ได้ตามต้องการ
      • ขโมยไฟล์, credentials และ secrets ออกไป
      • ฝังตัวให้ยังคงอยู่แม้ reboot เครื่อง
      • ทำงานได้บนทั้ง Windows, macOS และ Linux จาก payload ตัวเดียว

เนื่องจาก axios เป็น dependency ของ package ยอดนิยมอีกหลายร้อยตัว ผลกระทบจึงขยายไปไกลเกินกว่าแค่ผู้ใช้ axios โดยตรง — ทุกโปรเจกต์ที่ใช้ library ที่อ้างอิง axios ก็มีความเสี่ยงเช่นกัน

ทำไมถึงได้ผล

      • การโจมตีมาจาก บัญชี npm ของ axios จริงๆ — ไม่มี typosquatting ไม่มีชื่อ package ปลอม
      • version อันตรายอยู่บน npm แค่ ไม่ถึงสามชั่วโมง ทำให้ window การตรวจจับแคบมาก
      • postinstall hook ทำงานโดยไม่ถามผู้ใช้เลย — npm เชื่อถือมันโดย default
      • dropper ถูก obfuscate ไว้อย่างหนัก ทำให้เครื่องมือวิเคราะห์แบบ static ส่วนใหญ่ตรวจไม่เจอ
      • axios มี dependency footprint มหาศาล ทำให้มีการติดตั้งทางอ้อมหลายล้านครั้ง

ทำไมการโจมตีเหล่านี้ถึงอันตราย

ทั้งสองเหตุการณ์มีรูปแบบเดียวกัน:

ขั้นตอนTrivy (Docker Hub)axios / plain-crypto-js (npm)
1. เจาะเข้าระบบขโมย CI/CD credentials แล้ว push image อันตรายเข้า repo จริงเจาะบัญชี maintainer แล้ว publish axios version ปลอม
2. รอเหยื่อนักพัฒนา pull image ตามปกตินักพัฒนารัน npm install หรือ npm update
3. รันโค้ดinfostealer ทำงานภายในเครื่องมือด้านความปลอดภัยที่ไว้ใจpostinstall hook ติดตั้ง WAVESHAPER.V2 RAT อย่างเงียบๆ
4. เก็บข้อมูลCI/CD secrets, cloud key, SSH key, Docker configไฟล์, credentials, secrets และข้อมูลระบบจากเครื่องที่ติดเชื้อ
5. ขยายการโจมตีเข้าถึง cloud, push ไปยัง registry, เจาะเครือข่ายภายในเข้าถึงเครื่องจากระยะไกลอย่างสมบูรณ์ — รันคำสั่งใดก็ได้, เจาะเครือข่ายต่อ, ฝัง backdoor ถาวร

แอปของเหยื่อยังทำงานได้ปกติสมบูรณ์ ไม่มี error ไม่มีคำเตือน การโจมตีอาจไม่ถูกตรวจพบนานหลายสัปดาห์หรือหลายเดือน

วิธีการป้องกัน

    • Pin image digests, not just tags — docker pull aquasec/trivy@sha256:abc123... is immutable; a tag like latest can be silently replaced
    • Verify image signatures — use Docker Content Trust or Sigstore/cosign to verify that an image was signed by the real publisher
    • Check version history — if a package version doesn’t appear in the official release history on npmjs.com, it’s fake
    • Run npm audit after installing new packages
    • Review package-lock.json changes in every pull request — a new transitive dependency version is worth investigating
    • Rotate all credentials immediately if you pulled a compromised image — assume everything in the pipeline environment was exfiltrated

Sonatype Nexus Lifecycle

Sonatype Nexus Lifecycle คือแพลตฟอร์ม Software Composition Analysis (SCA) ที่บังคับใช้นโยบายความปลอดภัย open source ตลอดวงจรการพัฒนาซอฟต์แวร์ — ตั้งแต่ IDE ของนักพัฒนาไปจนถึง production

แตกต่างจาก npm audit ที่ตรวจเฉพาะ CVE ที่รู้จัก Nexus Lifecycle ทำได้มากกว่านั้น:

ความสามารถสิ่งที่ตรวจจับได้
Component intelligenceตรวจจับ package ที่น่าสงสัย เช่น ไม่มีประวัติ release หรือ metadata ผิดปกติ
Policy enforcementบล็อก component ที่ไม่ได้รับอนุมัติ — สามารถตั้งนโยบายให้ปฏิเสธ axios version ใหม่ที่ไม่อยู่ใน allowlist
Transitive dependency scanningสแกน dependency tree ทั้งหมด ไม่ใช่แค่ direct dependency — จะตรวจพบ plain-crypto-js ในฐานะ component ที่ยังไม่ผ่านการประเมิน
Quarantineกักกัน version ใหม่ของ component โดยอัตโนมัติจนกว่าจะผ่านการตรวจสอบด้านความปลอดภัย
CI/CD integrationหยุด pipeline build ทันทีเมื่อตรวจพบ component ที่ละเมิดนโยบาย

ในกรณี axios attack Nexus Lifecycle จะบล็อก [email protected] และ [email protected] และกักกันโดยอัตโนมัติก่อนที่จะเข้าสู่ pipeline

สนใจ Sonatype Nexus Lifecycle?

หากองค์กรของคุณต้องการเสริมความแข็งแกร่งด้าน software supply chain security ด้วย Sonatype Nexus Lifecycle ทีมงาน MCT พร้อมให้ความช่วยเหลือ — ตั้งแต่การจัดหา License, การ Implementation ไปจนถึงการฝึกอบรมและ Support

ติดต่อ MCT:

แหล่งอ้างอิง