𝗖𝗼𝗻𝗰𝘂𝗿𝗿𝗲𝗻𝘁 𝗟𝗼𝗴𝗶𝗻 𝗦𝗲𝗰𝘂𝗿𝗶𝘁𝘆

การเข้าสู่ระบบได้ไม่จำกัดจำนวนครั้งอาจซ่อนข้อบกพร่องร้ายแรงในตรรกะทางธุรกิจ (Business Logic)

ผู้ใช้เข้าสู่ระบบผ่านแล็ปท็อป ไม่กี่วินาทีต่อมา บัญชีเดียวกันก็เข้าสู่ระบบผ่านเบราว์เซอร์อื่น จากนั้นก็ผ่านอุปกรณ์มือถือ และตามด้วย API client ทุกอย่างทำงานได้อย่างสมบูรณ์แบบ

สิ่งนี้ดูเหมือนจะไม่มีปัญหาเพราะแอปพลิเคชันจำนวนมากรองรับหลายอุปกรณ์ แต่คุณต้องตั้งคำถามว่า: ทุกแอปพลิเคชันควรอนุญาตให้มีเซสชัน (session) ได้ไม่จำกัดหรือไม่?

ในบางระบบ การมีหลายเซสชันถือเป็นฟีเจอร์ แต่ในบางระบบ มันคือข้อบกพร่องที่ผู้โจมตีใช้เพื่อซ่อนตัว นี่คือช่องโหว่ทางตรรกะทางธุรกิจ (Business Logic Vulnerability) โค้ดทำงานตามที่ออกแบบไว้ แต่ตัวการออกแบบเองนั้นอ่อนแอ

ความแตกต่าง: • บั๊กทั่วไป (Traditional bugs) อาศัยความผิดพลาดในการเขียนโค้ด • บั๊กทางตรรกะทางธุรกิจ (Business logic bugs) อาศัยการตัดสินใจในการออกแบบ

ลองนึกถึงบริการสตรีมมิ่งภาพยนตร์ หากการสมัครสมาชิกหนึ่งครั้งอนุญาตให้คนสิบคนดูพร้อมกันได้ ระบบการเข้าสู่ระบบก็ทำงานได้ปกติ แต่กฎทางธุรกิจนั้นล้มเหลว

สิ่งนี้ใช้ได้กับระบบธนาคาร, แผงควบคุมผู้ดูแลระบบ (admin panels) และผลิตภัณฑ์ SaaS

วิธีทดสอบเรื่องนี้:

แอปพลิเคชันที่มีความปลอดภัยสูงมักจะบังคับใช้กฎเหล่านี้:

หากผู้โจมตีขโมยข้อมูลประจำตัวไปได้ พวกเขาสามารถอยู่ในระบบได้ตลอดไปหากคุณอนุญาตให้มีเซสชันได้ไม่จำกัด พวกเขาจะยังคงใช้งานอยู่ได้ในขณะที่ผู้ใช้ตัวจริงก็ใช้งานอยู่เช่นกัน โดยที่ไม่มีใครสังเกตเห็นผู้บุกรุกเลย

บริบทคือทุกสิ่ง แอปที่ต้องการหลายเซสชัน:

แอปที่ต้องการการควบคุมที่เข้มงวด:

วิธีแก้ไข:

อย่ามองหาแค่บั๊กในโค้ดอย่าง SQL injection เท่านั้น แต่จงมองหาช่องว่างระหว่างสิ่งที่แอปของคุณทำ กับสิ่งที่ธุรกิจของคุณต้องการ

ตรวจสอบนโยบายเซสชันของคุณตั้งแต่วันนี้ ความเสี่ยงที่ใหญ่ที่สุดของคุณอาจไม่ใช่โค้ดที่พัง แต่อาจเป็นตรรกะที่พัง

Source: https://dev.to/arashad_dodhiya_0e4bdba5a/concurrent-login-security-how-to-check-whether-multiple-sessions-are-allowed-1839