พบช่องโหว่ในไลบรารีเครือข่ายของ Rust and Go ป้องกันการตรวจสอบ IP

เมื่อเร็ว ๆ นี้ ข้อมูลช่องโหว่ถูกเปิดเผย ที่พบในห้องสมุดมาตรฐานของภาษาต่างๆ สนิมและไป, ซึ่งก็คือ ที่เกี่ยวข้องกับการจัดการที่อยู่ IP ที่ไม่ถูกต้อง ด้วยเลขฐานแปดในฟังก์ชันการวิเคราะห์ที่อยู่

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

ช่องโหว่ในสองภาษานี้ สตริงที่อยู่ IP มีการรับรู้ในข้อกำหนด Zero-based เนื่องจากคุณเป็น ในทางทฤษฎีควรตีความว่าเป็นเลขฐานแปด แต่ ปัญหาที่ทำให้เกิดความบกพร่องเหล่านี้คือห้องสมุดจำนวนมากไม่ได้คำนึงถึงสิ่งนี้และเพียงแค่ทิ้งศูนย์ดังนั้น พวกเขาลงเอยด้วยการรักษาค่าเป็นเลขฐานสิบ

ตัวอย่างเช่น เพื่อให้เข้าใจว่าที่อยู่ IP ถูกตีความในจุดบกพร่องเหล่านี้อย่างไร ตัวเลข 0177 ฐานแปดคือ 127 ในรูปแบบทศนิยม ซึ่งผู้โจมตีสามารถขอทรัพยากรที่ระบุค่า "0177.0.0.1" ซึ่งเนื่องจากไม่มีการใช้ เป็นฐานแปด สัญกรณ์ทศนิยมสำหรับสิ่งนี้คือ "127.0.0.1"

นั่นคือเหตุผล ในกรณีที่ใช้ห้องสมุดที่มีปัญหา แอปพลิเคชันจะไม่ตรวจพบการเกิดขึ้นของที่อยู่ 0177.0.0.1 ในซับเน็ต 127.0.0.1 แต่ในความเป็นจริง เมื่อส่งคำขอ คุณสามารถเรียกที่อยู่ "0177.0.0.1" ซึ่งเกิดจากการตีความผิด ฟังก์ชันเครือข่ายจะประมวลผลเป็น 127.0.0.1 ในทำนองเดียวกัน การเข้าถึงที่อยู่อินทราเน็ตสามารถถูกหลอกลวงและตรวจสอบโดยการระบุค่าต่างๆ ซึ่งผู้โจมตีจะประเมินเพื่อหาช่องโหว่ที่เป็นไปได้

ที่ด้านข้างของ สนิมพบปัญหาขึ้นกับไลบรารีมาตรฐาน "std :: net" และได้รับการจัดหมวดหมู่ไว้แล้วภายใต้ "CVE-2021-29922" มันอธิบายว่า parser ของที่อยู่ IP ของไลบรารีนี้ทิ้งศูนย์หน้าค่า ของที่อยู่ แต่ถ้าระบุไม่เกินสามหลักเท่านั้น ตัวอย่างเช่น "0177.0.0.1" จะถูกตีความว่าเป็นค่าที่ไม่ถูกต้องและจะส่งคืนผลลัพธ์ที่ไม่ถูกต้องในการตอบกลับ

การตรวจสอบอินพุตสตริงฐานแปดที่ไม่ถูกต้องในไลบรารี "net" มาตรฐาน rust-lang ช่วยให้ผู้โจมตีระยะไกลที่ไม่ผ่านการตรวจสอบสิทธิ์ทำการโจมตี SSRF, RFI และ LFI ที่ไม่แน่นอนในหลายโปรแกรมที่ขึ้นอยู่กับ rust-lang std :: net octets ของที่อยู่ IP จะถูกถอดทิ้งแทนที่จะถูกประเมินว่าเป็นที่อยู่ IP ที่ถูกต้อง

มันยังกล่าวอีกว่าแอพพลิเคชั่นที่ใช้ std :: net :: IpAddr library เมื่อแยกวิเคราะห์ที่อยู่ที่ระบุ โดยผู้ใช้ อาจไวต่อการโจมตี SSRF (การปลอมแปลงคำขอฝั่งเซิร์ฟเวอร์) RFI (การรวมไฟล์ระยะไกล) และ ซื่อบื้อ (รวมไฟล์ในเครื่อง) ในทำนองเดียวกัน ผู้โจมตีสามารถป้อน 127.0.026.1 ซึ่งจริงๆ แล้วคือ 127.0.22

ตัวอย่างเช่น ผู้โจมตีที่ส่งที่อยู่ IP ไปยังเว็บแอปพลิเคชันที่ใช้ std :: net :: IpAddr อาจทำให้เกิด SSRF ได้โดยการป้อนข้อมูลอินพุตฐานแปด ผู้โจมตีสามารถส่งที่อยู่ IP ที่สามารถใช้ประโยชน์ได้หาก octet มี 3 หลักโดยมี octet 08 ที่ใช้ประโยชน์ได้ต่ำสุดซึ่งนำไปสู่การปฏิเสธบริการและ octet 099 ที่ใช้ประโยชน์ได้สูงสุดซึ่งนำไปสู่การปฏิเสธบริการ 

หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับช่องโหว่นี้ ใน Rust คุณสามารถตรวจสอบรายละเอียด ในลิงค์ต่อไปนี้. นอกจากนี้ยังกล่าวถึงช่องโหว่ที่ได้รับการแก้ไขในสาขา Rust 1.53.0

ทันทีที่ ต่อปัญหาที่ส่งผลกระทบ ไปที่ Go มีการกล่าวถึงว่าอยู่ภายใต้ไลบรารีมาตรฐาน «net» และอยู่ภายใต้ CVE-2021-29923 แล้ว บรรยายไว้ว่า อนุญาตให้ผู้โจมตีระยะไกลที่ไม่ได้ตรวจสอบสิทธิ์ทำการโจมตี SSRF, RFI และ LFI ไม่แน่นอนในหลายโปรแกรมที่ขึ้นอยู่กับฟังก์ชัน net.ParseCIDR ในตัวของ golang CIDR IP octets แต่ละรายการจะถูกถอดออกแทนที่จะประเมินว่าเป็น IP octets ที่ถูกต้อง

ตัวอย่างเช่น ผู้โจมตีอาจส่งผ่านค่า 00000177.0.0.1 ซึ่งเมื่อตรวจสอบในฟังก์ชัน net.ParseCIDR จะถูกแยกวิเคราะห์เป็น 177.0.0.1/24 ไม่ใช่ 127.0.0.1/24 ปัญหายังปรากฏบนแพลตฟอร์ม Kubernetes ช่องโหว่ได้รับการแก้ไขใน Go เวอร์ชัน 1.16.3 และเบต้าเวอร์ชัน 1.17

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับมัน เกี่ยวกับช่องโหว่นี้ ในลิงค์ต่อไปนี้.


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา