Ranljivost v Apache Tomcat, ki omogoča zamenjavo kode JSP in pridobivanje datotek spletne aplikacije

Raziskovalci kitajskega podjetja Chaitin Tech so odkrili ranljivost (CVE-2020-1938) v Apache Tomcat, odprta implementacija tehnologij Java Servlet, JavaServer Pages, Java Expression Language in Java WebSocket. Ranljivosti je bilo dodeljeno kodno ime Ghostcat in kritična stopnja resnosti (9.8 CVSS). Težava omogoča v privzeti konfiguraciji s pošiljanjem zahteve na omrežna vrata 8009 branje vsebine katere koli datoteke iz imenika spletne aplikacije, vključno z datotekami z nastavitvami in izvorno kodo aplikacije.

Ranljivost prav tako omogoča uvoz drugih datotek v kodo aplikacije, kar omogoča izvajanje kode na strežniku, če aplikacija dovoljuje nalaganje datotek na strežnik (napadalec lahko na primer naloži skript JSP, prikrit v sliko prek obrazec za nalaganje slik). Napad se lahko izvede, ko je mogoče poslati zahtevo na omrežna vrata z AJP handlerjem. Po predhodnih podatkih na spletu našel več kot 1.2 milijona gostiteljev sprejema zahteve prek protokola AJP.

Ranljivost obstaja v protokolu AJP in ni poklican napaka pri izvedbi. Poleg sprejemanja povezav prek HTTP (vrata 8080) Apache Tomcat privzeto omogoča dostop do spletne aplikacije prek protokola AJP (Protokol Apache Jserv, vrata 8009), ki je binarni analog HTTP-ja, optimiziran za višjo zmogljivost, ki se običajno uporablja pri ustvarjanju gruče strežnikov Tomcat ali za pospešitev interakcije s Tomcatom na povratnem proxyju ali izravnalniku obremenitve.

AJP ponuja standardno funkcijo za dostop do datotek na strežniku, ki jo je mogoče uporabiti, vključno s pridobivanjem datotek, ki niso predmet razkritja. AJP naj bi bil dostopen samo zaupanja vrednim strežnikom, vendar je Tomcatova privzeta konfiguracija dejansko izvajala upravljalnik na vseh omrežnih vmesnikih in sprejemala zahteve brez preverjanja pristnosti. Dostop je možen do vseh datotek spletne aplikacije, vključno z vsebino WEB-INF, META-INF in vseh drugih imenikov, ki so na voljo prek klica ServletContext.getResourceAsStream(). AJP omogoča tudi uporabo katere koli datoteke v imenikih, ki so dostopni spletni aplikaciji, kot skript JSP.

Težava se pojavlja že od izdaje veje Tomcat 13.x pred 6 leti. Poleg samega problema Tomcat vpliva in izdelki, ki ga uporabljajo, kot je Red Hat JBoss Web Server (JWS), JBoss Enterprise Application Platform (EAP), kot tudi samostojne spletne aplikacije, ki uporabljajo Pomladni čevelj. Podobna ranljivost (CVE-2020-1745) prisoten v spletnem strežniku Undertow, ki se uporablja v aplikacijskem strežniku Wildfly. V JBoss in Wildfly je AJP privzeto omogočen le v profilih standalone-full-ha.xml, standalone-ha.xml in ha/full-ha v domain.xml. V programu Spring Boot je podpora za AJP privzeto onemogočena. Trenutno so različne skupine pripravile več kot ducat delujočih primerov podvigov (
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11).

Ranljivost je odpravljena v izdajah Tomcat 9.0.31, 8.5.51 и 7.0.100 (vzdrževanje veje 6.x prekinjeno). Razpoložljivost posodobitev v distribucijskih kompletih lahko spremljate na teh straneh: Debian, Ubuntu, RHEL, Fedora, SUSE, FreeBSD. Kot rešitev lahko onemogočite storitev Tomcat AJP Connector (povežite poslušajočo vtičnico z lokalnim gostiteljem ali komentirajte vrstico s Connector port = "8009"), če ni potrebna, ali nastavite overjen dostop z atributoma “secret” in “address”, če se storitev uporablja za interakcijo z drugimi strežniki in posredniki na podlagi mod_jk in mod_proxy_ajp (mod_cluster ne podpira avtentikacije).

Vir: opennet.ru

Dodaj komentar