flag는 파일 형태로 flag_xxxx 형태로 존재한다.
backend
지금 /debug/version에서는 fork함수를 통해 자식 프로세스를 생성하고 있다. 이때 이 함수는 사용자가 특정한 환경변수를 지정했는지 확인하고 options.env값이 있는지 확인해본다. 없다면 부모 프로세스의 환경변수를 그대로 복사한다.
만약 이 env값을 오염시킨다면 자식 프로세스는 오염된 환경변수를 그대로 복사하여 실행될 것이다.
여기서 활용할 환경변수는 두가지다.
1. RCE
2. NODE_OPTIONS
RCE는 실제 코드 실행을 위한 환경변수이고 NODE_OPTIONS는 node.js의 실행 옵션을 지정하는 환경변수이다. 여기서 NODE_OPTIONS에 -r 옵션을 주면 스크립트를 실행하기 전에 지정된 파일을 먼저 읽어서 실행한다. 그래서 NODE_OPTIONS="-r /proc/self/environ"을 설정하면 /proc/self/environ 파일의 내용을 읽어서 실행한다.
이 파일을 Node.js가 자바스크립트로 읽게 되는데, 이때 RCE의 값에 악성 스크립트를 주입하여 Command Injection을 일으킨다. throw를 통해 출력 메시지를 stderr로 내보내어 결과 페이지에 출력되도록 한다. 그러면 proc.stderr.pipe(res)에 의해 응답으로 출력된다.
하지만 현재 이 공격은 Node.js의 버전이 최신화됨으로써 패치가 되었다.