เตือนภัยสาย Dev! ช่องโหว่ระดับวิกฤตใน React Native เปิดทางแฮกเกอร์ยึดเครื่องนักพัฒนา
นักวิจัยด้านความปลอดภัยไซเบอร์ได้ออกมาเปิดเผยถึงช่องโหว่ความปลอดภัยระดับร้ายแรง (คะแนน CVSS 9.8/10) ในแพ็กเกจ npm ยอดนิยมที่ใช้สำหรับการพัฒนาแอปพลิเคชันมือถือด้วย React Native ซึ่งเปิดทางให้ผู้ไม่หวังดีสามารถสั่งรันโค้ดอันตรายบนเครื่องคอมพิวเตอร์ของนักพัฒนาจากระยะไกลได้โดยไม่จำเป็นต้องผ่านการยืนยันตัวตน
ช่องโหว่ดังกล่าวมีรหัส CVE-2025-11953 อยู่ในแพ็กเกจชื่อ “@react-native-community/cli” ที่ดูแลโดย Meta (บริษัทแม่ของ Facebook) ซึ่งเป็นเครื่องมือที่ถูกดาวน์โหลดไปใช้งานราว 1.5 ถึง 2 ล้านครั้งต่อสัปดาห์
ช่องโหว่เกิดจากอะไร?
ทีมนักวิจัยจากบริษัท JFrog ระบุว่า ปัญหาเกิดจาก Metro ซึ่งเป็น development server ที่ React Native ใช้ในการสร้างโค้ด JavaScript และไฟล์ต่างๆ โดยค่าเริ่มต้นของเซิร์ฟเวอร์นี้จะผูกตัวเองเข้ากับ external interfaces (ไม่ใช่แค่ localhost) และเปิด endpoint ชื่อ /open-url ทิ้งไว้
Endpoint นี้เองที่กลายเป็นจุดอ่อนสำคัญ เพราะมันรับค่าจากผู้ใช้ (user input) ผ่าน POST request แล้วส่งต่อไปยังฟังก์ชัน open() ที่ไม่ปลอดภัยของแพ็กเกจ open อีกทอดหนึ่ง ทำให้เกิดช่องโหว่ประเภท Command Injection ซึ่งเปิดโอกาสให้ผู้โจมตีสามารถส่งคำสั่งอันตรายเข้ามาทำงานบนเครื่องของนักพัฒนาได้โดยตรง
- บน Windows: แฮกเกอร์สามารถรันคำสั่ง Shell ได้ตามอำเภอใจพร้อมกับควบคุมพารามิเตอร์ต่างๆ ได้อย่างเต็มที่
- บน macOS และ Linux: แฮกเกอร์สามารถสั่งรันไฟล์โปรแกรม (binary) ได้ แต่จะควบคุมพารามิเตอร์ได้จำกัดกว่า
การโจมตีนี้อันตรายอย่างยิ่งเพราะทำได้ง่าย ไม่ต้องล็อกอิน และมีเป้าหมาย (attack surface) ที่กว้างมาก เนื่องจากนักพัฒนาจำนวนมหาศาลใช้เครื่องมือนี้ในการทำงาน
ใครได้รับผลกระทบและต้องทำอย่างไร?
- เวอร์ชันที่ได้รับผลกระทบ: แพ็กเกจ @react-native-community/cli และ @react-native-community/cli-server-api ตั้งแต่เวอร์ชัน 4.8.0 ถึง 20.0.0-alpha.2
- เวอร์ชันที่แก้ไขแล้ว: ปัญหานี้ถูกแก้ไขแล้วในเวอร์ชัน 20.0.0 ซึ่งปล่อยออกมาเมื่อช่วงต้นเดือนตุลาคมที่ผ่านมา
คำแนะนำด่วนสำหรับนักพัฒนา:
- อัปเดตทันที: นักพัฒนาที่ใช้ React Native ทุกคนควรรีบตรวจสอบเวอร์ชันของ
@react-native-community/cliและอัปเดตให้เป็นเวอร์ชัน 20.0.0 หรือสูงกว่าโดยเร็วที่สุด - ตรวจสอบโปรเจกต์เก่า: หากมีโปรเจกต์เก่าที่ยังใช้เวอร์ชันที่มีช่องโหว่ ควรอัปเดต dependencies และตรวจสอบว่าไม่มีความเสี่ยงหลงเหลืออยู่
นักพัฒนาที่ไม่ได้รับผลกระทบคือผู้ที่ใช้ React Native ร่วมกับเฟรมเวิร์กอื่นที่ไม่ต้องพึ่งพา Metro development server

