ค้นหาเว็บไซต์

วิธีแก้ไขช่องโหว่ด้านความปลอดภัย Django 10 อันดับแรก


เฟรมเวิร์ก Python ระดับสูงยอดนิยม Django ได้รับการยกย่องอย่างกว้างขวางในด้านความสะดวกในการใช้งานและการออกแบบที่ใช้งานได้จริง แต่เช่นเดียวกับซอฟต์แวร์ทั้งหมดก็มีความอ่อนไหวต่อช่องโหว่ที่สําคัญของตัวเอง สร้างขึ้นด้วย Python อย่างสมบูรณ์เฟรมเวิร์ก MVC มีชุมชนขนาดใหญ่และสามารถขยายได้ด้วยปลั๊กอินแอปสําหรับฟังก์ชันเพิ่มเติม อย่างไรก็ตาม Ubiquity มีราคาในกรณีนี้ ความนิยมแบบโอเพ่นซอร์สของ Django หมายความว่าเวกเตอร์การโจมตีเริ่มต้นเป็นที่รู้จักกันอย่างแพร่หลายเช่นกัน

เลเยอร์แอปพลิเคชันตกเป็นเป้าหมายของแฮกเกอร์มากขึ้นสําหรับการเจาะ และการเรียกใช้ Python แบบฟูลสแตกนั้นมีช่องโหว่ไม่มาก/น้อยไปกว่าสแต็กแอปพลิเคชันอื่นๆ ในความเป็นจริง BitBucket , dpaste และ Mozilla Support ล้วนใช้ Python/Django สําหรับข้อเสนอเว็บที่สําคัญต่อภารกิจ ดังนั้นไม่ต้องกลัว - การจัดการช่องโหว่ที่มีประสิทธิภาพและการมองเห็นช่องว่างด้านความปลอดภัยของ Django ที่มีอยู่สามารถช่วยเสริมความแข็งแกร่งให้กับเว็บแอปที่ใช้ Django ของคุณจากการโจมตีได้

ตรวจสอบบทความของเรา Full Stack Blues เพื่อเรียนรู้เกี่ยวกับช่องโหว่ในสแต็กแอปพลิเคชันอื่นๆ

ช่องโหว่ 10 อันดับแรกของ Django

10. การแก้ไขเซสชัน (CVE-2011-4136)

เวอร์ชัน 1.2.7 และ 1.3.x ก่อน 1.3.1

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

9. การจี้เซสชัน (CVE-2014-0482)

เวอร์ชัน 1.4.14, 1.5.x ก่อน 1.5.9, 1.6.x ก่อน 1.6.6 และ 1.7 ก่อนผู้สมัครรุ่น 3

การจี้เซสชันเกี่ยวข้องกับผู้โจมตีที่เข้าถึงระบบโดยไม่ได้รับอนุญาตโดยใช้ข้อมูลเซสชันของผู้ใช้รายอื่น ในกรณีนี้ เมื่อใช้ contrib.auth.backends.RemoteUserBackend ผู้ใช้ที่ตรวจสอบสิทธิ์จากระยะไกลสามารถจี้เซสชันเว็บผ่านเวกเตอร์ที่เกี่ยวข้องกับส่วนหัว REMOTE_USER

8. แคชเป็นพิษ (CVE-2014-1418)

เวอร์ชัน 1.4 ก่อน 1.4.13, 1.5 ก่อน 1.5.8, 1.6 ก่อน 1.6.5 และ 1.7 ก่อน 1.7b4

พิษของแคชเกิดขึ้นเมื่อข้อมูลที่ไม่ถูกต้องถูกแทรกลงในแคชของตัวแก้ไข DNS ทําให้เนมเซิร์ฟเวอร์ให้ที่อยู่ IP หรือปลายทางไม่ถูกต้อง Django เวอร์ชันเหล่านี้ไม่ได้รวม:

  1. Vary: คุกกี้
  2. ส่วนหัว Cache-Control ในการตอบสนอง

สิ่งนี้สามารถอนุญาตให้ผู้โจมตีระยะไกลได้รับข้อมูลที่ละเอียดอ่อนหรือวางยาพิษแคชผ่านคําขอจากเบราว์เซอร์บางตัว

7. การสร้าง URL โดยอําเภอใจ (CVE-2012-4520)

เวอร์ชัน 1.3.x ก่อน 1.3.4 และ 1.4.x ก่อน 1.4.2

ในเวอร์ชันเหล่านี้ฟังก์ชัน django.http.HttpRequest.get_host ช่วยให้ผู้โจมตีระยะไกลสามารถสร้างและแสดง URL โดยพลการผ่านชื่อผู้ใช้และรหัสผ่านที่ออกแบบมาเพื่อส่วนหัวของโฮสต์

6. CSRF: คําขอปลอมแปลงที่ไม่ได้รับการรับรองความถูกต้อง (CVE-2011-4140) '

เวอร์ชันผ่าน 1.2.7 และ 1.3.x ถึง 1.3.1

CSRF ย่อมาจาก Cross Site Request Forgery ซึ่งเป็นการโจมตีที่ใช้เว็บเบราว์เซอร์ของผู้ใช้เพื่อดําเนินการที่ไม่พึงประสงค์บนเว็บไซต์อื่นที่ผู้ใช้ลงชื่อเข้าใช้อยู่ในปัจจุบัน กลไกการป้องกัน CSRF ใน Django เวอร์ชันเหล่านี้ไม่สามารถจัดการการกําหนดค่าเว็บเซิร์ฟเวอร์ที่รองรับส่วนหัวของโฮสต์ HTTP โดยพลการได้อย่างถูกต้องทําให้ผู้โจมตีระยะไกลสามารถทริกเกอร์คําขอปลอมแปลงที่ไม่ได้รับการรับรองความถูกต้องผ่านเวกเตอร์ที่เกี่ยวข้องกับระเบียน DNS CNAME และหน้าเว็บที่มีรหัส JavaScript

5. CSRF ผ่านคําขอ AJAX ปลอมแปลง (CVE-2011-0696)

เวอร์ชัน 1.1.x ก่อน 1.1.4 และ 1.2.x ก่อน 1.2.5

Django เวอร์ชันเหล่านี้ไม่ได้ตรวจสอบความถูกต้องของคําขอ HTTP ที่มีส่วนหัว X-Requested-With อย่างถูกต้อง ทําให้ผู้โจมตีระยะไกลสามารถดําเนินการโจมตีการปลอมแปลงคําขอข้ามไซต์ (CSRF) ผ่านคําขอ AJAX ปลอมแปลงที่ใช้ประโยชน์จาก "การรวมกันของปลั๊กอินเบราว์เซอร์และการเปลี่ยนเส้นทาง" ซึ่งเป็นปัญหาที่เกี่ยวข้องกับ CVE-2011-0447

4. การสํารวจไดเรกทอรี (CVE-2011-0698)

เวอร์ชัน 1.1.x ก่อน 1.1.4 และ 1.2.x ก่อน 1.2.5 บน Windows

ใน Django เวอร์ชันเหล่านี้ ผู้โจมตีระยะไกลสามารถอ่านหรือเรียกใช้ไฟล์ผ่านอักขระ/(เครื่องหมายทับ) ในคีย์ในคุกกี้เซสชัน ซึ่งเกี่ยวข้องกับการเล่นซ้ําเซสชัน

3. DoS: ผ่านเวกเตอร์ที่ไม่ระบุ (CVE-2015-5145)

เวอร์ชัน 1.8.x ก่อน 1.8.3

DoS ย่อมาจาก Denial of Service และเกิดขึ้นเมื่อผู้โจมตีทําให้เครือข่าย/เว็บไซต์ล่มโดยท่วมด้วยแพ็กเก็ตข้อมูล ผู้ตรวจสอบความถูกต้อง URLValidator ใน Django เวอร์ชันเหล่านี้อนุญาตให้ผู้โจมตีระยะไกลทําให้เกิดการปฏิเสธบริการ (การใช้ CPU) ผ่านเวกเตอร์ที่ไม่ระบุ

2. DoS : ผ่านคําขอหลายรายการด้วยคีย์เซสชันที่ไม่ซ้ํากัน (CVE-2015-5143)

เวอร์ชันก่อน 1.4.21, 1.5.x ถึง 1.6.x, 1.7.x ก่อน 1.7.9 และ 1.8.x ก่อน 1.8.3

แบ็กเอนด์เซสชันใน Django ช่วยให้ผู้โจมตีระยะไกลสามารถทําให้เกิดการปฏิเสธบริการ (การใช้ที่เก็บเซสชัน) ผ่านคําขอหลายรายการด้วยคีย์เซสชันที่ไม่ซ้ํากัน

1. ช่องโหว่การแปลงประเภท (CVE-2014-0474)

เวอร์ชันก่อน 1.4.11, 1.5.x ก่อน 1.5.6, 1.6.x ก่อน 1.6.3 และ 1.7.x ก่อน 1.7 beta

ใน Django เวอร์ชันเหล่านี้คลาสฟิลด์ต่อไปนี้ไม่ได้ทําการแปลงประเภทอย่างถูกต้อง

  • FilePath ฟิลด์
  • ทั่วไป IPAddressField
  • ฟิลด์ที่อยู่ IP

สิ่งนี้ทําให้ผู้โจมตีระยะไกลเข้าถึงผลกระทบที่ไม่ระบุและเวกเตอร์ที่เกี่ยวข้องกับ MySQL

การแก้ไข

>

ในการแก้ไขช่องโหว่ข้างต้น คุณจะต้องอัปเดตเฟรมเวิร์ก Django เวอร์ชันปัจจุบันที่ใช้งานได้ในทุกสภาพแวดล้อมของคุณ และแม้ว่า Django จะเข้ากันได้แบบย้อนหลัง แต่ก็เป็นสิ่งสําคัญที่คุณจะต้องระบุส่วนประกอบใดๆ ในเว็บแอปของคุณที่อาจได้รับผลกระทบจากการแพตช์/อัปเดต

UpGuard มอบวิธีให้คุณทําได้อย่างง่ายดายและอัตโนมัติด้วยการคลิกเมาส์เพียงไม่กี่ครั้ง กลไกนโยบายอันทรงพลังของเราสามารถตรวจสอบการกําหนดค่าที่ปลอดภัยสําหรับสภาพแวดล้อม โครงสร้างพื้นฐาน และสแต็กแอปพลิเคชันทั้งหมด ในกรณีนี้ สามารถเรียกใช้นโยบายความปลอดภัย Django อย่างง่ายเพื่อตรวจสอบช่องโหว่ข้างต้น รวมถึงช่องโหว่ใหม่ที่ยังไม่ได้เพิ่มลงในนโยบาย ชุดตรวจจับและตรวจสอบช่องโหว่ที่ได้รับการสนับสนุนจาก OVAL ของเราช่วยให้มั่นใจได้ว่าส่วนประกอบ Django ทั้งหมดของคุณไม่มีช่องโหว่และช่องว่างด้านความปลอดภัย