이 글은 https://blog.p6.is/AST-Injection/ 글의 번역 및 약간의 추가적인 설명이 들어가 있습니다.

What is AST?

AST는 Abstract syntax tree의 약자입니다.

구문 해석기라 불리며, 컴파일러 개발시에 가장 꼭 필요한 요소입니다.

[Study] Abstract Syntax Tree (AST)

Abstract syntax tree - Wikipedia

AST Injection

AST Injection은 해당 컴파일러의 구문 해석 취약점을 이용하여 Injection하는 방식입니다.

특히, 인터프리터 컴파일러에서의 구문 해석 취약점을 노리며, 웹같은 경우, NodeJS로 구성된 웹에서 해커가 원하는 대로 스크립트를 삽입해 목적 외의 동작을 이끌어 낼 수 있습니다.

AST Injection in NodeJS

Untitled

NodeJS에서, AST는 JS의 탬플릿 엔진 또는 typescript등등과 같은 곳에서 가장 자주 쓰입니다.

이러한 탬플릿 엔진을 위해 위 사진과 같이 AST는 구조를 가지고 있습니다.

Untitled

만약 prototype단에서의 취약점이 JS 어플리케이션에서 존재한다면, 어느 AST든 Parser 또는 Compiler 프로세스 진행 도중에 삽입될 수 있고, 실행 시킬 수 있습니다.

여기, 당신이 Lexer 또는 parser에 의해 검증되지도 않은 입력값의 필터링도 없는 곳에서 AST를 삽입할 수 있다 가정해봅시다.

그렇다면, 우리는 컴파일러에 의도치 않은 입력을 주어, 임의적인 코드 실행을 발생시킬 수 있습니다.