ช่องโหว่ใน Apache Tomcat ที่อนุญาตให้คุณแทนที่โค้ด JSP และรับไฟล์แอปพลิเคชันเว็บ

นักวิจัยจากบริษัท Chaitin Tech ของจีนได้ค้นพบ จุดอ่อน (CVE-2020-1938) ใน Apache Tomcatซึ่งเป็นการใช้งานแบบเปิดของเทคโนโลยี Java Servlet, JavaServer Pages, Java Expression Language และ Java WebSocket ช่องโหว่ดังกล่าวได้รับการกำหนดชื่อรหัส Ghostcat และระดับความรุนแรงวิกฤต (9.8 CVSS) ในการกำหนดค่าเริ่มต้น ปัญหานี้ช่วยให้สามารถอ่านเนื้อหาของไฟล์ใดๆ จากไดเรกทอรีเว็บแอปพลิเคชัน รวมถึงไฟล์ที่มีการตั้งค่าและซอร์สโค้ดของแอปพลิเคชัน โดยการส่งคำขอบนพอร์ตเครือข่าย 8009

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

ช่องโหว่นี้มีอยู่ในโปรโตคอล AJP และ ไม่ได้เรียกว่า ข้อผิดพลาดในการดำเนินการ นอกเหนือจากการยอมรับการเชื่อมต่อผ่าน HTTP (พอร์ต 8080) แล้ว Apache Tomcat ตามค่าเริ่มต้นยังอนุญาตให้เข้าถึงแอปพลิเคชันเว็บผ่านโปรโตคอล AJP (โปรโตคอล Apache Jservพอร์ต 8009) ซึ่งเป็นอะนาล็อกไบนารี่ของ HTTP ที่ได้รับการปรับให้เหมาะสมเพื่อประสิทธิภาพที่สูงขึ้น โดยปกติจะใช้เมื่อสร้างคลัสเตอร์ของเซิร์ฟเวอร์ Tomcat หรือเพื่อเพิ่มความเร็วในการโต้ตอบกับ Tomcat บนพร็อกซีย้อนกลับหรือโหลดบาลานเซอร์

AJP จัดให้มีฟังก์ชันมาตรฐานสำหรับการเข้าถึงไฟล์บนเซิร์ฟเวอร์ซึ่งสามารถใช้ได้รวมถึงการรับไฟล์ที่ไม่อยู่ภายใต้การเปิดเผย AJP ควรจะสามารถเข้าถึงได้โดยเซิร์ฟเวอร์ที่เชื่อถือได้เท่านั้น แต่ในความเป็นจริงแล้ว การกำหนดค่าเริ่มต้นของ Tomcat จะรันตัวจัดการบนอินเทอร์เฟซเครือข่ายทั้งหมด และคำขอที่ยอมรับโดยไม่มีการตรวจสอบสิทธิ์ สามารถเข้าถึงไฟล์แอปพลิเคชันเว็บใดๆ ก็ได้ รวมถึงเนื้อหาของ WEB-INF, META-INF และไดเร็กทอรีอื่นๆ ที่ให้ไว้ผ่านการเรียกไปยัง ServletContext.getResourceAsStream() AJP ยังอนุญาตให้คุณใช้ไฟล์ใดๆ ในไดเร็กทอรีที่เว็บแอปพลิเคชันเข้าถึงได้เป็นสคริปต์ JSP

ปัญหาเกิดขึ้นตั้งแต่สาขา Tomcat 13.x เปิดตัวเมื่อ 6 ปีที่แล้ว นอกจากปัญหาของ Tomcat แล้วนั้นเอง ส่งผลกระทบ และผลิตภัณฑ์ที่ใช้งาน เช่น Red Hat JBoss Web Server (JWS), JBoss Enterprise Application Platform (EAP) รวมถึงเว็บแอปพลิเคชันในตัวเองที่ใช้ สปริงบูต. ช่องโหว่ที่คล้ายกัน (CVE-2020-1745) นำเสนอ บนเว็บเซิร์ฟเวอร์ กระแสน้ำทวนกระแสน้ำข้าใช้ในแอปพลิเคชันเซิร์ฟเวอร์ Wildfly ใน JBoss และ Wildfly นั้น AJP จะเปิดใช้งานตามค่าเริ่มต้นเฉพาะในโปรไฟล์ standalone-full-ha.xml, standalone-ha.xml และ ha/full-ha ใน domain.xml ใน Spring Boot การสนับสนุน AJP จะถูกปิดใช้งานตามค่าเริ่มต้น ในปัจจุบัน กลุ่มต่างๆ ได้เตรียมตัวอย่างการทำงานของการหาประโยชน์มากกว่าหนึ่งโหล (
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11).

แก้ไขช่องโหว่ในรุ่น Tomcat 9.0.31, 8.5.51 и 7.0.100 (การบำรุงรักษาสาขา 6.x ยกเลิกแล้ว). คุณสามารถติดตามความพร้อมใช้งานของการอัปเดตในชุดการแจกจ่ายได้ที่หน้าเหล่านี้: debian, อูบุนตู, RHEL, Fedora, SUSE, FreeBSD. วิธีแก้ปัญหาชั่วคราว คุณสามารถปิดใช้งานบริการ Tomcat AJP Connector (ผูกซ็อกเก็ตการฟังกับ localhost หรือแสดงความคิดเห็นในบรรทัดด้วย Connector port = "8009") หากไม่จำเป็น หรือ ตั้งค่า การเข้าถึงที่ผ่านการรับรองความถูกต้องโดยใช้แอตทริบิวต์ "ความลับ" และ "ที่อยู่" หากใช้บริการเพื่อโต้ตอบกับเซิร์ฟเวอร์และพรอกซีอื่น ๆ ตาม mod_jk และ mod_proxy_ajp (mod_cluster ไม่รองรับการตรวจสอบสิทธิ์)

ที่มา: opennet.ru

เพิ่มความคิดเห็น