ช่องโหว่ที่เพิ่งค้นพบเมื่อเร็วๆ นี้ที่เรียกว่า SMTP smuggling ได้นำความสนใจกลับมาสู่ความเสี่ยงด้านความปลอดภัยที่มีมายาวนานของ email protocol pipelining วิธีการโจมตีนี้ใช้ประโยชน์จากข้อบกพร่องพื้นฐานในการที่เซิร์ฟเวอร์อีเมลจัดการกับคำสั่งหลายคำสั่งที่ส่งมาอย่างรวดเร็วต่อเนื่องกัน ซึ่งอาจทำให้ผู้โจมตีสามารถปลอมแปลงที่อยู่อีเมลและหลีกเลี่ยงมาตรการรักษาความปลอดภัยได้
ช่องโหว่นี้สืบย้อนไปถึงการตัดสินใจในการพัฒนาที่ทำขึ้นเมื่อหลายทศวรรษที่แล้วในเซิร์ฟเวอร์อีเมลยอดนิยมอย่าง Sendmail , Postfix และ Exim เซิร์ฟเวอร์เหล่านี้อนุญาตให้ใช้การจบบรรทัดที่ไม่เป็นมาตรฐานเพื่อรักษาความเข้ากันได้ ซึ่งสร้างช่องทางที่ผู้โจมตีสามารถใช้ประโยชน์ได้ในปัจจุบันผ่านเทคนิค pipelining ที่ซับซ้อน
เซิร์ฟเวอร์อีเมลที่ได้รับผลกระทบ:
- Sendmail (แหล่งที่มาของช่องโหว่เดิม)
- Postfix
- Exim
- เซิร์ฟเวอร์อื่นๆ ที่ใช้พฤติกรรมที่เข้ากันได้กับ Sendmail
สาเหตุหลักของปัญหา Pipelining
ปัญหาหลักเกิดจากวิธีที่เซิร์ฟเวอร์อีเมลในยุคแรกถูกออกแบบให้จัดการกับการเชื่อมต่อเครือข่าย การพัฒนาหลายรูปแบบอาศัยเครื่องจักรสถานะแบบง่ายที่สมมติว่าคำสั่งจะมาทีละคำสั่ง ตามรูปแบบการร้องขอ-ตอบกลับแบบดั้งเดิม เมื่อคำสั่งหลายคำสั่งถูกส่งมาอย่างรวดเร็วผ่าน pipelining เซิร์ฟเวอร์เหล่านี้อาจสับสนเกี่ยวกับการตอบกลับใดที่เป็นของคำสั่งใด
ปัญหาจะกลายเป็นอันตรายอย่างยิ่งเมื่อเซิร์ฟเวอร์ใช้การติดตามสถานะแบบโดยนัยแทนที่จะเป็นการจัดการสถานะการเชื่อมต่อแบบชัดเจน หากเซิร์ฟเวอร์สมมติว่าเหตุการณ์เครือข่ายแต่ละครั้งสอดคล้องกับคำสั่งเดียว มันอาจประมวลผลคำสั่งไม่เป็นลำดับหรือเชื่อมโยงการตอบกลับกับคำขอที่ผิด ซึ่งอาจนำไปสู่การยอมรับที่อยู่อีเมลที่ไม่ถูกต้องหรือปฏิเสธที่อยู่ที่ถูกต้อง
State machine: แนวคิดการเขียนโปรแกรมที่ระบบสามารถอยู่ในหนึ่งในหลายสถานะที่กำหนดไว้และเปลี่ยนผ่านระหว่างสถานะเหล่านั้นตามข้อมูลนำเข้าหรือเหตุการณ์
ความท้าทายในการจัดการบัฟเฟอร์
ปัจจัยสำคัญอีกประการหนึ่งที่ส่งผลต่อช่องโหว่เหล่านี้เกี่ยวข้องกับการจัดการ read buffering ที่ไม่เพียงพอในการพัฒนาเซิร์ฟเวอร์ยุคแรก เมื่อเซิร์ฟเวอร์อ่านข้อมูลจากการเชื่อมต่อเครือข่ายโดยไม่มีการจัดการบัฟเฟอร์ที่เหมาะสม พวกมันอาจประมวลผลเพียงบางส่วนของคำสั่งหรือผสมคำสั่งหลายคำสั่งเข้าด้วยกันอย่างไม่ถูกต้อง
ฟังก์ชันที่อ่านคำสั่ง SMTP จะอ่านสิ่งที่ได้รับจาก kernel เท่านั้น หากการเชื่อมต่อเป็นแบบ half-duplex ตามที่คาดหวัง (ตามรูปแบบหนึ่งคำสั่ง หนึ่งการตอบกลับ) จะมีเพียงคำสั่ง SMTP เดียวในบัฟเฟอร์หลังจากการอ่านเสร็จสิ้น
ปัญหาการจัดการบัฟเฟอร์นี้กลายเป็นสิ่งสำคัญเมื่อรวมกับแนวปฏิบัติเก่าแก่อย่างการใช้การดำเนินการ fork/exec กับ standard input/output streams ข้อมูลอาจสูญหายหรือเสียหายเมื่อกระบวนการส่งต่อการควบคุมไปยังโปรแกรมช่วย ทำให้เกิดพฤติกรรมของเซิร์ฟเวอร์ที่คาดเดาไม่ได้
รายละเอียดช่องโหว่สำคัญ:
- วิธีการโจมตี: SMTP Smuggling
- สาเหตุหลัก: การใช้ LF line endings ที่ไม่เป็นมาตรฐานแทนที่จะเป็น CR+LF ตามมาตรฐาน
- ไทม์ไลน์: ช่องโหว่นี้มีอยู่มานานหลายทศวรรษก่อนที่จะถูกค้นพบ
- ผลกระทบ: มีศักยภาพในการปลอมแปลงอีเมลและหลีกเลี่ยงระบบความปลอดภัย
โซลูชันสมัยใหม่และมาตรการป้องกัน
แนวทางการเขียนโปรแกรมร่วมสมัยเสนอโซลูชันที่ดีกว่าสำหรับความท้าทายของ pipelining เหล่านี้ โมเดล virtual threading ที่การเชื่อมต่อแต่ละครั้งได้รับ thread เฉพาะของตัวเอง สามารถขจัดสภาวะการแข่งขันหลายอย่างที่ทำให้เกิดการเสียหายของเครื่องจักรสถานะ Thread เหล่านี้สามารถรอการดำเนินการอย่าง DNS queries ได้อย่างปลอดภัยโดยไม่ส่งผลกระทบต่อการเชื่อมต่ออื่น
ระบบการจัดการสถานะขั้นสูงยังให้กลไกในการจัดคิวและเลื่อนเหตุการณ์จนกว่าเซิร์ฟเวอร์จะถึงสถานะที่เหมาะสมในการจัดการ ซึ่งป้องกันไม่ให้คำสั่งถูกประมวลผลไม่เป็นลำดับ แม้ว่าจะมาถึงอย่างรวดเร็วต่อเนื่องกัน
การค้นพบ SMTP smuggling เป็นเครื่องเตือนใจว่าช่องโหว่ระดับโปรโตคอลสามารถคงอยู่ได้หลายทศวรรษก่อนที่จะถูกค้นพบและถูกใช้ประโยชน์ ผู้ดูแลระบบอีเมลควรตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ของพวกเขาได้รับการอัปเดตด้วยแพตช์ความปลอดภัยล่าสุดและพิจารณาปิดการใช้งานการสนับสนุน pipelining หากไม่จำเป็นสำหรับการดำเนินงานของพวกเขา
อ้างอิง: pipelined state machine corruption