- เด็กชายวัย 15 ปีที่ชอบล่าบั๊กในเวลาว่าง พบช่องโหว่เกี่ยวกับการยืนยันอีเมลใน Zendesk ซึ่งเป็นบริการที่บริษัทระดับ Fortune 500 ใช้งาน
- เขานำเรื่องนี้ไปแจ้งหลายบริษัทและได้เงินรางวัลรวมมากกว่า 50,000 ดอลลาร์ แต่ Zendesk แม้จะแพตช์ปัญหาแล้วก็ไม่ได้จ่ายค่าตอบแทนใด ๆ ให้ผู้รายงาน โดยบทความนี้เล่ากระบวนการทั้งหมด
แนะนำ Zendesk
- Zendesk เป็นเครื่องมือบริการลูกค้าที่บริษัทชั้นนำทั่วโลกใช้งาน
- เมื่อนำอีเมลซัพพอร์ตมาเชื่อมกับ Zendesk ระบบจะจัดการอีเมลขาเข้าและสร้างทิกเก็ต
- น่าแปลกที่หลายบริษัทขนาดใหญ่เลือกพึ่งพา Zendesk แทนการสร้างระบบทิกเก็ตของตนเอง
โซ่ที่อ่อนแอที่สุด
- ดังคำกล่าวที่ว่า “ระบบจะแข็งแรงได้เท่ากับจุดที่อ่อนแอที่สุด” Zendesk มักถูกมองว่าเป็นเพียงเครื่องมือทิกเก็ตง่าย ๆ จึงถูกใช้งานโดยไม่ตั้งค่าอย่างรอบคอบ
- หากใช้โดเมน
@company.com กับระบบ single sign-on (SSO) และเชื่อมเข้ากับ Zendesk อาจก่อให้เกิดช่องโหว่ด้านความปลอดภัย
- เพราะ Zendesk เป็นผู้ประมวลผลอีเมลของโดเมน หากระบบ SSO ตรวจสอบที่อยู่อีเมลไม่ถูกต้อง ผู้ที่เข้าถึง Zendesk ได้อาจนำไปใช้โจมตีระบบภายในได้
การปลอมแปลงอีเมล
- พบช่องโหว่ร้ายแรงใน Zendesk ซึ่งทำให้ผู้โจมตีสามารถอ่านทิกเก็ตซัพพอร์ตของบริษัทที่ใช้ Zendesk ได้
- Zendesk ไม่มีมาตรการป้องกันการปลอมแปลงอีเมลที่มีประสิทธิภาพ
- หากผู้โจมตีรู้ที่อยู่อีเมลซัพพอร์ตและหมายเลขทิกเก็ต ก็สามารถใช้การปลอมแปลงอีเมลเพื่อสวมรอยเป็นผู้ส่งเดิมและเข้าถึงทิกเก็ตได้
- ผู้เขียนรายงานบั๊กนี้ แต่ในช่วงแรก Zendesk ไม่ได้ให้ความสนใจ
- มีการตอบกลับมาว่าปัญหาการปลอมแปลงอีเมล (ประเด็น SPF, DKIM, DMARC) อยู่นอกขอบเขตการรับรายงาน
- รายงานถูกดำเนินการผ่านบริการ HackerOne และเมื่อขอให้รายงานตรงกับทีม Zendesk ก็ถูกปฏิเสธ
ขยายประเด็นนี้ไปสู่การยึดครอง Slack
- ผู้เขียนอาจเลือกรายงานบั๊กปลอมแปลงอีเมลให้แต่ละบริษัทเป็นราย ๆ ได้ แต่ต้องการสร้างผลกระทบในวงกว้างมากกว่า
- ก่อนหน้านี้มีนักวิจัยอีกคนเคยเจาะ Slack ของบริษัทหลายร้อยแห่งผ่าน Zendesk มาแล้ว (TICKETTRICK)
- ผู้เขียนพยายามทำซ้ำด้วยบั๊กของตนเอง แต่เจออุปสรรคบางอย่าง
- Slack เปลี่ยนไปใช้วิธีตรวจสอบด้วยการเพิ่มโทเคนแบบสุ่มลงในที่อยู่อีเมล
- อย่างไรก็ตาม เมื่อใช้ OAuth เพื่อล็อกอินด้วย Apple ID ระบบจะไม่ใช้โทเคนนี้ จึงสามารถหลบเลี่ยงได้
ขั้นตอนการทำซ้ำ: Apple → Zendesk → Slack
- สร้าง Apple ID ด้วย
support@company.com แล้วขอรหัสยืนยัน จะมีการสร้างทิกเก็ตใน Zendesk
- สร้างทิกเก็ตด้วยอีเมลของตนเองในพอร์ทัลซัพพอร์ตของ
company.com เพื่อติดตามช่วงของหมายเลข ID
- ใช้บั๊กปลอมแปลงอีเมลเพื่อพยายามเพิ่มตัวเองเข้าไปในทุกทิกเก็ตภายในช่วง ID นั้น
- ล็อกอินเข้าสู่พอร์ทัลซัพพอร์ตของบริษัทนั้นด้วยบัญชี
daniel@wearehackerone.com และตรวจดูทิกเก็ตที่ถูก CC มา
- กรอกรหัสยืนยันลงใน Apple ID
- ใช้ฟังก์ชัน “Sign in with Apple” ของ Slack เพื่อล็อกอินด้วย Apple ID ที่ผูกกับอีเมล @company.com แล้ว ล็อกอินเข้า Slack ได้สำเร็จ
ผู้เขียนนำ 6 ขั้นตอนนี้ไปใช้กับ Zendesk และ Slack หลายร้อยอินสแตนซ์
ผลกระทบหลังเหตุการณ์
- ตลอดหนึ่งสัปดาห์ ผู้เขียนแจ้งช่องโหว่ให้บริษัทต่าง ๆ เป็นรายแห่ง บางแห่งแก้ไขทันที แต่บางแห่งยืนยันว่าเป็นปัญหาของ Zendesk
- เมื่อมีบางบริษัทติดต่อ Zendesk ในที่สุด Zendesk ก็ขอให้เก็บรายงานนี้เป็นความลับ และขอขั้นตอนการทำซ้ำสำหรับช่องโหว่ที่ยึดครอง Slack ได้
- หลังได้รับ PoC การยึดครอง Slack แล้ว Zendesk ยืนยันปัญหา แต่ใช้เวลาอีก 2 เดือนกว่าจะจัดการเสร็จ
- หลายบริษัทปิดฟีเจอร์การทำงานร่วมกันผ่านอีเมลเพื่อป้องกันอินสแตนซ์ของตน
- ผู้เขียนได้รับเงินรางวัลจากการแจ้งบั๊กนี้มากกว่า 50,000 ดอลลาร์ จากบริษัทแต่ละแห่งผ่าน HackerOne และแพลตฟอร์มอื่น ๆ
- บางบริษัทถึงกับยกเลิกสัญญากับ Zendesk
การแก้ไขของ Zendesk และค่าบั๊กบาวน์ตี 0 ดอลลาร์ของฉัน
- หลังจาก 2 เดือน Zendesk ยืนยันว่าได้แก้ปัญหาแล้ว
- Zendesk ใช้ตัวกรองสแปม Cloudmark และ Rspamd EAP แต่ไม่ได้ใช้คะแนนจาก Rspamd ทำให้อีเมลจำนวนมากไม่ถูกกักไว้
- ตอนแรกแก้โดยสลับไปใช้ Rspamd อัตโนมัติภายใต้เงื่อนไขบางอย่าง
- ต่อมาจึงเพิ่มตัวกรองเพื่อกักอีเมลยืนยันตัวตนจาก Apple และ Google โดยอัตโนมัติ
- แม้จะแก้ปัญหาแล้ว สุดท้าย Zendesk ก็ตัดสินใจไม่จ่ายเงินรางวัลสำหรับการรายงานบั๊กครั้งนี้
- เพราะผู้เขียนนำช่องโหว่ไปแบ่งปันกับบริษัทที่ได้รับผลกระทบ ซึ่งถือว่าละเมิดแนวทางการเปิดเผยข้อมูลของ HackerOne
บทสรุป
- บั๊กอีเมลเล็ก ๆ สามารถลุกลามไปสู่การเจาะระบบภายในของบริษัทที่ใหญ่ที่สุดในโลกได้
- แม้ Zendesk จะแก้ช่องโหว่ในที่สุด แต่กระบวนการปฏิเสธ ตอบสนองล่าช้า และเพิกเฉยนั้นเป็นเรื่องที่หนักหนา
- นี่คือความจริงของการล่าบั๊ก บางครั้งก็ชนะ บางครั้งก็แพ้
ความเห็นจาก GN⁺
- กรณีของ Zendesk แสดงให้เห็นถึงความเสี่ยงของการนำโซลูชันจากบุคคลที่สามมาใช้โดยไม่พิจารณาอย่างวิพากษ์ ไม่ว่าผลิตภัณฑ์จะมาจากบริษัทที่มีชื่อเสียงเพียงใด การตรวจสอบด้านความปลอดภัยก็ยังจำเป็น
- การยึดครองระบบภายในของบริษัทใหญ่สามารถสร้างความเสียหายมหาศาลได้ ดังนั้นการตอบสนองล่าช้าของ Zendesk จึงขาดความรับผิดชอบอย่างมาก และการปฏิเสธจ่ายบาวน์ตีก็ไม่เป็นผลดีต่อแรงจูงใจของนักวิจัยด้านความปลอดภัย
- บริษัทควรเลือกโดเมน SSO อย่างรอบคอบ และเสริมความเข้มแข็งให้กระบวนการยืนยันอีเมล ควรใช้เทคโนโลยียืนยันอีเมลอย่าง DMARC, SPF, DKIM ให้มากขึ้น
- แนวทางการเปิดเผยข้อมูลของ HackerOne นั้นเข้มงวดเกินไปจากมุมมองของนักวิจัย ช่องโหว่ร้ายแรงควรถูกแชร์อย่างรวดเร็ว จึงควรมีการประยุกต์ใช้อย่างยืดหยุ่นตามสถานการณ์
- การล่าบั๊กควรเป็น win-win ทั้งสำหรับบริษัทและนักวิจัย หวังว่าจะเกิดวัฒนธรรมที่เคารพเจตนาดีและความพยายามของนักวิจัย พร้อมตอบแทนอย่างเหมาะสม
2 ความคิดเห็น
พอเห็นประเด็นแบบนี้แล้ว ดูเหมือนว่าพวกโซลูชันด้านความปลอดภัย ถ้าจะเอามาใช้งานเลย สู้ดึงผู้เชี่ยวชาญด้านความปลอดภัยเข้ามาและปั้นทีมเองน่าจะดีกว่ามากเลยครับ ฮือๆ
ความเห็นจาก Hacker News
ผู้ใช้รายหนึ่งกล่าวว่าเขาได้รายงานบั๊กเดียวกันนี้กับ Zendesk, Apple และ Slack ไปเมื่อเดือนมิถุนายน 2024 และเหตุผลที่พวกเขาไม่จ่ายค่ารางวัลบั๊กก็น่าจะเป็นเพราะเขาไม่ใช่คนแรกที่พบ
ผู้ใช้อีกรายอ้างว่า Zendesk สร้างวงดนตรีปลอมชื่อ "Zendesk Alternative" เพื่อปนเปื้อนผลการค้นหาบน Google
ผู้ใช้คนหนึ่งบอกว่ารู้สึกผิดหวังที่ Zendesk ปฏิเสธการจ่ายรางวัลสำหรับบั๊กนี้ และบอกว่านี่คือวิธีที่ทำให้คนไม่อยากเข้าร่วมโปรแกรมรางวัลขนาดใหญ่
ผู้ใช้อีกรายกล่าวว่าโปรแกรม bug bounty ที่ไม่มีประสิทธิภาพส่งผลเสียต่อบริการซอฟต์แวร์
ผู้ใช้คนหนึ่งวิจารณ์ว่า Zendesk มีรายได้ถึง 1.3 พันล้านดอลลาร์ แต่กลับไม่ยอมจ่ายรางวัล ซึ่งเป็นมุมมองระยะสั้น
ผู้ใช้อีกรายอธิบายว่า Zendesk อาจเพิกเฉยเพราะไม่เข้าใจผลกระทบของบั๊กนี้อย่างถูกต้อง
ผู้ใช้คนหนึ่งชี้ว่า Zendesk แก้แค่ปัญหาอีเมลยืนยันบัญชี Apple แต่ไม่ได้แก้ปัญหาที่ต้นเหตุ
มีการอธิบายว่ามีช่องโหว่แยกกันอยู่สองจุด
มีการวิจารณ์ว่า Zendesk เพิกเฉยต่อปัญหาและพยายามเก็บเรื่องนี้ไว้เป็นการภายใน
สุดท้าย ผู้ใช้คนหนึ่งวิจารณ์การที่ Zendesk ปฏิเสธการจ่ายรางวัลสำหรับบั๊กนี้ พร้อมย้ำว่าผู้รายงานได้ทำทุกขั้นตอนอย่างถูกต้องแล้ว