สร้างอัตโนมัติเมื่อ 2026-10-03T01:52:40Z
รายงานผลการตรวจสอบช่องโหว่ (Vulnerability Scan)
อ้างอิง TOR: ข้อ 4.8.1 (Vulnerability Scan + รายงาน + ไม่มี High/Critical), ข้อ 7.2.6 (เอกสารส่งมอบงวดที่ 2), ข้อ ก.2.2.2 (ไม่มี High/Critical ก่อนใช้งานจริง)
รายงานนี้สร้างโดย scripts/security/npm-audit-report.ts (npm run report:security) จากผลจริงของ npm audit --json ซึ่งเทียบ dependency ทั้งหมดใน package-lock.json กับฐานข้อมูล GitHub Advisory — สคริปต์ ไม่ แก้ไข dependency ใด ๆ (ไม่รัน npm audit fix)
1. สรุปผล
| รายการ | ค่า |
|---|---|
| ผลตาม TOR 4.8.1 / ก.2.2.2 | ไม่ผ่าน — มี High/Critical คงค้าง 9 รายการ: @next/eslint-plugin-next (high), @prisma/config (high), braces (high), deepmerge-ts (high), eslint-config-next (high), fast-glob (high), micromatch (high), postcss (high), prisma (high) |
| วันที่สแกน | 2026-10-03T01:52:40Z |
| เครื่องมือ | npm audit (npm 11.17.0, Node v24.19.0) |
| จำนวน dependency ที่ตรวจ | ทั้งหมด 841 (prod 293, dev 488, optional 164, peer 31) |
| จำนวน package ที่มีช่องโหว่ | 10 |
| High/Critical คงค้าง | 9 |
2. จำนวนตามระดับความรุนแรง
| ระดับ | ทั้งหมด | Production (--omit=dev) | เฉพาะ dev |
|---|---|---|---|
| critical | 0 | 0 | 0 |
| high | 9 | 4 | 5 |
| moderate | 1 | 1 | 0 |
| low | 0 | 0 | 0 |
| info | 0 | 0 | 0 |
| รวม | 10 | 5 | 5 |
หมายเหตุ: นับเป็นจำนวน package ที่ได้รับผลกระทบ (รูปแบบเดียวกับ npm audit) — package หนึ่งอาจมีหลาย advisory และ advisory เดียวอาจทำให้ package ที่พึ่งพามันถูกนับด้วย คอลัมน์ Production คือ package ที่ยังปรากฏเมื่อสแกนแบบ npm audit --omit=dev
3. รายการ Advisory
| Package | ระดับ | ขอบเขต | Direct | Advisory | ช่วงเวอร์ชันที่กระทบ | การแก้ไขที่มี |
|---|---|---|---|---|---|---|
@next/eslint-plugin-next | high | dev เท่านั้น | ไม่ (transitive) | รับผลจาก fast-glob | >=14.3.0-canary.0 | ไม่มีแพตช์ในสายเวอร์ชันปัจจุบัน — npm เสนอเพียงการลดเวอร์ชัน eslint-config-next 15.5.27 → 14.2.35 (semver-major) |
@prisma/config | high | production | ไม่ (transitive) | รับผลจาก deepmerge-ts | 6.13.0-dev.1 - 8.1.0-dev.4 | ไม่มีแพตช์ในสายเวอร์ชันปัจจุบัน — npm เสนอเพียงการลดเวอร์ชัน prisma 6.19.3 → 6.12.0 (semver-major) |
braces | high | dev เท่านั้น | ไม่ (transitive) | braces vulnerable to stack-exhaustion denial of service through deeply nested patterns [high] | * | ไม่มีแพตช์ในสายเวอร์ชันปัจจุบัน — npm เสนอเพียงการลดเวอร์ชัน eslint-config-next 15.5.27 → 14.2.35 (semver-major) |
deepmerge-ts | high | production | ไม่ (transitive) | DeepmergeTS has stack exhaustion when merging recursive object graphs [high] | <8.0.0 | ไม่มีแพตช์ในสายเวอร์ชันปัจจุบัน — npm เสนอเพียงการลดเวอร์ชัน prisma 6.19.3 → 6.12.0 (semver-major) |
eslint-config-next | high | dev เท่านั้น | ใช่ | รับผลจาก @next/eslint-plugin-next | >=14.3.0-canary.0 | ไม่มีแพตช์ในสายเวอร์ชันปัจจุบัน — npm เสนอเพียงการลดเวอร์ชัน eslint-config-next 15.5.27 → 14.2.35 (semver-major) |
fast-glob | high | dev เท่านั้น | ไม่ (transitive) | รับผลจาก micromatch | * | ไม่มีแพตช์ในสายเวอร์ชันปัจจุบัน — npm เสนอเพียงการลดเวอร์ชัน eslint-config-next 15.5.27 → 14.2.35 (semver-major) |
micromatch | high | dev เท่านั้น | ไม่ (transitive) | รับผลจาก braces | >=0.2.0 | ไม่มีแพตช์ในสายเวอร์ชันปัจจุบัน — npm เสนอเพียงการลดเวอร์ชัน eslint-config-next 15.5.27 → 14.2.35 (semver-major) |
postcss | high | production | ไม่ (transitive) | (1) PostCSS has XSS via Unescaped </style> in its CSS Stringify Output [moderate] (2) PostCSS: Arbitrary file read and information disclosure via attacker-controlled sourceMappingURL in CSS comments [high] (3) PostCSS: incomplete fix of GHSA-6g55-p6wh-862q — attacker-controlled sourceMappingURL reads arbitrary .map files when from is unset [moderate] (4) PostCSS: Path Traversal in Previous Source Map Auto-Loading (sourceMappingURL) leads to Arbitrary .map File Disclosure [high] | <=8.5.22 | มี แต่เป็น breaking — ต้องเปลี่ยนเป็น next@16.3.8 (จาก 15.5.27) (semver-major) |
prisma | high | production | ใช่ | รับผลจาก @prisma/config | 6.13.0-dev.1 - 8.1.0-dev.4 | ไม่มีแพตช์ในสายเวอร์ชันปัจจุบัน — npm เสนอเพียงการลดเวอร์ชัน prisma 6.19.3 → 6.12.0 (semver-major) |
next | moderate | production | ใช่ | รับผลจาก postcss | 9.3.4-canary.0 - 16.3.0-preview.10 | มี แต่เป็น breaking — ต้องเปลี่ยนเป็น next@16.3.8 (จาก 15.5.27) (semver-major) |
4. แผนการแก้ไข (Remediation Plan)
| ลำดับ | ระดับสูงสุด | Package ที่เกี่ยวข้อง | สิ่งที่ต้องทำ | กำหนดแก้ (SLA) |
|---|---|---|---|---|
| 1 | high | @next/eslint-plugin-next, braces, eslint-config-next, fast-glob, micromatch | npm เสนอเพียงการลดเวอร์ชันเป็น eslint-config-next@14.2.35 ซึ่งไม่ใช่ทางแก้ที่ใช้ได้ — ใช้ overrides ใน package.json ปัก dependency ย่อยที่มีแพตช์แล้ว หรืออัปเกรดเมื่อผู้พัฒนาต้นทางออกเวอร์ชันที่แก้ไข แล้วรันชุดทดสอบ | ภายใน 24 ชม. นับจากบันทึก Defect และต้องปิดก่อนใช้งานจริง (ก.2.2.2) |
| 2 | high | @prisma/config, deepmerge-ts, prisma | npm เสนอเพียงการลดเวอร์ชันเป็น prisma@6.12.0 ซึ่งไม่ใช่ทางแก้ที่ใช้ได้ — ใช้ overrides ใน package.json ปัก dependency ย่อยที่มีแพตช์แล้ว หรืออัปเกรดเมื่อผู้พัฒนาต้นทางออกเวอร์ชันที่แก้ไข แล้วรันชุดทดสอบ | ภายใน 24 ชม. นับจากบันทึก Defect และต้องปิดก่อนใช้งานจริง (ก.2.2.2) |
| 3 | high | postcss, next | เปลี่ยนเวอร์ชันเป็น next@16.3.8 (semver-major — npm audit fix --force) ต้องทดสอบ regression ทั้งระบบก่อนนำขึ้น หรือใช้ overrides ปักเวอร์ชัน dependency ย่อยที่แก้แล้ว | ภายใน 24 ชม. นับจากบันทึก Defect และต้องปิดก่อนใช้งานจริง (ก.2.2.2) |
การจำแนก High/Critical:
- อยู่ใน dependency tree ของ production:
@prisma/config,deepmerge-ts,postcss,prisma - เฉพาะ devDependencies:
@next/eslint-plugin-next,braces,eslint-config-next,fast-glob,micromatch - แก้ได้ด้วย
npm audit fixแบบไม่ breaking: ไม่มี - ต้องเปลี่ยนเวอร์ชันแบบ breaking (semver-major):
postcss→ next@16.3.8 - ไม่มีแพตช์ในสายเวอร์ชันปัจจุบัน (npm เสนอเพียงการลดเวอร์ชัน):
@next/eslint-plugin-next(eslint-config-next@14.2.35),@prisma/config(prisma@6.12.0),braces(eslint-config-next@14.2.35),deepmerge-ts(prisma@6.12.0),eslint-config-next(eslint-config-next@14.2.35),fast-glob(eslint-config-next@14.2.35),micromatch(eslint-config-next@14.2.35),prisma(prisma@6.12.0) - ยังไม่มีแพตช์: ไม่มี
การประเมินการเปิดรับความเสี่ยงเบื้องต้น (บันทึกของทีมพัฒนา — ไม่ได้ลดระดับความรุนแรงที่รายงานข้างต้น และต้องได้รับการยืนยันจากผู้ตรวจ):
@prisma/config: ถูกโหลดโดย Prisma CLI เท่านั้น เพื่ออ่านไฟล์ config ของโครงการเอง (ไม่ใช่ข้อมูลจากผู้ใช้)deepmerge-ts: ถูกเรียกผ่าน@prisma/configของ Prisma CLI เพื่อ merge ไฟล์ config ของโครงการ — ไม่มีการ merge ข้อมูลที่ผู้ใช้ส่งเข้ามาpostcss: สำเนา postcss ที่ติดมากับnextใช้ประมวลผล CSS ของโครงการเองตอน build/dev — ระบบไม่รับ CSS หรือ source map จากผู้ใช้มาประมวลผลprisma: Prisma CLI ใช้ตอน build/deploy (prisma migrate deploy,prisma generate) ไม่อยู่ในเส้นทางรับคำขอของผู้ใช้ — runtime ใช้@prisma/clientซึ่งไม่อยู่ในรายการช่องโหว่นี้next: ถูกนับเพราะพึ่งพา postcss รุ่นที่มีช่องโหว่ (ดูแถว postcss)
5. การบันทึก Defect
มี DefectLog ที่ยังเปิดอยู่จากสคริปต์นี้แล้ว (id 2f21c80f-1ba3-4f0a-9815-dc59c971daf7) จึงไม่สร้างซ้ำ
6. เกณฑ์และข้อจำกัด
- เกณฑ์ผ่าน: ไม่มีช่องโหว่ระดับ High หรือ Critical คงค้าง (TOR 4.8.1, ก.2.2.2) — ระดับ Moderate ลงไปบันทึกไว้ในแผนแก้ไขและแก้ในรอบบำรุงรักษา
- ขอบเขต: ช่องโหว่ที่ทราบของ dependency (Software Composition Analysis) จาก npm registry ณ เวลาที่สแกน — ไม่ครอบคลุมช่องโหว่ในโค้ดของระบบเอง, container image หรือโครงสร้างพื้นฐาน ซึ่งต้องตรวจเพิ่มด้วยการสแกน image/โครงสร้างพื้นฐานของสภาพแวดล้อม production และการทดสอบเจาะระบบตามเอกสาร
pentest-report - ผลเปลี่ยนได้เมื่อมี advisory ใหม่ จึงต้องสแกนซ้ำก่อนส่งมอบแต่ละงวดและก่อนใช้งานจริง
7. วิธีสแกนซ้ำ
npm run report:security # สร้างรายงานนี้ใหม่
npm audit # ดูรายละเอียดบนเทอร์มินัล
npm audit --omit=dev # เฉพาะ dependency ของ production