- React Server Components ถูกพบว่ามีช่องโหว่ การรันโค้ดระยะไกล (RCE) ที่อนุญาตให้รันโค้ดโดยไม่ได้รับการยืนยันตัวตน และต้อง อัปเกรดทันที
- Next.js ก็ได้รับผลกระทบเช่นกัน และจะอ่อนแอหากใช้ App Router; Next.js กำลังติดตามประเด็นนี้ภายใต้ CVE-2025-66478
- สาเหตุรากฐานของช่องโหว่นี้คือ server-side prototype pollution โดยผู้โจมตีสามารถควบคุม prototype ของอ็อบเจกต์ JavaScript เพื่อรันคำสั่งผ่าน
child_process.execSync และ API อื่นๆ
- PoC (Proof of Concept) ที่เผยแพร่สู่สาธารณะแพร่กระจายอย่างรวดเร็ว และ Datadog รายงานว่าจนถึงวันที่ 5 ธันวาคมตรวจพบความพยายามโจมตีจริงจาก มากกว่า 800 IP
- ช่องโหว่นี้ได้รับการประเมิน CVSS 10/10 และรุนแรงเป็นพิเศษบน Next.js 15.x~16.x จึงจำเป็นต้องอัปเดตแพตช์ล่าสุดโดยด่วน
ภาพรวมช่องโหว่หลัก
- เมื่อวันที่ 3 ธันวาคมพบช่องโหว่ที่ทำให้สามารถรันโค้ดได้โดยไม่ต้องยืนยันตัวตนใน React Server Components และได้ขึ้นทะเบียนเป็น CVE-2025-55182
- ช่องโหว่นี้ทำงานฝั่งเซิร์ฟเวอร์ และผู้โจมตีสามารถรันโค้ดจากระยะไกลได้
- Next.js ก็ได้รับผลกระทบเช่นกัน เนื่องจากรวมคอมโพเนนต์ที่มีช่องโหว่นี้อยู่
- Next.js กำลังจัดการแยกเป็น CVE-2025-66478 แต่ NVD ได้ปฏิเสธ CVE นี้อย่างเป็นทางการ
- CVSS ได้รับค่าประเมิน 10/10 โดย Datadog ระบุว่า การโจมตีนี้ทำได้ง่ายมาก และสามารถจำลองได้ในแอป Next.js ที่สร้างจากเทมเพลตเริ่มต้น
- ตามข้อมูลถึงวันที่ 5 ธันวาคม มีการสังเกตการโจมตีจริงที่ใช้ payload ที่มุ่งโจมตี
เวอร์ชันที่ได้รับผลกระทบและวิธีลดความเสี่ยง
- ไลบรารี React ที่มีปัญหา:
react-server-dom-parcel, react-server-dom-webpack, react-server-dom-turbopack
- เวอร์ชันที่มีช่องโหว่: 19.0~19.2.0 / เวอร์ชันที่มีแพตช์: 19.0.1, 19.1.2, 19.2.1
- เวอร์ชัน Next.js ที่ได้รับผลกระทบ
- มีช่องโหว่: 15.x, 16.x, หลังจาก 14.3.0-canary.77 เป็นต้นไป
- แพตช์: 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7
- สามารถตรวจสอบว่ามีช่องโหว่หรือไม่ด้วยคำสั่ง
npm audit
- แนวทางแก้ไขคือ อัปเกรดเป็นเวอร์ชันที่มีแพตช์
วิเคราะห์ช่องโหว่และ PoC
- วันที่ 3 ธันวาคมมีการคอมมิตโค้ดแพตช์ในรีโพซิทอรีของ React
- การแก้ไขเปลี่ยนเป็นการตรวจสอบการมีอยู่ของคุณสมบัติในอ็อบเจกต์ภายในฟังก์ชัน
requireModule
- ช่องโหว่นี้เป็นประเภท server-side prototype pollution โดยการปนเปื้อน prototype ของอ็อบเจกต์เพื่อเปิดโอกาสให้รันโค้ดอิสระได้
- PoC ที่เผยแพร่:
- PoC ตัวแรก (
ejpir/CVE-2025-55182-poc) อยู่ในสถานะใช้งานไม่ได้
- PoC ตัวที่สอง (
msanft/CVE-2025-55182) ทำงานได้แม้ในแอป Next.js มาตรฐาน
- ในวันที่ 5 ธันวาคม ผู้รายงานดั้งเดิม Lachlan Davidson ได้เผยแพร่ PoC อย่างเป็นทางการ 3 รูปแบบ
การโจมตีจริงที่เกิดขึ้น
- Datadog ตรวจพบกิจกรรมสแกนตั้งแต่เวลา 22:00 (UTC) ของวันที่ 3 ธันวาคม
- ตามข้อมูลถึงวันที่ 5 ธันวาคมตรวจพบการสแกนและความพยายามโจมตีจาก มากกว่า 800 IP
- องค์กรอย่างน้อย 2 องค์กรถูกโจมตี และสังเกตเห็นกิจกรรมต่อเนื่องตั้งแต่วันที่ 4 ธันวาคมเป็นต้นมา
- ลำดับขั้นตอนการโจมตี:
- ช่วงแรกเริ่มจากการสแกนโดยใช้ PoC ที่ใช้งานไม่ได้
- ต่อมามีการสลับไปใช้ PoC ของ Moritz Sanft และในที่สุดคือ PoC ของ Davidson ตามลำดับ
- payload ที่ตรวจพบ:
- การอ่าน
/etc/passwd การรัน whoami และการดาวน์โหลดสคริปต์ระยะไกลผ่าน curl·wget ฯลฯ
- บางตัวอย่างมีฟังก์ชันขโมยตัวแปรสภาพแวดล้อม (
.env) และการรวบรวมข้อมูลระบบด้วย
แนวคิด server-side prototype pollution
- เป็นประเภท CWE-1321 ที่เกิดขึ้นเมื่อการควบคุมคุณสมบัติ prototype ของอ็อบเจกต์ทำได้ไม่ถูกต้อง
- โดยทั่วไปมักถูกใช้ทำงานในฝั่ง frontend ผ่าน XSS แต่ในฝั่งเซิร์ฟเวอร์อาจนำไปสู่ RCE หรือการอ่านไฟล์
- ในโค้ดตัวอย่าง การปนเปื้อนผ่าน
__proto__ ทำให้ Object.prototype ถูกแก้ไข และอ็อบเจกต์ทุกตัวที่สร้างภายหลังจะได้รับผลกระทบ
- ส่งผลให้เมื่อมีการเรียก
spawnSync('sh') คำสั่งที่เป็นอันตรายถูกส่งผ่าน input แล้วรันการทำงาน
การตรวจจับและป้องกันของ Datadog
- Datadog Code Security ตรวจจับไลบรารีที่มีช่องโหว่ได้จาก GitHub หรือ runtime
- มีฟังก์ชันค้นหาที่เกี่ยวข้องกับ CVE-2025-55182 หรือ CVE-2025-66478
- Datadog App and API Protection (AAP) สามารถปิดกั้นการโจมตีได้ระหว่าง runtime
- Datadog Workload Protection ให้ กฎแบบกำหนดเอง เพื่อตรวจจับการรันคำสั่งเช่น
wget, curl, bash ใน Node process
แหล่งอ้างอิง
- ข้อแนะนำทางการ: React, Next.js
- การตอบสนองของผู้ให้บริการคลาวด์: AWS, Vercel, Google Cloud, Akamai, Cloudflare
- การวิเคราะห์จากบริษัทความปลอดภัย: Wiz, Tenable, SearchLight Cyber
- คำเตือนจาก CERT: CERT-EU, CERT-SE, CERT-AU
- สแกนเนอร์สาธารณะ: assetnote/react2shell-scanner
5 ความคิดเห็น
ช่วงนี้ทีม Vercel ดูเละเทะมาก น่าจะถึงเวลาหนีจาก React/Next แล้ว
อาจจะไม่ได้ทำได้ดีนัก แต่มีวิธีรับมือที่ดีกว่านี้ไหม?
ดูเหมือนว่าทีม Vercel จะปล่อย คำสั่ง npx สำหรับอัปเดตเวอร์ชันที่ได้รับผลกระทบจากปัญหานี้ได้ในครั้งเดียวแล้วนะครับ
npx fix-react2shell-nextคงต้องตรวจสอบว่ามีช่องโหว่หรือไม่ด้วยคำสั่ง
npm auditแล้วอัปเดตสินะ..ช่องโหว่การรันโค้ดจากระยะไกล (RCE) ใน React และ Next.js