คำตอบสั้น ๆ :ในหลาย ๆ สถานการณ์กลุ่มเสี่ยงต่อการถูกโจมตีแบบนี้ (เมื่อวางข้อความในโหมดแทรก)
พิสูจน์แนวคิด
การใช้บทความที่เชื่อมโยงเป็นจุดเริ่มต้นฉันสามารถสร้างเว็บเพจได้อย่างรวดเร็วด้วยรหัสต่อไปนี้โดยใช้องค์ประกอบการขยาย HTML และ CSS เพื่อซ่อนส่วนตรงกลางของข้อความเพื่อให้ls -la
มองเห็นได้เฉพาะผู้ดูทั่วไป แหล่งที่มา) หมายเหตุ: ^[
คืออักขระ Escape และ^M
เป็นอักขระอักขระปัดแคร่ Stack แลกเปลี่ยน sanitises เข้าของผู้ใช้และป้องกันการหลบซ่อนตัวของเนื้อหาการใช้ CSS ดังนั้นฉันได้อัปโหลดหลักฐานของแนวคิด
ls ^[:echom "This could be a silent command."^Mi -la
หากคุณอยู่ในโหมดแทรกและวางข้อความนี้ในเทอร์มินัล Vim (พร้อมตัวระบุบางตัวดูด้านล่าง) คุณจะเห็นls -la
แต่ถ้าคุณเรียกใช้:messages
คำสั่งคุณสามารถเห็นผลลัพธ์ของคำสั่ง Vim ที่ซ่อนอยู่
ป้องกัน
เพื่อป้องกันการโจมตีครั้งนี้จะเป็นการดีที่สุดที่จะอยู่ในโหมดปกติและวางการใช้หรือ"*p
"+p
ในโหมดปกติเมื่อพีข้อความ Utting จากการลงทะเบียนเป็นข้อความเต็ม (รวมส่วนที่ซ่อนอยู่) จะถูกวาง สิ่งนี้ไม่ได้เกิดขึ้นในโหมดแทรก (แม้ว่า:set paste
จะถูกตั้งค่าไว้)
โหมดวางที่ถูกยึด
Vim เวอร์ชันล่าสุดสนับสนุนโหมดการวางที่อยู่ในวงเล็บซึ่งช่วยลดการโจมตี copy-paste ประเภทนี้ Sato Katsura ชี้แจงว่า“ การสนับสนุนสำหรับแปะวงเล็บปรากฏขึ้นใน Vim 8.0.210 และได้รับการแก้ไขล่าสุดในเวอร์ชัน 8.0.303 (เปิดตัวเมื่อวันที่ 2 กุมภาพันธ์ 2017)”
หมายเหตุ: ตามที่ผมเข้าใจมันรุ่นที่เป็นกลุ่มที่มีการสนับสนุนสำหรับโหมดวางวงเล็บควรปกป้องคุณเมื่อวางใช้Ctrl- Shift- V(ส่วนใหญ่สภาพแวดล้อมเดสก์ทอป GNU / Linux) Ctrl- V(MS Windows) Command- V(Mac OS X) Shift- Insertหรือเมาส์ กลางคลิก
การทดสอบ
ฉันทำการทดสอบบางอย่างจากเครื่องเดสก์ท็อป Lubuntu 16.04 ในภายหลัง แต่ผลลัพธ์ของฉันสับสนและสรุปไม่ได้ ฉันได้ตระหนักว่านี่เป็นเพราะฉันใช้หน้าจอ GNUเสมอแต่ปรากฎว่าตัวกรองหน้าจอลำดับการหลบหนีที่ใช้ในการเปิดใช้งาน / ปิดใช้งานโหมดวางแบบวงเล็บ (มีแพทช์แต่ดูเหมือนว่ามันถูกส่งในเวลาที่ โครงการไม่ได้รับการบำรุงรักษาอย่างแข็งขัน) ในการทดสอบของฉันหลักฐานของแนวคิดทำงานได้เสมอเมื่อรัน Vim ผ่านหน้าจอ GNU โดยไม่คำนึงว่า Vim หรือเทอร์มินัลอีมูเลเตอร์สนับสนุนโหมดวางแบบวงเล็บหรือไม่
การทดสอบเพิ่มเติมจะมีประโยชน์ แต่จนถึงตอนนี้ฉันพบว่าการสนับสนุนโหมดการวางแบบวงเล็บโดยตัวจำลองเทอร์มินัลบล็อก Proof of Concept ของฉัน - ตราบใดที่หน้าจอ GNU ไม่ได้ปิดกั้นลำดับการหลบหนีที่เกี่ยวข้อง อย่างไรก็ตามผู้ใช้nneonneo รายงานว่าการสร้างลำดับการหลีกเลี่ยงอย่างระมัดระวังอาจถูกนำมาใช้เพื่อออกจากโหมด Paste
โปรดทราบว่าแม้จะมี Vim รุ่นล่าสุดแล้ว Proof of Concept ก็ยังใช้งานได้หากผู้ใช้วางจากการ*
ลงทะเบียนขณะที่อยู่ในโหมดแทรกโดยพิมพ์ ( Ctrl- R*) สิ่งนี้ยังใช้กับ GVim ซึ่งสามารถแยกความแตกต่างระหว่างอินพุตที่พิมพ์และวาง ในกรณีนี้ Vim ปล่อยให้ผู้ใช้เชื่อถือเนื้อหาของเนื้อหาลงทะเบียน ดังนั้นอย่าใช้วิธีนี้เมื่อวางจากแหล่งที่ไม่น่าเชื่อถือ (เป็นสิ่งที่ฉันมักจะทำ - แต่ตอนนี้ฉันเริ่มฝึกตัวเองไม่ได้แล้ว)
ลิงก์ที่เกี่ยวข้อง
ข้อสรุป
ใช้โหมดปกติเมื่อวางข้อความ (จาก+
หรือ*
ลงทะเบียน)
... หรือใช้ Emacs ฉันได้ยินมาว่ามันเป็นระบบปฏิบัติการที่ดี :)