
Apache Tomcat vulnerabilità di bypass della sicurezza Poc

Recentemente, Apache ha rilasciato un avviso di sicurezza affermando che diverse versioni di Apache Tomcat 7, 8 e 9 presentano una vulnerabilità di bypass della sicurezza. Un attaccante può sfruttare questo problema per aggirare alcune restrizioni di sicurezza ed eseguire operazioni non autorizzate, il che potrebbe facilitare ulteriori attacchi.
I vincoli di sicurezza definiti dalle annotazioni dei servlet di Apache Tomcat vengono applicati una sola volta dopo il caricamento del servlet. Poiché i vincoli di sicurezza definiti in questo modo si applicano al pattern URL e a qualsiasi URL al di sotto di quel punto, probabilmente dipendono dall'ordine di caricamento dei servlet, il che potrebbe esporre le risorse a utenti non autorizzati che tentano di accedervi.
CVE-2018-1305
Apache Tomcat < 9.0.5
Apache Tomcat < 8.5.28
Apache Tomcat < 8.0.50
Apache Tomcat < 7.0.85
Medio
Java EE fornisce annotazioni ServletSecurity simili ai controlli delle autorizzazioni ACL, che possono essere utilizzate per decorare i servlet e proteggerli. Se ci sono due servlet, Servlet1 con percorso di accesso "/servlet1/" e annotazione ServletSecurity aggiunta, e Servlet2 con percorso "/servlet1/servlet2/" ma senza annotazione ServletSecurity, al primo accesso a servlet1/servlet2, l'annotazione ServletSecurity di Servlet1 non viene applicata, non riuscendo a proteggere il percorso "/servlet1/servlet2", portando potenzialmente ad accessi non autorizzati.
Se si accede prima a "/servlet1" prima di accedere a "/servlet1/servlet2", Tomcat caricherà l'ACL e avvierà la protezione per "/servlet1/servlet2", quindi la vulnerabilità non viene attivata.

Aggiungere l'annotazione ServletSecurity prima di Servlet1, Servlet2 senza tale annotazione.

Modificare il url-pattern corrispondente al servlet nel file web.xml come mostrato nell'immagine seguente.

Eseguire il progetto. Al primo accesso all'URL di servlet2, si scopre che è possibile un accesso non autorizzato, l'ACL per servlet1 non viene applicata.
http://localhost:8080/CVE-2018-1305/servlet1/servlet2/

Al secondo accesso all'URL di servlet1, l'accesso viene negato, a questo punto l'ACL è attiva.
http://localhost:8080/CVE-2018-1305/servlet1/

Accedendo nuovamente all'URL di servlet2, si scopre che l'accesso è negato. Affinché l'ACL si applichi a servlet2, è necessario che servlet1 sia stato precedentemente visitato.
http://localhost:8080/CVE-2018-1305/servlet1/servlet2/


Pertanto, la riproduzione della vulnerabilità è limitata al caso in cui, dopo l'avvio di Tomcat, si acceda prima alla pagina "/servlet1/servlet2/" prima di accedere a "/servlet1/". Se qualcuno ha già visitato la pagina "/servlet1/*" in precedenza, la vulnerabilità non viene attivata. La vulnerabilità ha un alto impatto, ma le condizioni per lo sfruttamento sono difficili, quindi l'area di impatto non è ampia.
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1305