ไฟล์การตั้งค่าของ Curl นั้นมีคุณสมบัติ Turing complete โดยบังเอิญ

มีการค้นพบว่าสามารถสร้างฟังก์ชันที่คำนวณได้ใดๆ ก็ได้โดยใช้โครงสร้างในไฟล์การกำหนดค่า Curl ปัญหานี้เกิดขึ้นเฉพาะใน Curl เวอร์ชัน 8.12–8.16 เท่านั้น และเกิดจากการใช้งาน Turing completeness โดยไม่ได้ตั้งใจ ซึ่งอนุญาตให้สร้างเครื่องจักร Turing โดยใช้ความสามารถในการดึงช่วงไบต์จากค่าตัวแปรและความลึกของการซ้อนกันแบบไม่จำกัดเมื่อรวมไฟล์การกำหนดค่าภายนอก

ตัวอย่างเช่น Curl ถูกใช้เพื่อจำลองเครื่องคำนวณแบบสองเคาน์เตอร์รีจิสเตอร์ (เครื่อง Minsky) สำหรับการบวกตัวเลข และใช้ในการเขียนโปรแกรม "99 Bottles of Beer" ซึ่งใช้ในการสอนเรื่องลูป ในการเรียกใช้โปรแกรมที่เขียนด้วยไฟล์การกำหนดค่า Curl เพียงแค่แตกไฟล์ซิปและเรียกใช้คำสั่ง "curl -q -s -K 99_bottles/main.conf"

เครื่องคำนวณรีจิสเตอร์จำลองโดยการแสดงค่าตัวนับเป็นสตริงที่มีอักขระ n x ตัว การดำเนินการเพิ่มและลดค่าใช้การต่อและการตัดสตริง (ไวยากรณ์ "[0-0]" เพื่อเก็บไบต์แรก และ "[1-]" เพื่อเก็บเนื้อหาทั้งหมด ยกเว้นไบต์แรก) และการเปลี่ยนสถานะถูกควบคุมโดยคำสั่ง "expand-config" ซึ่งจะโหลดไฟล์การกำหนดค่าถัดไปแบบไดนามิกโดยใช้ชื่อไฟล์เป็นป้ายกำกับการกระโดด การดำเนินการ INC(R) ในเครื่องคำนวณรีจิสเตอร์ถูกนำไปใช้เป็น 'expand-variable = "r={{r}}x"' ในไฟล์การกำหนดค่า Curl, DEC(R) เป็น 'expand-variable = "r[1-]={{r}}"' และ JMP(S) เป็น 'expand-config = "S.conf"' ตัวอย่างเช่น โค้ดสำหรับการคำนวณ 2 + 3:

ในทางปฏิบัติ ความสามารถในการคำนวณที่เกิดขึ้นจากไฟล์การกำหนดค่าถูกจำกัดด้วยขนาดของสแต็ก เนื่องจากแต่ละขั้นตอนของการทำงานของโปรแกรมจำเป็นต้องโหลดไฟล์การกำหนดค่าแบบซ้อนกันใหม่ หากใช้สแต็กขนาด 8 MB จะเกิดการโอเวอร์โฟลว์หลังจากประมาณ 922 ขั้นตอน ความสามารถยังได้รับผลกระทบจากข้อจำกัดเกี่ยวกับขนาดของตัวแปรที่ขยาย (พารามิเตอร์ MAX_EXPAND_CONTENT ถูกตั้งค่าไว้ที่ 10 MB) และการใช้หน่วยความจำสูงเนื่องจากการจัดเก็บตัวแปรเวอร์ชันเก่าทั้งหมด

แม้ว่าคุณลักษณะที่ระบุจะไม่ใช่ช่องโหว่ แต่ในเวอร์ชันตั้งแต่ curl 8.17 ขึ้นไป วิธีการดังกล่าวจะไม่สามารถใช้งานได้อีกต่อไป เนื่องจากมีการจำกัดความลึกของการซ้อนไฟล์การกำหนดค่าไว้ที่ 5 ระดับ เพื่อป้องกันการเรียกซ้ำไม่สิ้นสุด

ที่มา: opennet.ru

ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster