본문 바로가기
HACKING/Web

Node.js#0 Pug Template XSS(Cross Site Scripting)

by asdf12345 2021. 3. 22.

 

 

 

 

Client에서 Server로 부터 변수를 받을때 이용해야할 문법은 ?

!{} vs #{} 

 

 

 

 

 

 

[ Node.js#0 Pug Template XSS(Cross Site Scripting) ]

Table of contents

#0 Introduction

#1 Vulnerable Code for XSS by using Pug Template "#{}" 

#2 Security Code for XSS by using Pug Template "!{}" 

#3 Conclusion

 

 

 

#0 Introduction

11년 전에 발표된 Software Platform인 Node.js는 현재 15.12.0 버전까지 출시됐으며, Server, Client 개발 언어(Javascript)의 통일로 인한 언어 습득 시간 감소, I/O 작업 도중에도 User Process 작업 중단이 이뤄지지 않는 Non-Blocking I/O 방식을 통한 효율적인 처리가 가능하기 때문에 현재는 주요 Network Application 개발을 위한 Software Platform으로 이용되고 있다. 개발자들의 인기만 얻으면 좋겠으나, Web Service 개발의 주된 Platform인 만큼 정보 탈취, 서비스 마비를 위한 공격자들의 주된 관심사가 되기도 한다. 그렇기때문에 보다 사회에 안전한 서비스 제공을 위해 Node.js 취약점에 대해 연구하고 그에 대한 대응 기술을 익히고 제공하고자 글을 작성한다.

#1 Vulnerable Code for XSS by using Pug Template "!{}" 

  • 결론 : Script 생성에 이용되는 "<", ">" 등의 문자열이 Pug Template Engine에 입력 받아진 후, HTML Character Entity로의 변환없이 Client Side Script에 정상 삽입되어 XSS 공격 가능

Server로 부터 변수를 받기위해 "!{}" 이용

Express에서 Pug Engine 에 JSON Data 형식으로 XSS 유발 구문 전달

경로 : main.js

Response 확인 시, 공격자가 의도한 스크립트가 정상적으로 삽입되어 실행 가능함을 알 수 있음.

 

#2 Security Code for XSS by using Pug Template "#{}" 

  • 결론 : Script생성에 이용되는 "<", ">"가 Client Side Script에 HTML Character Entity로 변경 후 전달되므로 XSS공격 불가 

Server로 부터 변수를 받기위해 "#{}" 이용

경로 : views/test.pug

Express에서 Template인 Pug Engine에 JSON Data 형식으로 XSS 유발 구문 전달

경로 : main.js

Response 확인 시, HTML Character Entities 로 변환된 XSS 유발 구문 확인 가능

 

 

#3 Conclusion

Template인 Pug Engine을 통한 이용자 입력 수신 시, #{} 문법을 이용하여 공격자가 의도한 Script 삽입 방지 필요

경로 : views/test.pug