- หากระบบฝั่งสายการบินใน โฟลว์การยืนยันตัวตน KCM/CASS ของ TSA ถูกเจาะ ผู้โจมตีสามารถเพิ่มผู้ใช้ใด ๆ ให้ดูเหมือนผ่านการตรวจสอบสถานะการจ้างงานแล้ว ซึ่งอาจนำไปสู่การเลี่ยงจุดตรวจรักษาความปลอดภัยหรือแม้แต่การเข้าถึงห้องนักบินได้
- FlyCASS ให้บริการเว็บอินเทอร์เฟซ CASS สำหรับสายการบินขนาดเล็ก และสามารถล็อกอินเป็นผู้ดูแลระบบได้ผ่าน SQL Injection บนหน้าเข้าสู่ระบบของ Air Transport International
- หน้าผู้ดูแลระบบสามารถมอบสิทธิ์ KCM และ CASS ให้พนักงานใหม่ได้ โดยไม่มีการตรวจสอบเพิ่มเติม ทำให้ผู้ใช้ทดสอบถูกยืนยันว่าอยู่ในสถานะได้รับอนุมัติในทั้งสองระบบ
- หลังเปิดเผยต่อ ARINC, FAA และ DHS/CISA เมื่อปลายเดือนเมษายน 2024 DHS ยืนยันว่า FlyCASS ถูกแยกออกจาก KCM/CASS แล้ว แต่ไม่ตอบคำขอแก้ไขคำชี้แจงของ TSA
- TSA ระบุว่าไม่สามารถเข้าถึงจุดตรวจได้เพราะมีการคัดกรองก่อนออกบาร์โค้ด KCM แต่ในขั้นตอนจริงยังมีช่องทางให้ป้อน ID พนักงานด้วยตนเอง ทำให้ผลกระทบของช่องโหว่นี้รุนแรงกว่าเดิม
การตรวจสอบที่ KCM และ CASS รับผิดชอบ
- Known Crewmember(KCM) เป็นโปรแกรมของ TSA ที่ให้กัปตันและลูกเรือสามารถเลี่ยงการตรวจค้นรักษาความปลอดภัยได้แม้ระหว่างเดินทางส่วนตัวภายในประเทศ
- พนักงานจะแสดงบาร์โค้ด KCM ที่ช่องทางเฉพาะ หรือให้หมายเลขพนักงานและสายการบินแก่เจ้าหน้าที่ TSA
- แล็ปท็อปของเจ้าหน้าที่ TSA จะตรวจสอบสถานะการจ้างงานกับสายการบิน และหากสำเร็จ พนักงานคนนั้นจะเข้าเขตปลอดภัยได้โดยไม่ต้องผ่านการตรวจค้นเพิ่มเติม
- Cockpit Access Security System(CASS) เป็นอีกระบบหนึ่งที่ใช้ยืนยันสิทธิ์ในการเข้าถึงห้องนักบิน
- เครื่องบินส่วนใหญ่มีที่นั่ง jumpseat อยู่ในห้องนักบิน ด้านหลังนักบินที่ทำการบิน
- เมื่อนักบินต้องเดินทางไปทำงานหรือย้ายที่ และไม่สะดวกใช้ที่นั่งแบบชำระเงิน ก็สามารถใช้ jumpseat ได้
- เจ้าหน้าที่ประตูขึ้นเครื่องสามารถใช้ CASS ตรวจสอบว่าผู้ใช้ jumpseat เป็นนักบินที่ได้รับอนุมัติหรือไม่ และแจ้งลูกเรือได้ว่ามีการยืนยันผ่าน CASS แล้ว
- แกนหลักของทั้งสองขั้นตอนคือ การตรวจสอบสถานะการจ้างงานปัจจุบันกับสายการบิน
- หากไม่ใช่พนักงานสายการบิน ก็ไม่ได้อยู่ในสถานะที่ผ่านการตรวจประวัติ ดังนั้นไม่ควรได้รับอนุญาตให้เลี่ยงการตรวจค้นรักษาความปลอดภัยหรือเข้าถึงห้องนักบิน
- ระบบยังส่งคืนรูปถ่ายของลูกเรือเพื่อช่วยตรวจสอบว่าเป็นบุคคลที่ได้รับอนุมัติจริงหรือไม่
ARINC และระบบยืนยันตัวตนรายสายการบิน
- ARINC เป็นบริษัทย่อยของ Collins Aerospace และดูเหมือนว่าได้รับมอบหมายจาก TSA ให้ดำเนินงาน KCM
- ARINC ดำเนินงานองค์ประกอบส่วนกลาง เช่น เว็บไซต์ออนไลน์ที่นักบินและลูกเรือใช้ตรวจสอบสถานะ KCM และ API ที่ใช้เราต์คำขออนุมัติระหว่างสายการบิน
- แต่ละสายการบินดูเหมือนจะดำเนินระบบยืนยันตัวตนของตนเองเพื่อเข้าร่วม KCM และ CASS โดยระบบนี้โต้ตอบกับ ฮับ ของ ARINC
- TSA และสายการบินสามารถส่งคำขออย่าง
CockpitAccessRequest,CrewVerificationRequestไปยัง ARINC ได้ - ARINC จะเราต์คำขอไปยังระบบของสายการบินที่เกี่ยวข้องและรับการตอบกลับ
- TSA และสายการบินสามารถส่งคำขออย่าง
- ปัจจุบันมี 77 สายการบิน เข้าร่วม KCM
- สายการบินขนาดใหญ่อาจสร้างระบบของตนเอง แต่ประเด็นที่ถูกตรวจสอบคือสายการบินขนาดเล็กตอบสนองต่อคำขอ KCM หรือ CASS อย่างไร
SQL Injection ที่พบใน FlyCASS
- นักวิจัยกำลังค้นหาผู้ให้บริการที่ดำเนินระบบยืนยันตัวตนจริง และพบเว็บไซต์ชื่อ FlyCASS
- FlyCASS ให้บริการอินเทอร์เฟซบนเว็บสำหรับ CASS แก่สายการบินขนาดเล็ก
- แต่ละสายการบินมีหน้าเข้าสู่ระบบแยกกัน และ Air Transport International(8C) เข้าถึงได้ที่
/ati
- เมื่อใส่เครื่องหมายอัญประกาศเดี่ยวในชื่อผู้ใช้บนหน้าเข้าสู่ระบบ ระบบส่งคืน ข้อผิดพลาด MySQL ทันที
- ดูเหมือนว่าชื่อผู้ใช้ถูกแทรกโดยตรงเข้าไปใน SQL query สำหรับล็อกอิน
- sqlmap ยืนยันปัญหา SQL Injection ได้
- ด้วยการใช้ชื่อผู้ใช้
' or '1'='1และรหัสผ่าน') OR MD5('1')=MD5('1ร่วมกัน สามารถล็อกอินเข้าเป็นบัญชี ผู้ดูแลระบบ ของ Air Transport International ได้
เพิ่มผู้ใช้ที่ได้รับอนุมัติ KCM/CASS ด้วยสิทธิ์ผู้ดูแลระบบ
- FlyCASS ดำเนินงาน ทั้ง KCM และ CASS ให้สายการบินที่เข้าร่วม
- เมื่อได้สิทธิ์ผู้ดูแลระบบของ Air Transport International แล้ว ก็สามารถจัดการรายชื่อนักบินและลูกเรือที่เชื่อมกับสายการบินนั้นได้
- เมื่อเพิ่มพนักงานใหม่ให้สายการบิน ไม่มีการตรวจสอบหรือยืนยันตัวตนเพิ่มเติม
- ผู้ดูแลระบบของสายการบินสามารถเพิ่มใครก็ได้เป็นผู้ใช้ที่ได้รับอนุมัติ KCM และ CASS
- เพื่อทดสอบ ได้สร้างพนักงานชื่อ
Test TestOnlyใส่รูปทดสอบที่เลือกไว้ แล้วมอบสิทธิ์เข้าถึง KCM และ CASS- หลังจากนั้น เมื่อตรวจสอบด้วยฟีเจอร์ Query ผู้ใช้ทดสอบอยู่ในสถานะได้รับอนุมัติทั้งใน KCM และ CASS
- ด้วยความรู้พื้นฐานเกี่ยวกับ SQL Injection ก็สามารถล็อกอินเข้าเว็บไซต์และเพิ่มผู้ใช้ใด ๆ เข้า KCM และ CASS ได้
- ผลที่ตามมาคืออาจสามารถข้ามการตรวจค้นรักษาความปลอดภัยและเข้าถึงห้องนักบินของเครื่องบินโดยสารพาณิชย์ได้
- ทันทีหลังพบปัญหาแรก กระบวนการเปิดเผยก็เริ่มขึ้น และยังพบปัญหาร้ายแรงอื่น ๆ อีกหลายรายการ
กระบวนการเปิดเผยและปฏิกิริยาของ TSA
- แม้แต่การหาช่องทางติดต่อเพื่อเปิดเผยอย่างเหมาะสมก็ไม่ใช่เรื่องง่าย
- FlyCASS ดูเหมือนดำเนินงานโดยคนเพียงคนเดียว จึงไม่อยากติดต่อ FlyCASS โดยตรงตั้งแต่แรกจนทำให้อีกฝ่ายตกใจ
- เมื่อวันที่ 23 เมษายน 2024 ได้เปิดเผยปัญหาต่อ Department of Homeland Security และ DHS รับทราบ พร้อมยืนยันว่า “ให้ความสำคัญอย่างยิ่ง”
- ต่อมา FlyCASS ถูกปิดใช้งานจาก KCM/CASS และภายหลังดูเหมือนว่าปัญหาได้รับการแก้ไขแล้ว
- หลังปัญหาได้รับการแก้ไข นักวิจัยพยายามประสานงานเพื่อเปิดเผยอย่างปลอดภัย แต่ DHS หยุดตอบกลับ
- สำนักงานประชาสัมพันธ์ของ TSA ออกคำชี้แจงปฏิเสธผลกระทบของช่องโหว่
- TSA ระบุว่า ก่อนออกบาร์โค้ดให้สมาชิก KCM ใหม่ จะเริ่มกระบวนการคัดกรองก่อน ดังนั้นช่องโหว่นี้จึงไม่สามารถใช้เข้าถึงจุดตรวจ KCM ได้
- อย่างไรก็ตาม การใช้จุดตรวจ KCM ไม่จำเป็นต้องมีบาร์โค้ด KCM และ TSO สามารถป้อน ID พนักงานสายการบินด้วยตนเองได้
- หลังนักวิจัยแจ้งเรื่องนี้กับ TSA แล้ว TSA ได้ลบส่วนของเว็บไซต์ที่กล่าวถึงการป้อน ID พนักงานด้วยตนเอง และไม่ตอบคำขอแก้ไขคำชี้แจง
- มีการยืนยันว่าอินเทอร์เฟซที่ TSO ใช้ยังคงอนุญาตให้ป้อน ID พนักงานด้วยตนเอง
การโจมตีเพิ่มเติมที่อาจทำได้และไทม์ไลน์การเปิดเผย
- เนื่องจากช่องโหว่ทำให้แก้ไขสมาชิก KCM ที่มีอยู่ได้ จึงสามารถ เปลี่ยนรูปถ่ายและชื่อ ของผู้ใช้ที่ลงทะเบียนไว้แล้วได้ด้วย
- วิธีนี้อาจเลี่ยงกระบวนการคัดกรองสมาชิกใหม่ได้ แม้จะมีขั้นตอนดังกล่าวอยู่ก็ตาม
- หากสามารถได้บาร์โค้ด KCM ที่ยังไม่ได้ลงทะเบียน ก็สามารถนำไปลงทะเบียนกับ ID พนักงานโดยตรงบนเว็บไซต์ KCM ได้
- ไทม์ไลน์การเปิดเผย:
- 2024-04-23: เปิดเผยครั้งแรกต่อ ARINC และ FAA
- 2024-04-24: เปิดเผยเพิ่มเติมต่อ DHS ผ่าน CISA
- 2024-04-25: DHS CISO ยืนยันว่ากำลังดำเนินการแก้ไข
- 2024-05-07: DHS CISO ยืนยันว่า FlyCASS ถูกแยกออกจาก KCM/CASS แล้ว
- 2024-05-17: ติดต่อ DHS CISO เพื่อติดตามเรื่องคำชี้แจงของ TSA แต่ไม่ได้รับคำตอบ
- 2024-06-04: ติดต่อ DHS CISO เพื่อติดตามเรื่องคำชี้แจงของ TSA อีกครั้ง แต่ไม่ได้รับคำตอบ
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
การตอบสนองของ TSA ในเรื่องนี้ดูเด็กและน่าอาย แต่ก็ไม่น่าแปลกใจนักเมื่อคิดว่าเป็นองค์กรที่ไม่ได้สนใจความปลอดภัยจริง ๆ เท่าไร
ตอนแรก DHS ดูเหมือนจะจัดการรายงานอย่างรวดเร็วและเป็นมืออาชีพ แต่สิ่งที่น่าสนใจคือหลังจากนั้นกลับไม่สามารถรักษาอำนาจระดับบนสุดในการดูแลกระบวนการแก้ไขและเปิดเผยข้อมูลไว้ได้จนจบ
เคยเห็นปัญหาใหญ่ ๆ อย่างคีย์ที่รั่วไหลถูกมองเป็นเรื่องเล็กน้อย ในขณะที่เรื่องอย่างไลบรารี JavaScript เก่า ๆ หรือการไม่รองรับ IPv6 กลับถูกยกระดับ
เห็นได้ชัดว่า TSA และคู่สัญญาพยายามลดทอนความเสี่ยงจากการรั่วไหลที่อาจเกิดขึ้น แต่ผู้จัดการจำนวนมากเข้าใจความหมายของช่องโหว่ได้ยาก และนักพัฒนาก็มีแนวโน้มจะลดทอนความรับผิดชอบของตัวเองพร้อมโยนความผิดให้คนอื่น
ในทางปฏิบัติ ดูเหมือนเป้าหมายคือการทำให้ระบบเฝ้าระวังแข็งตัวขึ้นและสร้างภาพลักษณ์ที่ดูเข้มแข็ง
พวกเขาไม่ได้หยุดแค่ยืนยัน SQL injection แต่ถึงขั้นสร้าง เรคคอร์ดพนักงานปลอม ด้วย น่าตกใจที่ Homeland Security ไม่ได้มาจับกุมผู้เกี่ยวข้อง
คิดว่า Homeland Security น่าจะเป็นหน่วยงานที่มีโอกาสสูงที่สุดที่จะเข้าใจผิดว่าการเปิดเผยอย่างรับผิดชอบเป็นการแฮ็กโดยเจตนาร้าย และเรียกมันแบบนั้น
จุดนี้น่าประทับใจกว่าความไร้ความสามารถของช่องโหว่จริงเสียอีก
ถ้าพวกเขาเพิ่มตัวเองเข้าไปใน Known Crewmember แล้วข้ามการตรวจค้นสนามบินจริง ๆ เมื่อนั้นก็คงได้เข้าคุก
จากนั้นคนเก่งที่สุดจากประเทศอื่นที่ไม่เป็นมิตรมากนักจะเข้ามาตรวจแทน และโอกาสที่พวกเขาจะเปิดเผยอย่างรับผิดชอบก็ต่ำ
https://bugcrowd.com/engagements/dhs-vdp
มีความสัมพันธ์กันมาหลายปีแล้ว ก็น่าจะคุ้นเคยอยู่พอสมควร ตัว TSA เองอาจคุ้นน้อยกว่า แต่ในเมื่อ DHS ดำเนินนโยบายการเปิดเผยช่องโหว่ (VDP) ทั้งกระทรวง และให้คำแนะนำหน่วยงานอื่นผ่าน CISA เรื่องการดำเนิน VDP ก็ดูไม่น่าจะส่งเรื่องให้ DOJ ดำเนินคดี
แต่ก็เป็นไปได้ว่าผมมองโลกในแง่ดีเกินไป
วิธีนี้ช่วยลดความเสี่ยงที่จะถูกดำเนินคดีจากการเปิดเผยอย่างรับผิดชอบได้
วิธีที่ปลอดภัยกว่านั้นคือส่งรายงานแบบไม่ระบุตัวตน พร้อมกำหนดเส้นตายที่ชัดเจนสำหรับการเปิดเผยหรือการเปิดเผยทั้งหมด แน่นอนว่าในกรณีนี้ก็ยากที่จะได้รับการยอมรับว่าเป็นผู้ค้นพบ
เรื่องนี้ร้ายแรงมาก จน ณ เวลาที่เขียนนี้ยังไม่มีใครพูดถึงเลยว่า ปัญหาการเก็บรหัสผ่านด้วย MD5 แย่แค่ไหน
ในกรณีนี้ยังเผยให้เห็นด้วยว่าไม่ได้ใช้ salt ด้วยซ้ำ ซึ่งแม้จะใช้ salt กับ MD5 ก็ยังไม่เพียงพออยู่ดี
แต่ถ้าเพียงแค่ส่งคำขอก็สามารถรื้อค้น SQL query ได้ตามใจชอบแล้ว การเก็บรหัสผ่านดีแค่ไหนก็แทบไม่มีความหมาย
สัดส่วนที่ใช้ salt และใช้ hash ที่ปลอดภัยทางคริปโตน่าจะต่ำกว่า 20% และ MD5 โผล่มาบ่อยมากจริง ๆ
เมื่อคิดว่าก่อนถึงการสัมภาษณ์นี้ก็มีการคัดกรองไปค่อนข้างมากแล้ว ค่า baseline โดยรวมจึงแย่กว่านั้นอีก
คำอธิบายที่ว่า “ไม่ได้ติดต่อ FlyCASS ก่อนเพราะดูเหมือนว่ามีคนคนเดียวเป็นผู้ดูแล” นั้นเชื่อได้ยาก
รู้สึกเหมือนพวกเขารู้อยู่แล้วว่านักพัฒนาเว็บจะรีบแก้ทันที และอยากทำให้การค้นพบของตัวเองเป็นประเด็นใหญ่กว่าเดิม
ไม่ใช่เรื่องที่ผู้รับผิดชอบควรแก้เงียบ ๆ แล้วจบ แต่ต้องตรวจสอบทุกคนในฐานข้อมูลใหม่ทั้งหมด
ถ้านักพัฒนาเพียงคนเดียวแก้ทันที ก็คงยากที่จะดันปัญหาขึ้นไปถึงระดับบนเพื่อให้เกิดการแก้ไขเชิงระบบ
ไม่รู้ว่าการยกเครื่องเต็มรูปแบบแบบนั้นจะเกิดขึ้นจริงหรือไม่ แต่ถ้าไม่ยกระดับ โอกาสที่จะเกิดก็ยิ่งต่ำลง
การปฏิเสธความร้ายแรงของปัญหาไม่น่าแปลกใจ แต่ที่ค่อนข้างน่าแปลกใจคือไม่ได้แจ้ง FBI หรือพยายามจับกุม
อาจเป็นความคืบหน้าเล็ก ๆ ก็ได้
ถ้าแจ้ง TSA โดยตรง ก็มีโอกาสไม่น้อยที่จะกลายเป็นการข่มขู่ทางกฎหมายและการวางท่า
ผมเดิมพัน 50 ดอลลาร์ได้เลยว่า Ian จะถูกดำเนินคดี
น่าแปลกใจที่เด็กอายุ 17 ปีเบื่อ ๆ พร้อมบัตรประจำตัวปลอมยังไม่ได้ลงคลิปแอบขึ้นเครื่องบินใน TikTok
SQL injection เนี่ยนะ
ตลกดีที่ SQL injection แบบเก่า ๆ เพียงจุดเดียวทำให้การแสดงละครด้านความปลอดภัยมูลค่าหลายหมื่นล้านดอลลาร์ต่อปีทั้งหมดไร้ผล แต่ก็ไม่น่าแปลกใจนัก
ค่อนข้างน่าประหลาดใจที่สายการบินซื้อซอฟต์แวร์ที่ไวต่อความปลอดภัยขนาดนี้จากบริษัทที่มีคนทำงานคนเดียว
ถ้าคุณไปถึงระดับหนึ่งในการพยายามขาย SaaS ให้บริษัทอเมริกันส่วนใหญ่ อย่างน้อยก็จะถูกขอ รายงานการตรวจสอบ SOC2
ถ้าว่ากันตามมาตรฐานการตรวจสอบ SOC2 ถือว่าผ่านได้ค่อนข้างง่ายโดยไม่มีข้อทักท้วงใหญ่ ๆ แต่ถ้าบริษัทดำเนินงานด้วยคนเพียงคนเดียว ก็ควรมีเกณฑ์หลายข้อที่ขึ้นสัญญาณแดงในรายงาน
ถ้าเป็นซอฟต์แวร์ที่เชื่อมต่อกับระบบเข้าถึงของ TSA ผมเคยคิดว่าข้อกำหนดน่าจะเข้มงวดกว่า SOC2 มาก
ทุกอย่างในแบ็กเอนด์ถูกแปะไว้แบบฝืน ๆ ด้วยเทปผ้ามากกว่าธุรกิจขนาดเล็กทั่วไปเสียอีก
ถ้าซื้อเครื่องบินโดยสารเก่าสักไม่กี่ลำมาแปลงเป็นเครื่องบินขนส่งสินค้า คุณก็กลายเป็น “สายการบิน” ได้
การมีสายการบินใหม่เกิดขึ้นเป็นเรื่องมีคุณค่าหรือไม่? เราควรบังคับให้พวกเขาปิดกิจการเพียงเพราะยังไม่มีระบบที่ต้องใช้เวลาหลายปีถึงหลายสิบปีในการสร้างหรือเปล่า? บริษัทที่บินอยู่ 1 เส้นทางระหว่างที่ไหนก็ไม่รู้กับที่ไหนก็ไม่รู้ ด้วยเครื่องบิน 2 ลำ ควรต้องจ่ายเงินก้อนโตให้ระบบสั่งทำสำหรับสายการบินโดยสารรายใหญ่หรือ?
ข้อกำหนดและการตรวจสอบไม่ใช่คำตอบในเรื่องนี้ ปัญหาเชิงออกแบบพื้นฐานคือ TSA เอาการรับรองว่า “สายการบิน XXX บอกว่าคุณเป็นพนักงาน” ไปผูกกับสิทธิ์ที่กว้างมากอย่าง “สามารถข้ามการตรวจความปลอดภัยทั้งหมดได้ในทุกสนามบินทั่วประเทศ” และไม่มีแม้แต่การตรวจสอบพื้นฐานว่า “สายการบินนั้นให้บริการที่สนามบินนี้จริงหรือไม่?”
น่าประหลาดใจเหมือนกันที่เรื่องแบบนี้ทำได้ง่ายขนาดนี้ แต่คำอธิบายเรื่อง การตอบสนองของ TSA ช่วงท้ายทำให้รู้สึกไม่สบายใจอย่างรุนแรงจริง ๆ
คนที่ทำเรื่องนี้น่าจะโดน Homeland Security หรือ FBI มาเยี่ยม
ไม่รู้ว่าคิดว่าจะได้อะไรจากเรื่องนี้
ผมไม่ได้คิดว่ารัฐบาลใส่ใจเรื่องความปลอดภัยหรอก แต่พวกเขาออกแนว ตอบโต้เอาคืน
วิธีที่เป็นไปได้ตรงนี้คือซื้อตั๋วสายการบินใหญ่ ใส่สิ่งของต้องห้ามไว้ในกระเป๋าถือขึ้นเครื่อง แล้วใช้ SQL injection กับระบบ FlyCASS ของบุคคลที่สามเพื่อเพิ่มตัวเองเข้าไปในรายชื่อ Known Crew Member ของสายการบินขนาดเล็ก เพื่อข้ามการตรวจของ TSA
จากนั้นก็ขึ้นเครื่องบินลำใหญ่พร้อมของต้องห้าม นี่คือช่องโหว่ใช่ไหม?
ทุกวันนี้คิวตรวจของ TSA ส่วนใหญ่ไม่ต้องขอดูแม้แต่บัตรขึ้นเครื่องด้วยซ้ำ ดังนั้นในทางทฤษฎี คุณอาจถือระเบิดเข้าไปแล้วข้ามละครความปลอดภัยทั้งหมดนี้ได้