Ang kahinaan sa Apache Tomcat na nagbibigay-daan sa pagpapalit ng JSP code at pagkuha ng mga web application file

Natuklasan ng mga mananaliksik mula sa kumpanyang Tsino na Chaitin Tech kahinaan (CVE-2020-1938) sa Apache Tomcat, isang bukas na pagpapatupad ng Java Servlet, JavaServer Pages, Java Expression Language at mga teknolohiya ng Java WebSocket. Ang kahinaan ay itinalaga ng code name na Ghostcat at isang kritikal na antas ng kalubhaan (9.8 CVSS). Ang problema ay nagbibigay-daan, sa default na pagsasaayos, sa pamamagitan ng pagpapadala ng kahilingan sa network port 8009, na basahin ang mga nilalaman ng anumang mga file mula sa direktoryo ng web application, kabilang ang mga file na may mga setting at source code ng application.

Ginagawang posible rin ng kahinaan na mag-import ng iba pang mga file sa application code, na nagbibigay-daan para sa pagpapatupad ng code sa server kung pinapayagan ng application na ma-upload ang mga file sa server (halimbawa, ang isang attacker ay maaaring mag-upload ng JSP script na nakatago bilang isang imahe sa pamamagitan ng ang form sa pag-upload ng larawan). Ang pag-atake ay maaaring isagawa kapag posible na magpadala ng kahilingan sa isang network port na may AJP handler. Ayon sa paunang datos, online natagpuan higit sa 1.2 milyong host ang tumatanggap ng mga kahilingan sa pamamagitan ng AJP protocol.

Ang kahinaan ay umiiral sa AJP protocol, at hindi tinatawag pagkakamali sa pagpapatupad. Bilang karagdagan sa pagtanggap ng mga koneksyon sa pamamagitan ng HTTP (port 8080), ang Apache Tomcat bilang default ay nagbibigay-daan sa pag-access sa isang web application sa pamamagitan ng AJP protocol (Apache Jserv Protocol, port 8009), na isang binary analogue ng HTTP na na-optimize para sa mas mataas na performance, kadalasang ginagamit kapag gumagawa ng isang cluster ng mga Tomcat server o upang pabilisin ang pakikipag-ugnayan sa Tomcat sa isang reverse proxy o load balancer.

Ang AJP ay nagbibigay ng isang karaniwang function para sa pag-access ng mga file sa server, na maaaring magamit, kabilang ang pagkuha ng mga file na hindi napapailalim sa pagsisiwalat. Ang AJP ay dapat na ma-access lamang sa mga pinagkakatiwalaang server, ngunit sa katunayan ang default na configuration ng Tomcat ay nagpatakbo ng handler sa lahat ng mga interface ng network at tinatanggap na mga kahilingan nang walang pagpapatunay. Posible ang pag-access sa anumang mga file ng web application, kabilang ang mga nilalaman ng WEB-INF, META-INF at anumang iba pang mga direktoryo na ibinigay sa pamamagitan ng isang tawag sa ServletContext.getResourceAsStream(). Pinapayagan ka rin ng AJP na gumamit ng anumang file sa mga direktoryo na maa-access sa web application bilang isang JSP script.

Lumilitaw ang problema mula noong inilabas ang Tomcat 13.x branch 6 taon na ang nakakaraan. Bilang karagdagan sa problema ng Tomcat mismo nakakaapekto at mga produktong gumagamit nito, gaya ng Red Hat JBoss Web Server (JWS), JBoss Enterprise Application Platform (EAP), pati na rin ang mga self-contained na web application na gumagamit Spring boot. Katulad na kahinaan (CVE-2020-1745) naroroon sa web server Pasalungat na agos sa ilalim ng tubig, na ginagamit sa server ng application ng Wildfly. Sa JBoss at Wildfly, ang AJP ay pinagana bilang default sa standalone-full-ha.xml, standalone-ha.xml at ha/full-ha na mga profile sa domain.xml. Sa Spring Boot, ang suporta sa AJP ay hindi pinagana bilang default. Sa kasalukuyan, ang iba't ibang grupo ay naghanda ng higit sa isang dosenang mga nagtatrabaho na halimbawa ng mga pagsasamantala (
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11).

Naayos ang kahinaan sa mga release ng Tomcat 9.0.31, 8.5.51 ΠΈ 7.0.100 (pagpapanatili ng 6.x branch itinigil). Maaari mong subaybayan ang pagkakaroon ng mga update sa mga distribution kit sa mga page na ito: Debian, Ubuntu, RHEL, Fedora, SUSE, FreeBSD. Bilang isang solusyon, maaari mong hindi paganahin ang serbisyo ng Tomcat AJP Connector (itali ang isang socket sa pakikinig sa localhost o magkomento sa linya gamit ang Connector port = "8009") kung hindi ito kailangan, o ayos napatotohanan na pag-access gamit ang mga katangiang "lihim" at "address", kung ang serbisyo ay ginagamit upang makipag-ugnayan sa ibang mga server at proxy batay sa mod_jk at mod_proxy_ajp (hindi sinusuportahan ng mod_cluster ang pagpapatotoo).

Pinagmulan: opennet.ru

Magdagdag ng komento