วิธีทำให้ความลับ 1.3TB หายไป แบบ Novo Nordisk
access token เพียงตัวเดียวใน JavaScript ของซับโดเมนที่ถูกลืม กลายเป็นความลับที่ถูกขโมยไป 1.3TB ตู้นิรภัยระดับองค์กรเฝ้าดูคน แต่การบุกรุกเดินเข้ามาทางข้อมูลรับรองของเครื่องที่ไม่มีใครกำกับดูแล
เดือนนี้ Novo Nordisk — บริษัทยาสัญชาติเดนมาร์ก เจ้าของ Ozempic และ Wegovy — ยืนยันว่าผู้โจมตีเข้าถึงระบบของตนได้ [1] นักวิจัยระบุว่าช่องทางเข้าคือ access token ที่มีสิทธิ์สูง ซึ่งฝังอยู่ใน JavaScript ของซับโดเมนที่ถูกลืมและเปิดสู่สาธารณะ: ความลับที่ถูกส่งออกไปยังเบราว์เซอร์ ใครก็ตามที่เปิด View Source ก็อ่านได้ [2] ประมาทจริงครับ แต่บริษัทขนาดนี้ไม่ได้ประมาทเรื่องข้อมูลรับรองโดยทั่วไป — เกือบแน่นอนว่ามีการจัดการข้อมูลรับรองที่จริงจัง เครื่องมือควบคุมการเข้าถึงสิทธิพิเศษที่กำหนดว่าใครเข้าที่ไหนได้บ้าง ทั้งหมดนั้นไม่มีความหมายเลย เพราะทั้งหมดเฝ้าผิดด้านของบ้าน
เกิดอะไรขึ้นจริง
access token ตัวแรกนั้นมีสิทธิ์มากพอที่จะโคลนคลังโค้ดส่วนตัวของ Novo Nordisk และในคลังโค้ดเหล่านั้นเต็มไปด้วยข้อมูลรับรองเพิ่มเติม — เพราะนั่นคือที่อยู่ของข้อมูลรับรองฝั่งเครื่อง ในแทบทุกบริษัทบนโลก: hard-code ไว้ในซอร์ส วางอยู่ใน config ฝังอยู่ใน CI pipeline คอมมิตครั้งเดียวแล้วลืม การโคลนคลังโค้ดไม่ได้มอบแค่ซอร์สโค้ดให้ผู้โจมตี แต่มอบชุดกุญแจถัดไปให้ด้วย และชุดต่อจากนั้นอีก
นี่คือวิธีที่ access token ที่ประมาทตัวเดียวกลายเป็นการเจาะระบบแบบเบ็ดเสร็จ กลุ่มที่เรียกตัวเองว่า FulcrumSec ระบุว่าใช้ช่องทางนี้เคลื่อนที่ต่อเนื่องนานสองเดือนครึ่ง และนำข้อมูลออกไปมากกว่า 700,000 ไฟล์ — ราว 1.3 เทราบ — ทั้งซอร์สโค้ด ข้อมูลยาที่วางจำหน่ายแล้วและยังไม่เปิดตัว บันทึกการทดลองทางคลินิก เทคโนโลยีการผลิต และโมเดล AI ภายในของบริษัท [3] เมื่อข้อเรียกค่าไถ่ 25 ล้านดอลลาร์ตามรายงานถูกปฏิเสธ กลุ่มดังกล่าวก็เริ่มเผยแพร่ของที่ได้ไป (Novo Nordisk ยืนยันการเข้าถึงโดยไม่ได้รับอนุญาตในระบบจำนวนจำกัด ส่วนขอบเขตทั้งหมดเป็นคำกล่าวอ้างของผู้โจมตี ยังไม่ได้รับการตรวจสอบอย่างอิสระ [1][3])
access token ที่รั่วเพียงตัวเดียวคือลูกบิดประตู ส่วนคลังโค้ดที่เต็มไปด้วยข้อมูลรับรองถาวรคือตัวอาคารที่ไม่ได้ล็อกอยู่ข้างหลัง
นี่ไม่ใช่ความประมาท แต่เป็นช่องว่างของหมวดหมู่
การจัดการข้อมูลรับรองระดับองค์กร — ตู้นิรภัยระดับ CyberArk เครื่องมือควบคุมการเข้าถึงสิทธิพิเศษที่บริษัทใหญ่ทุกแห่งใช้ — ถูกสร้างมาเพื่อคน: บัญชีมนุษย์ เซสชันการล็อกอิน ใครเข้าถึงอะไรได้บ้าง มันทำงานได้ดีสำหรับสิ่งนั้น แต่ข้อมูลรับรองที่ไหลทะลักในการบุกรุกครั้งนี้อยู่อีกฝั่งทั้งหมด access token ใน JavaScript ความลับในคลังโค้ด กุญแจใน CI pipeline ล้วนเป็นข้อมูลรับรองฝั่งเครื่อง — สิ่งที่แอป บริการ และตอนนี้คือเอเจนต์ ใช้ยืนยันตัวตนถึงกัน โดยไม่มีมนุษย์อยู่ในวงจร ฝั่งนั้นไม่เคยมีตู้นิรภัยเลย
และมันคือฝั่งที่กำลังระเบิดตัว ทุกการเชื่อมต่อใหม่ ทุกไมโครเซอร์วิส ทุกเอเจนต์ AI ที่คุณ deploy ล้วนเพิ่มจำนวนข้อมูลรับรองถาวรของเครื่องที่ไม่มีใครกำกับดูแล อันตรายย้ายมาอยู่ฝั่งแอปและเอเจนต์แล้ว แต่เครื่องมือไม่ได้ตามมา รายงานสรุปหลังเหตุการณ์จะไปจบลงที่ "อย่าใส่โทเคนไว้ใน JavaScript" ซึ่งเป็นการสู้ผิดสมรภูมิ โทเคนจะรั่วอยู่เสมอ — ลงใน log ในภาพหน้าจอ ใน bundle ที่ถูกลืม คุณชนะเกม "ไม่ให้ข้อมูลรับรองตัวแรกหลุดเลย" ไม่ได้หรอกครับ สิ่งที่เปลี่ยนรอยรั่วเดียวให้กลายเป็น 1.3 เทราบ คืออาคารของข้อมูลรับรองถาวรของเครื่องที่อยู่ข้างหลัง ในโค้ด รอให้ถูกโคลน ได้หนึ่งตัว ก็ได้แผนที่ไปยังที่เหลือ
ออกแบบมาเพื่อสิ่งนี้โดยเฉพาะ
ช่องว่างนี้คือเหตุผลทั้งหมดที่ Clavitor มีอยู่: ตู้นิรภัยสำหรับฝั่งที่ CyberArk ไม่เคยถูกสร้างมารองรับ — ข้อมูลรับรองที่แอปและเอเจนต์ใช้ สำหรับ Clavitor จะไม่มีข้อมูลรับรองในคลังโค้ดให้เก็บเกี่ยว โค้ดไม่เคยถือความลับที่มันจะเผลอคอมมิต มันขอจากตู้นิรภัยเพื่อใช้งานข้อมูลรับรอง ณ ขณะที่ต้องการ และค่าของมันไม่เคยลงเอยในซอร์ส ใน config หรือใน build ผู้โจมตีที่ขโมย access token ตัวแรกแล้วโคลนคลังโค้ดทุกใบที่คุณมี จะพบสิ่งที่ควรอยู่ตรงนั้นพอดี: โค้ด และไม่มีกุญแจ ห่วงโซ่ที่เปลี่ยนการรั่วครั้งเดียวให้กลายเป็นทุกอย่างจะขาดตั้งแต่ข้อแรก
access token เริ่มต้นก็ถูกจำกัดอำนาจในแบบเดียวกัน ข้อมูลรับรองของ Clavitor ถูกจำกัดขอบเขตไว้ที่การกระทำเดียวและหมดอายุ ดังนั้นโทเคนที่เจอใน bundle ที่หลุดมาจะไม่ใช่กุญแจไขทุกบาน — มันโคลนทั้งองค์กรไม่ได้ ไปถึงความลับถัดไปก็ไม่ได้ เพราะมันใช้ได้แค่สิ่งเดียวตามชื่อที่ตั้งไว้ มันผูกกับเครื่องที่ออกให้ ดังนั้นสำเนาที่ถูกนำไปใช้ที่อื่นจะใช้ไม่ได้ และไม่มีข้อมูลรับรองตัวเดียวใดกลายเป็นท่อส่งข้อมูลออกอย่างเงียบๆ ได้เช่นกัน: ทุกการให้สิทธิ์ถูกจำกัดอัตราการเรียกใช้ และจะสั่งล็อกดาวน์เมื่อมีการเรียกใช้ผิดปกติแบบฉับพลัน ไฟล์ 700,000 ไฟล์จึงไม่หลุดออกทีละคำขอที่ดูสมเหตุสมผลตลอดสิบสัปดาห์ และทุกการใช้งานถูกบันทึกไว้นอกเครื่องและผูกต่อกันด้วยแฮช ซึ่งทำให้การซุ่มอยู่เงียบๆ ทำได้ยากขึ้นมาก เมื่อบันทึกไม่ได้อยู่บนเครื่องที่ผู้บุกรุกครอบครอง
ทั้งหมดนี้ไม่ได้ทำให้คุณเจาะไม่เข้า และใครก็ตามที่สัญญาแบบนั้นกำลังขายของครับ hard-code กุญแจหลักอายุยาวไว้ คนที่เจอก็ใช้มันได้ ครั้งเดียว ตามสิทธิ์ที่มันอนุญาต สิ่งที่เปลี่ยนไปคือการเจอข้อมูลรับรองหนึ่งตัวไม่ได้มอบที่เหลือให้อีกต่อไป: ไม่มีคลังโค้ดที่เต็มไปด้วยความลับถาวรอยู่ข้างหลัง ไม่มีห่วงโซ่จากรอยรั่วไปสู่ 1.3 เทราบ รัศมีความเสียหายของ access token ที่รั่วจะหดกลับมาเหลือแค่ตัวโทเคน
ส่วนที่ควรเก็บไว้
พาดหัวจะเป็นเรื่องสูตรยาและการประมูลบนดาร์กเว็บ และนั่นคือส่วนที่เจ็บปวด บทเรียนนั้นเงียบกว่า: บริษัทชั้นนำที่มีการจัดการข้อมูลรับรองจริงจัง ก็ยังถูกเจาะลึกไปถึง 1.3 เทราบ — เพราะตู้นิรภัยเฝ้าดูคน ในขณะที่การบุกรุกเดินเข้ามาทางแอป อันตรายตอนนี้อยู่ที่ข้อมูลรับรองของเครื่อง และนั่นคือฝั่งเดียวที่ยังวางเปิดอยู่ คำตอบไม่ใช่การล้างคลังโค้ดให้สะอาด — แต่เป็นข้อมูลรับรองที่ไม่เคยค้างอยู่ในนั้นให้ต้องล้าง ต่อให้ถูกขโมย ก็ใช้ได้แค่การกระทำเดียวที่จำกัดขอบเขต โดยไม่มีตู้กุญแจอยู่ข้างหลัง การรั่วไหลก็ยังเป็นแค่การรั่วไหล มันแค่ไม่ใช่กุญแจไขทุกอย่างอีกต่อไป
เราเขียนกติกาที่เครื่องมือจัดการข้อมูลรับรองควรยึดถือสำหรับฝั่งแอปและเอเจนต์ไว้ — กติกาทั้งสิบข้ออยู่ที่นี่
Clavitor (@clavitorai) คือตู้นิรภัยเก็บข้อมูลรับรองที่สร้างมาเพื่อเอเจนต์ AI และเพื่อรับมือกับเอเจนต์เหล่านั้น clavitor.ai
แหล่งอ้างอิง
[1] Novo Nordisk (@novonordisk) — Incident update. ยืนยันการเข้าถึงโดยไม่ได้รับอนุญาตในระบบ IT ภายในของบริษัทจำนวนจำกัด
[2] CybelAngel (@CybelAngel) — Novo Nordisk Was Breached Through JavaScript: what the coverage got wrong. สืบย้อนการเข้าถึงครั้งแรกไปที่ access token สิทธิ์สูงที่ถูกทิ้งไว้ใน JavaScript ฝั่งไคลเอนต์ที่ผ่านการ minify บนซับโดเมนที่เปิดสู่สาธารณะและถูกลืม
[3] TechRepublic (@TechRepublic) — Ozempic Maker Novo Nordisk Confirms Security Incident After $25M Hacker Demand. กลุ่ม FulcrumSec อ้างว่าซุ่มอยู่ราว 2.5 เดือน และได้ไฟล์ราว 700,000 ไฟล์ / 1.3TB — ซอร์สโค้ด ข้อมูลยาที่วางจำหน่ายแล้วและยังไม่เปิดตัว บันทึกการทดลองทางคลินิก และโมเดล AI ภายใน — หลังโคลนคลังโค้ดและเก็บเกี่ยวข้อมูลรับรองเพิ่มเติม โดยข้อมูลถูกเผยแพร่หลังข้อเรียกค่าไถ่ถูกปฏิเสธ