ZAP Efficient Scanner for Server Side Template Injection Using Polyglots
Total Page:16
File Type:pdf, Size:1020Kb
ZAP-ESUP: ZAP Efficient Scanner for Server Side Template Injection Using Polyglots Diogo Miguel Reis Silva Thesis to obtain the Master of Science Degree in Information Systems and Computer Engineering Supervisor(s): Prof. Pedro Miguel dos Santos Alves Madeira Adão Examination Committee Chairperson: Prof. Luis Manuel Antunes Veiga Supervisor: Prof. Pedro Miguel dos Santos Alves Madeira Adão Member of the Committee: Prof. Miguel Nuno Dias Alves Pupo Correia October 2018 ii Dedicado ao meu avoˆ Antonio´ e a` minha avo´ Luzita. iii iv Acknowledgments Primeiro de tudo queria agradecer aos meus pais por todo o suporte, ajuda, e amor que me deram. Tambem´ queria agradecer pelo apoio e carinho do meu irmao,˜ da minha namorada, dos meus avos´ e toda a fam´ılia. A qualidade deste documento nunca teria sido tao˜ boa caso nao˜ tivesse sido revisto varias´ vezes pelo meu orientador, a Rafaela, o Vasco, e o Filipe aos quais agradec¸o o grande trabalho e paciencia.ˆ Durante o desenvolvimento do meu scanner sempre que necessario´ tive a ajuda da equipa do ZAP thc202, Simon Bennetts e kingthorin pelo qual agradec¸o o tempo gasto e paciencia.ˆ Os ultimos´ dois anos da minha vida foram feitos de grandes amizades, felicidades e feitos grac¸as a toda a equipa dos STT, mas especialmente grac¸as ao Madlebro, ao Jofra, ao Jcfg, ao Majo, ao Xtrm0, ao NCA, ao Sabino e ao LordCommander. A equipa STT so´ e´ poss´ıvel grac¸as ao professor Adao˜ e ao seu incansavel´ empenho, consegui realizar o meu sonho de crianc¸a de me tornar um Hacker e no futuro trabalhar em algo que eu faria nos meus tempos livres, pelo qual lhe agradec¸o imensamente. Finalmente gostaria de agradecer aos meus amigos que me acompanharam durante todo o meu percurso academico´ e com os quais adorei trabalhar, o Nuno, o Alexandre e o Gonc¸alo. v vi Resumo Recentemente, Kettle [1] exposˆ a descoberta de um novo tipo de vulnerabilidade a` qual chamou Server Side Template Injection (SSTI). Esta vulnerabilidade acontece em Template Engines, que sao˜ programas usados para combinar modelos de dados com templates. Estes templates contemˆ tanto Hypertext Markup Language (HTML) como codigo´ de Template, que define como o HTML dinamicoˆ e´ gerado dependendo do modelo de dados recebido. O codigo´ de alguns template engines permitem a execuc¸ao˜ de toda a funcionalidade da linguagem de programac¸ao.˜ Se o input do utilizador for incorrectamente inserido no meio do template em vez de ser usado como modelo de dados, um atacante pode executar codigo´ no servidor. SSTI pode ser considerada uma vulnerabilidade da classe A1-Injection que e´ a classe de vulnerabilidade com o maior risco de seguranc¸a segundo o Open Web Application Security Project (OWASP) Top 10 2017 [2]. Pelo que sei so´ existem dois varredores de vulnerabilidades que detetam e exploram SSTI, Burp Suite e Tplmap. Estas soluc¸oes˜ ou sao˜ software proprietario´ (Burp Suite), ou temˆ uma quantidade limitada de payloads fixos e consequentemente restrito a um numero´ limitado de template engines (Tplmap). Nenhum deles consegue encontrar vulnerabilidades quando o input e´ guardado e usado depois em outras paginas (Stored SSTI). Neste trabalho, eu estudei as situac¸oes˜ onde SSTI pode estar presente, desenvolvi um varredor de vulnerabilidades que procura SSTI automaticamente num maior leque de situac¸oes˜ (reflected, stored, e blind), introduzi uma tecnica´ mais eficiente que usa payloads poliglotas para procurar SSTI com menos do que 25% dos pedidos feitos pelos outros varredores de vulnerabilidades, e conclui construindo e us- ando um conjunto de testes para comparar as soluc¸oes˜ existentes. Esta soluc¸ao˜ vai ser disponibilizada como um plug-in para o OWASP Zed Attack Proxy, que e´ uma ferramenta open-source para procurar vulnerabilidades em aplicac¸oes˜ web e que e´ usada por um grande numero´ de utilizadores. Palavras-chave: seguranc¸a, apllicac¸oes˜ web, SSTI, ingecc¸ao,˜ varredor de vulnerabilidades vii viii Abstract Recently, Kettle [1] exposed the discovery of a new type of vulnerability which he called SSTI. A Template engine is software used to combine data models with templates which contain both static HTML and template code. This template code defines how the dynamic HTML is generated depending on the given data model, and some even allow full programming language functionality. If the user input is incorrectly inserted in the middle of the template instead of being used as the data model, an attacker can execute code in the server. SSTI can be considered an A1-Injection that is the class with the highest security risk according to OWASP Top 10 2017 [2]. To the best of my knowledge only 2 solutions have been developed to detect or exploit SSTI, Burp Suite and Tplmap. These solutions are either proprietary software (Burp Suite), or have a limited amount of (fixed) payloads and consequently restricted to a limited number of template engines (Tplmap). None of them can find vulnerabilities when the input is stored and used in other pages (Stored SSTI). In this work, I studied the situations where SSTI may be present, developed a scanner that au- tomatically detects SSTI vulnerabilities in a broader range of situations (reflected, stored, and blind), introduced an efficient technique that uses polyglot payloads to detect SSTI with less than 25% of the requests made by the other scanners, and concluded by constructing and using a set of tests to com- pare with the existent solutions. The solution will be made available as a plug-in for OWASP Zed Attack Proxy, a widely used open-source penetration testing tool to find vulnerabilities in web applications. Keywords: security, web application, SSTI, injection, vulnerability scanner, polyglot ix x Contents Acknowledgments...........................................v Resumo................................................. vii Abstract................................................. ix List of Tables.............................................. xiii List of Figures............................................. xv Nomenclature..............................................1 Glossary................................................1 1 Introduction 1 1.1 Motivation.............................................1 1.2 Solution..............................................3 1.3 Objectives.............................................3 1.4 Thesis Outline..........................................4 2 Background 5 2.1 Web Applications.........................................5 2.2 Vulnerabilities Detection.....................................5 2.3 Server Side Template Injection.................................9 2.3.1 Relation of SSTI with other types of vulnerabilities.................. 11 2.3.2 Exploiting Server Side Template Injection....................... 12 2.3.3 Real cases of SSTI................................... 15 2.3.4 Analysis of situations where the vulnerability can happen.............. 17 2.4 Web Scanners for Injection Vulnerabilities........................... 19 2.5 Vulnerability Scanners for Server Side Template Injection.................. 24 2.6 OWASP Zed Attack Proxy.................................... 27 3 Implementation 29 3.1 Architecture and Interactions.................................. 30 3.2 Components Description..................................... 32 3.2.1 Sink Manager....................................... 32 3.2.2 Efficient Vulnerability Detector............................. 32 3.2.3 Message Comparator.................................. 37 xi 3.2.4 Arithmetic Evaluation Detector............................. 41 3.2.5 Blind Vulnerability Detector............................... 42 3.2.6 Syntax Fixer....................................... 42 4 Experiemental Evaluation 45 4.1 Simple Tests - Reflected Results................................ 46 4.2 Stored and Blind SSTI Test Cases............................... 47 4.3 Injection inside template code tests............................... 49 4.4 Real Example Test........................................ 50 4.5 Performance Tests........................................ 50 4.6 Generalisation Capacity Tests.................................. 52 5 Conclusions 55 5.1 Achievements........................................... 55 5.2 Future Work............................................ 56 Bibliography 57 xii List of Tables 2.1 Possible test result classification.................................6 2.2 Probe pairs from Backslash Powered Scanner [37]...................... 21 3.1 Capabilities depending on the ZAP Strength configuration.................. 29 3.2 Tests to discover the best way of causing errors........................ 35 3.3 Tests to polyglots......................................... 36 3.4 Specific tests to Django, DustJs and Go............................ 42 4.1 Simple Vulnerabilities Detection Table. yes - found vulnerability; ybne - found vulnerability but says that is not exploitable; the column RCE says if I found an exploit for rce in some source or by myself........................................ 47 4.2 Stored and Blind SSTI tests results............................... 48 4.3 Injection inside template code tests results.......................... 49 4.4 Performance Tests Table..................................... 51 4.5 Generalisation capacity tests results.............................. 52 xiii xiv List of Figures 2.1 Process of rendering a template................................. 10 2.2 Reflected SSTI timeline...................................... 17 2.3 Stored SSTI with posterior injection and rendering timeline.................. 18 2.4