
ที่มาภาพ: The Register
พบบั๊ก Y2K ใหม่ในระบบ BSD 2.11 ของอีมูเลเตอร์ PDP‑11/70
⚡ สรุป 30 วิ
นักพัฒนาชาวดัตช์พบข้อบกพร่อง Y2K ใน NTP daemon ของ BSD 2.11 ที่ทำงานบนอีมูเลเตอร์ PDP‑11/70 ทำให้แสดงปีผิดเป็น 19126 ระบบแก้ไขโดยอัปเดตโค้ดบน GitHub…
การค้นพบข้อบกพร่อง Y2K bug ใหม่ในระบบปฏิบัติการ BSD รุ่นเก่า 2.11 ทำให้เห็นว่าซอฟต์แวร์โบราณที่ยังคงใช้งานอยู่บางส่วนอาจยังมีช่องโหว่ที่ไม่ได้รับการแก้ไข แม้ว่าเหตุการณ์ Y2K เมื่อปี 1999 จะผ่านพ้นไปแล้ว การค้นพบนี้มาจากนักพัฒนาชาวดัตช์ที่กำลังทำงานกับอีมูเลเตอร์ของเครื่องคอมพิวเตอร์ขนาดเล็ก PDP‑11/70 ซึ่งอาจทำให้ผู้ที่สนใจการจำลองระบบเก่าและการบันทึกเวลาในคอมพิวเตอร์ต้องให้ความระมัดระวังเป็นพิเศษ
Overview
ข้อบกพร่องดังกล่าวถูกพบโดย Folkert van Heusden ขณะพัฒนาอีมูเลเตอร์สำหรับซีรีส์ Programmed Data Processor (PDP) ซึ่งผลิตตั้งแต่ทศวรรษ 1950‑1990 ระบบที่เกี่ยวข้องคือ PDP‑11/70 ที่เปิดให้บริการตั้งแต่ปี 1975 การตรวจสอบโค้ดของ Network Time Protocol daemon ใน BSD 2.11 ทำให้เขาเห็นตัวเลขปีที่ผิดปกติเป็น 19126** แทนปีปัจจุบัน
แม้ว่าเครื่อง PDP‑11/70 จะเป็นอุปกรณ์ที่ถูกยกเลิกการผลิตมานานแล้ว แต่โค้ดของ NTP daemon ยังคงทำงานอยู่ในอีมูเลเตอร์ และเมื่ออุปกรณ์ Precision Standard Time, Inc. (PSTI) รับสัญญาณเวลาจากสถานีวิทยุคลื่นสั้นของ US National Institute of Standards and Technology (NIST) ระบบก็จะตรวจจับความแตกต่างของเวลาอย่างผิดพลาด
Technical Details
ข้อบกพร่องเกิดจากการคำนวณปีในฟังก์ชันของ NTP daemon ที่ใช้ตัวแปรสองหลักในการเก็บค่า ปี 1999 จึงกลายเป็น 1900‑1999 แล้วต่อด้วยการเพิ่มศูนย์สองหลัก ทำให้เมื่อปี 2000 ถูกประมวลผล ระบบอาจตีความเป็น 19126 ซึ่งเทียบเท่ากับการเพิ่มประมาณ 17,000 ปี ทำให้ระบบแจ้งว่า “offset is excessive”
ในกรณีที่อุปกรณ์ PSTI ส่งสัญญาณเวลาที่ถูกต้อง ระบบอีมูเลเตอร์จะตรวจจับค่าต่างนี้และหยุดทำงานโดยแสดงข้อผิดพลาดระยะเวลาที่แตกต่างกันหลายพันปี แม้ว่าจะต้องตั้งค่าอีมูเลเตอร์และอุปกรณ์ PSTI ให้ทำงานร่วมกันอย่างละเอียดก็ตาม
Exploit Conditions
การทำให้ข้อบกพร่องนี้แสดงผลได้ต้องอาศัยหลายขั้นตอนที่ซับซ้อน:
- ต้องมีอีมูเลเตอร์ของ PDP‑11/70 ที่รัน BSD 2.11 อย่างสมบูรณ์
- จำเป็นต้องจำลองอุปกรณ์ PSTI ของ Traconex (ผู้ผลิตอุปกรณ์ที่หยุดทำการแล้ว) เพื่อรับสัญญาณเวลาจาก NIST
- ผู้โจมตีต้องทำให้สัญญาณเวลาที่ได้รับส่งค่า “19126” แทนปีปัจจุบัน ซึ่งต้องแก้ไขหรือดัดแปลงซอฟต์แวร์ของอุปกรณ์ PSTI
ด้วยเงื่อนไขที่ค่อนข้างจำกัดและอุปกรณ์ที่ล้าสมัย การใช้ช่องโหว่นี้เพื่อทำการโจมตีจริงจึงมีโอกาสน้อยมาก
Fix & Availability
Van Heusden ได้อัปเดตโค้ดของ NTP daemon เพื่อแก้ไขการคำนวณปีและปรับให้รองรับปีที่มากกว่า 1999 อย่างถูกต้อง เขาได้ปล่อยโค้ดแก้ไขพร้อมอีมูเลเตอร์บน GitHub ให้ผู้สนใจสามารถดาวน์โหลดและคอมไพล์ได้โดยตรง
อีมูเลเตอร์ที่แก้ไขแล้วสามารถทำงานบนฮาร์ดแวร์สมัยใหม่เช่น Raspberry Pi Pico ได้ เนื่องจากสเปคของ PDP‑11/70 เพียง 5 MHz และต้องการหน่วยความจำหลัก 4 MB ทำให้การจำลองไม่ต้องใช้ทรัพยากรสูงและเหมาะกับผู้ที่ต้องการทดลองระบบโบราณ
Implications
แม้ว่าเหตุการณ์ Y2K bug ครั้งแรกจะถูกแก้ไขโดยการอัปเดตซอฟต์แวร์ทั่วโลก แต่การค้นพบข้อบกพร่องนี้แสดงให้เห็นว่าซอฟต์แวร์เก่า ๆ ที่ยังคงอยู่ในคลังโค้ดหรือถูกนำมาอีมูเลตอาจยังคงมีช่องโหว่ที่ไม่ได้รับการตรวจสอบอย่างทั่วถึง การตรวจสอบซอร์สโค้ดเก่าอย่างต่อเนื่องจึงเป็นสิ่งจำเป็นเพื่อป้องกันความเสี่ยงที่อาจเกิดขึ้นในอนาคต
สำหรับนักพัฒนาและผู้วิจัยด้านความปลอดภัย การมีตัวอย่างของข้อบกพร่องที่อายุหลายทศวรรษและยังคงสามารถทำงานได้แม้ในสภาพแวดล้อมจำลอง ช่วยให้เข้าใจกลไกของข้อบกพร่องในระดับลึกและอาจนำไปสู่การพัฒนาวิธีการสแกนหรืออัตโนมัติในการตรวจหา Y2K‑style bugs ที่อาจซ่อนอยู่ในโค้ดเก่า
Summary
การค้นพบ Y2K bug ใหม่นี้ใน BSD 2.11 ของอีมูเลเตอร์ PDP‑11/70 แสดงให้เห็นว่าซอฟต์แวร์โบราณยังคงมีช่องโหว่ที่อาจส่งผลต่อระบบแม้ในยุคปัจจุบัน การแก้ไขและการเผยแพร่โค้ดบน GitHub ช่วยลดความเสี่ยงและเปิดโอกาสให้ชุมชนตรวจสอบต่อไป.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- The Y2K bug is back! Danish dev digs up untimely flaw in old BSD build
- ผู้เขียน
- Unknown
- แหล่ง
- The Register
- วันที่เผยแพร่
- 15 มิถุนายน 2569 เวลา 23:30



