ผู้ใช้ลินุกซ์คงคุ้นเคยกับข้อความอบรมเมื่อเรียกใช้โปรแกรม sudo
ครั้งแรกกันดี (ความสามารถนี้ไม่ได้ถูกเปิดไว้แต่ต้นใน Ubuntu ครับ)
We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility.
ข้อความนี้จะปรากฏให้เห็นเพียงแค่ครั้งแรกเท่านั้น โดยระบบจะจดบันทึกเวลาที่เราได้เรียกโปรแกรม sudo
ลงในไฟล์ timestamp และจะไม่แสดงข้อความอบรมนี้อีกถ้าพบว่าไฟล์นี้มีอยู่
นอกจากนี้ โปรแกรม sudo
ยังใช้งานไฟล์ timestamp เพื่ออำนวยความสะดวกอีกอย่าง คือยอมให้ผู้ใช้พิมพ์รหัสผ่านเพียงแค่ครั้งเดียว ถ้าหากการเรียกใช้โปรแกรมครั้งถัดๆ ไปนั้นไม่นานจากครั้งก่อนมากนัก (ค่ามาตรฐานที่ 5 นาที)
อย่างไรก็ตาม ผู้ใช้ที่ต้องการสั่งหยุดการใช้ sudo
(บังคับให้ถามรหัสผ่านใหม่) ก็สามารถทำได้โดยสั่ง sudo -k
โดยที่ไฟล์ timestamp จะถูกรีเซ็ตค่ากลับไปที่ epoch (01/01/1970 01:00:00
) เพื่อป้องกันไม่ให้มีการแสดงข้อความอบรมอีกครั้งเมื่อเรียกใช้ sudo
ครั้งถัดไป
ช่องโหว่นี้เกิดขึ้นได้โดยอาศัยการรีเซ็ตไฟล์ timestamp (ด้วย sudo -k
) บวกกับพฤติกรรมของโปรแกรมที่จะเอาเวลาปัจจุบันไปลบเวลาจากไฟล์ timestamp แล้วดูว่าน้อยกว่า 5 นาทีหรือไม่ เพื่อที่จะได้ไม่ต้องถามรหัสผ่านซ้ำ
ผู้โจมตีระบบที่สามารถเข้าถึงเครื่องคอมพิวเตอร์ของเหยื่อ สามารถใช้เทคนิคนี้ข้ามการใส่รหัสผ่านเพื่อเรียกใช้โปรแกรม sudo
ถ้าหากว่าเขาสามารถเปลี่ยนเวลาของระบบกลับไปยัง epoch ได้ (การเปลี่ยนเวลาตามปรกติต้องใช้สิทธิ์ root ยกเว้นว่าจะทำผ่าน GUI ในบางระบบปฎิบัติการ หรือรีบูทเครื่องที่แบตเตอรี่ไบออสหมด)
สำหรับ sudo
ที่ได้รับผลกระทบได้แก่เวอร์ชัน 1.6.0 ถึง 1.7.10p6 และเวอร์ชัน 1.8.0 ถึง 1.8.6p6 ซึ่งจะได้รับการแก้ไขใน 1.7.10p7 และ 1.8.6p7 ส่วน workaround ตอนนี้คือให้สั่ง sudo -K
เพื่อลบไฟล์ timestamp ทิ้งครับ
ที่มา: Sudo ผ่าน The Hacker News